Pular para o conteúdo principal

CREATE TABLE ... FLOW (pipelines)

info

Beta

Este recurso está em Beta.

Use a instrução CREATE TABLE ... FLOW para criar uma tabela gerenciada em um 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 direcionar várias fontes para uma única tabela gerenciada, declare vários fluxos que a segmentam com CREATE FLOW (pipelines):

CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query

Parâmetros

  • table_name

    O nome da tabela gerenciada a ser criada. Se o nome não for qualificado, a tabela será criada no esquema de destino do pipeline. O nome não deve pertencer a uma tabela de transmissão.

  • table_specification

    Opcionalmente, define as colunas, seus tipos, propriedades e descrições. Se omitido, o esquema é inferido da query do fluxo.

  • CONSTRAINT expectation_name EXPECT (expectation_expr) [ ON VIOLATION { FAIL UPDATE | DROP ROW } ]

    Adiciona expectativas de qualidade de dados à tabela gerenciada. Essas expectativas de qualidade de dados podem ser acompanhadas ao longo do tempo e acessadas por meio do log de eventos do pipeline. Uma expectativa FAIL UPDATE faz com que o processamento falhe tanto na criação quanto na atualização da tabela. Uma expectativa DROP ROW faz com que a linha inteira seja descartada se a expectativa não for atendida. Consulte Gerenciar a qualidade dos dados com expectativas de pipeline.

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

    Além disso, expectation_expr não deve conter nenhuma subconsulta.

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

    Opcionalmente, particiona a tabela por um subconjunto de colunas.

  • Cláusula CLUSTER BY

    Opcionalmente ativa clustering líquido na tabela. Não é possível combinar PARTITIONED BY e CLUSTER BY.

  • Caminho do local

    Um local de armazenamento opcional para os dados da tabela.

  • COMMENT table_comment

    Um literal STRING que descreve a tabela.

  • Cláusula TBLPROPERTIES

    Define opcionalmente uma ou mais propriedades de tabela definidas pelo usuário.

  • Cláusula WITH ROW FILTER

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

  • FLOW INSERT [ONCE] BY NAME query

    Define um fluxo de acréscimo que insere o resultado de query na tabela, correspondendo colunas de resultado a colunas da tabela pelo nome . query pode fazer referência a fontes de lotes ou de transmissão. ONCE executa o fluxo uma única vez (por exemplo, para um preenchimento retroativo) em vez de a cada atualização. Cada fluxo nomeado processa sua entrada exatamente uma vez por atualização de pipeline, idêntico a FLOW INSERT BY NAME em uma tabela de transmissão.

Limitações

  • Tabelas gerenciadas não oferecem suporte a fluxos de alteração de CDC. AUTO CDC INTO (SQL) ou apply_changes / apply_changes_from_snapshot (Python) contra uma tabela gerenciada falha com MANAGED_TABLE_DOES_NOT_SUPPORT_CDC. Use uma CREATE STREAMING TABLE (pipelines) para destinos CDC.
  • Tabelas gerenciadas não suportam FLOW ... REPLACE WHERE. Somente FLOW INSERT BY NAME é suportado.
  • Tabelas gerenciadas são compatíveis apenas em pipelines com o Unity Catalog. O Hive metastore não é compatível.
  • Não é possível reutilizar o nome de uma tabela de transmissão existente para uma tabela gerenciada. Descarte a tabela de transmissão primeiro, ou a declaração falhará com CANNOT_SWITCH_STREAMING_TABLE_TO_MANAGED_TABLE.

Exemplos

SQL
-- 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