CREATE TABLE ... FLOW (pipelines)
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 UPDATEfaz com que o processamento falhe tanto na criação quanto na atualização da tabela. Uma expectativaDROP ROWfaz 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_exprpode ser composto por literais, identificadores de coluna dentro da tabela e funções ou operadores SQL integrados e determinísticos, exceto:- Funções de agregação
- Funções de janela analíticas
- Funções de janela de classificação
- Funções geradoras com valor de tabela
Além disso,
expectation_exprnão deve conter nenhuma subconsulta. - Funções de agregação
-
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 BYeCLUSTER BY. -
Caminho do local
Um local de armazenamento opcional para os dados da tabela.
-
COMMENT table_comment
Um literal
STRINGque 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
queryna tabela, correspondendo colunas de resultado a colunas da tabela pelo nome .querypode fazer referência a fontes de lotes ou de transmissão.ONCEexecuta 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 aFLOW INSERT BY NAMEem uma tabela de transmissão.
Limitações
- Tabelas gerenciadas não oferecem suporte a fluxos de alteração de CDC.
AUTO CDC INTO(SQL) ouapply_changes/apply_changes_from_snapshot(Python) contra uma tabela gerenciada falha comMANAGED_TABLE_DOES_NOT_SUPPORT_CDC. Use uma CREATE STREAMING TABLE (pipelines) para destinos CDC. - Tabelas gerenciadas não suportam
FLOW ... REPLACE WHERE. SomenteFLOW 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
-- 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');