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] } [, ...] )

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 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 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');

Recursos adicionais