CREATE TABLE ... FLOW (oleodutos)

Importante

Este recurso está em versão Beta.

Use a CREATE TABLE ... FLOW instrução para criar uma tabela gerida num pipeline, escrita por um ou mais fluxos.

Sintaxe

CREATE TABLE
  table_name
  [ table_specification ]
  [ table_clauses ]
  [ flow_clause ]

table_specification
  ( { column_identifier column_type [column_properties] } [, ...]
    [ CONSTRAINT expectation_name EXPECT (expectation_expr)
        [ ON VIOLATION { FAIL UPDATE | DROP ROW } ] ] [, ...] )

table_clauses
  { PARTITIONED BY (col [, ...]) |
    CLUSTER BY clause |
    LOCATION path |
    COMMENT table_comment |
    TBLPROPERTIES clause |
    WITH { ROW FILTER clause } } [ ... ]

flow_clause
  FLOW INSERT [ONCE] BY NAME query

Para ventilar múltiplas fontes numa tabela gerida, declare vários fluxos que a direcionam com CREATE FLOW (pipelines):

CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query

Parameters

  • table_name

    O nome da tabela gerida a criar. Se o nome não for qualificado, a tabela é criada no esquema alvo do pipeline. O nome não deve já pertencer a uma tabela de streaming.

  • especificação_da_tabela

    Opcionalmente define as colunas, os seus tipos, propriedades e descrições. Se omitido, o esquema é inferido a partir da consulta de fluxo.

  • CONSTRAINT expectation_name EXIGIR (expectation_expr) [ EM CASO DE VIOLAÇÃO { FAIL UPDATE | DROP ROW } ]

    Adiciona expectativas de qualidade dos dados à tabela gerida. Estas expectativas de qualidade dos dados podem ser acompanhadas ao longo do tempo e acedidas através do registo de eventos do pipeline. Uma expectativa de FAIL UPDATE faz com que o processamento falhe ao criar a tabela e ao atualizá-la. Uma DROP ROW expectativa faz com que toda a linha seja removida se a expectativa não for cumprida. Consulte Gerir a qualidade dos dados com as expectativas do fluxo de dados.

    expectation_expr pode ser composta por literais, identificadores de coluna dentro da tabela e funções ou operadores SQL determinísticos incorporados, exceto:

    Também expectation_expr não deve conter nenhuma subconsulta.

  • DIVIDIDO POR (col [, ...])

    Opcionalmente, particiona a tabela por um subconjunto de colunas.

  • CLUSTER BY cláusula

    Opcionalmente, ativa o agrupamento de líquidos na mesa. Não se pode combinar PARTITIONED BY e CLUSTER BY.

  • Caminho de LOCALIZAÇÃO

    Um local opcional de armazenamento para os dados da tabela.

  • COMENTÁRIO table_comment

    Uma STRING descrição literal da mesa.

  • Cláusula TBLPROPERTIES

    Opcionalmente, define uma ou mais propriedades de tabela definidas pelo utilizador.

  • cláusula WITH ROW FILTER

    Adiciona uma função de filtro de linha à tabela. Consultas futuras para essa tabela recebem um subconjunto das linhas para as quais a função avalia para TRUE.

  • CONSULTA DE FLUXO INSERT [ONCE] POR NOME

    Define um fluxo de adição que insere o resultado de query na tabela, associando as colunas de resultado às colunas da tabela pelo nome. query pode consultar fontes em lote ou em streaming. ONCE Executa o fluxo uma única vez (por exemplo, para um preenchimento) em vez de em todas as atualizações. Cada fluxo nomeado processa a sua entrada exatamente uma vez por atualização de pipeline, idêntico a FLOW INSERT BY NAME uma tabela de streaming.

Limitações

  • As tabelas geridas não suportam fluxos de alteração CDC. AUTO CDC INTO(SQL) ou apply_changes / apply_changes_from_snapshot (Python) contra uma tabela gerida falha com .MANAGED_TABLE_DOES_NOT_SUPPORT_CDC Use a CREATE STREAMING TABLE (pipelines) para os alvos do CDC.
  • As tabelas geridas não suportam FLOW ... REPLACE WHERE. Só o FLOW INSERT BY NAME é suportado.
  • As tabelas geridas são suportadas apenas em pipelines com o Unity Catalog. A metastore Hive não é suportada.
  • Não pode reutilizar o nome de uma tabela de streaming existente para uma tabela gerida. Elimine primeiro a tabela de streaming, ou a instrução falha com CANNOT_SWITCH_STREAMING_TABLE_TO_MANAGED_TABLE.

Exemplos

-- Create a managed table populated by an inline append flow from a streaming table
CREATE TABLE output
FLOW INSERT BY NAME SELECT * FROM STREAM(samples.tpch.orders);

-- Create a managed table that ingests files with schema inference and evolution
CREATE TABLE raw_data
FLOW INSERT BY NAME
  SELECT * FROM STREAM read_files('abfss://<container-name>@<storage-account-name>.dfs.core.windows.net/base/path');

-- Create a partitioned managed table from a streaming source
CREATE TABLE events
PARTITIONED BY (bucket)
FLOW INSERT BY NAME
  SELECT id, bucket FROM STREAM read_files('abfss://my_path', format => 'json');

-- Create a managed table with liquid clustering
CREATE TABLE orders_clustered
CLUSTER BY (order_date, customer_id)
FLOW INSERT BY NAME
  SELECT
    o_orderkey   AS order_id,
    o_custkey    AS customer_id,
    o_orderdate  AS order_date,
    o_totalprice AS total_price
  FROM STREAM(samples.tpch.orders);

-- Create a managed table with a data quality expectation that drops violating rows
CREATE TABLE valid_events
  (CONSTRAINT positive_id EXPECT (id > 0) ON VIOLATION DROP ROW)
FLOW INSERT BY NAME
  SELECT id FROM STREAM read_files('s3://bucket/path', format => 'json');

Recursos adicionais