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] } [, ...] )
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.
-
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 append flow
CREATE TABLE output
FLOW INSERT BY NAME SELECT id FROM LIVE.source;
-- 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');