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 [ IMPORT CHECKPOINT checkpoint_path ] 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. -
IMPORT CHECKPOINT checkpoint_path
Um literal
STRINGcom o caminho para um ponto de verificação de Structured Streaming existente para importar para o fluxo, para que uma transmissão migrada retome a partir do último deslocamento confirmado em vez de reprocessar a fonte. A importação de um ponto de verificação está em Beta. Consulte Migrar um ponto de verificação de Structured Streaming.
Migrar um ponto de verificação de Structured Streaming
Beta
A importação de um ponto de verificação está em Beta.
Use IMPORT CHECKPOINT para migrar uma carga de trabalho de Structured Streaming existente para um pipeline sem processar novamente a fonte. Defina checkpoint_path como checkpointLocation usada pela sua query de Structured Streaming, que pode ser um armazenamento na cloud, um volume do Unity Catalog ou um caminho DBFS. Na primeira atualização do pipeline, o fluxo clona esse ponto de verificação no armazenamento gerenciado pelo pipeline. O fluxo então retoma do último deslocamento confirmado com seu estado (como agregações, keys de deduplicação e marcas d'água) intacto. As atualizações subsequentes do pipeline usam o ponto de verificação clonado do fluxo; o ponto de verificação original não é modificado.
Pare a query de Structured Streaming original antes de executar o pipeline. A query de Structured Streaming original pode ser reutilizada após a importação, mas você precisa gerenciar seu estado de ponto de verificação e garantir que o pipeline e a query não escrevam na mesma tabela ao mesmo tempo, o que pode produzir dados duplicados.
Recrie a query de Structured Streaming como um fluxo de pipeline que continua escrevendo na tabela na qual a query escreveu e importe seu ponto de verificação:
-- Use the existing table your Structured Streaming query writes to; CREATE TABLE adopts it.
CREATE TABLE streaming_table
-- Continue from the imported checkpoint instead of reprocessing the source.
FLOW IMPORT CHECKPOINT '/Volumes/my_catalog/my_schema/checkpoints/my_stream'
INSERT BY NAME
-- The same source your original query read from.
SELECT * FROM STREAM(source_table);
O ponto de verificação é importado apenas na primeira atualização do pipeline. Atualizações posteriores ignoram IMPORT CHECKPOINT. Uma refresh completa não reimporta o ponto de verificação. Começa a partir de um novo ponto de verificação vazio e reprocessa a fonte.
Limitações
- Tabelas gerenciadas do not support CDC change flows.
AUTO CDC INTO(SQL) orapply_changes/apply_changes_from_snapshot(Python) against a tabela gerenciada fails withMANAGED_TABLE_DOES_NOT_SUPPORT_CDC. For CDC targets, use a CREATE STREAMING TABLE (pipelines) with a flow defined by CREATE FLOW (pipelines). - As tabelas gerenciadas não oferecem suporte a
FLOW ... REPLACE WHERE. ApenasFLOW INSERT BY NAMEé suportado. Para recalcular e substituir um subconjunto segmentado de uma tabela, crie uma tabela de transmissão e defina um fluxoREPLACE WHEREcom CREATE FLOW (pipelines). Consulte Processamento em lotes com fluxos REPLACE WHERE. - 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. IMPORT CHECKPOINTé suportado apenas emFLOW INSERT BY NAME.
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');