CREATE TABLE ... FLOW (pipelines)

Importante

Esse recurso está em Beta.

Use a CREATE TABLE ... FLOW instrução para criar uma tabela gerenciada em um pipeline, escrito 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 inserir várias fontes em uma tabela gerenciada, declare vários fluxos direcionados a ela com CREATE FLOW (pipelines):

CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query

Parameters

  • 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 ainda não deve pertencer a uma tabela de streaming.

  • especificação_da_tabela

    Opcionalmente, define as colunas, seus tipos, propriedades e descrições. Se omitido, o esquema será inferido da consulta de fluxo.

  • CONSTRAINT expectation_name ESPERE (expressão_de_expectativa) [ EM CASO DE VIOLAÇÃO { FALHA UPDATE | DESCARTAR LINHA } ]

    Adiciona expectativas de qualidade dos dados à tabela gerenciada. Essas expectativas de qualidade dos dados podem ser acompanhadas ao longo do tempo e acessadas através do registro de eventos do pipeline. Uma FAIL UPDATE expectativa causa a falha do processamento tanto ao criar a tabela quanto ao atualizá-la. Uma expectativa DROP ROW faz com que toda a linha seja removida se a expectativa não for atendida. Confira Gerenciar a qualidade dos dados com as expectativas do pipeline.

    expectation_expr pode ser composta por literais, identificadores de coluna dentro da tabela e funções ou operadores SQL determinísticos e embutidos em SQL 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, habilita o clustering líquido na tabela. Você não pode combinar PARTITIONED BY e CLUSTER BY.

  • caminho LOCATION

    Um local de armazenamento opcional para os dados da tabela.

  • COMENTÁRIO table_comment

    Um STRING literal que descreve a tabela.

  • Cláusula TBLPROPERTIES

    Opcionalmente, define uma ou mais propriedades de tabela definidas pelo usuário.

  • Cláusula WITH ROW FILTER

    Adiciona uma função de filtro de linha à tabela. Consultas futuras para essa tabela recebem um subconjunto das linhas para as quais a função é avaliada TRUEcomo .

  • FLUXO INSERT [UMA VEZ] POR CONSULTA DE NOME

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

Limitações

  • As tabelas gerenciadas não dão suporte a fluxos de alteração CDC. AUTO CDC INTO(SQL) ou apply_changes / apply_changes_from_snapshot (Python) em uma tabela gerenciada falha com MANAGED_TABLE_DOES_NOT_SUPPORT_CDC. Use um CREATE STREAMING TABLE (pipelines) para destinos CDC.
  • Tabelas gerenciadas não dão suporte FLOW ... REPLACE WHEREa . Há suporte apenas para FLOW INSERT BY NAME.
  • As tabelas gerenciadas têm suporte apenas em pipelines com o Catálogo do Unity. Não há suporte para o metastore do Hive.
  • Não é possível reutilizar o nome de uma tabela de streaming existente para uma tabela gerenciada. Solte a tabela de streaming primeiro ou a instrução falha 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');

-- 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 LIVE.source;

Recursos adicionais