Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Importante
Este recurso está em versão Beta.
Use a CREATE TABLE ... FLOW instrução para criar uma tabela gerida num 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 ventilar múltiplas fontes numa tabela gerida, declare vários fluxos que a direcionam com CREATE FLOW (pipelines):
CREATE FLOW flow_name AS INSERT INTO table_name BY NAME query
Parameters
table_name
O nome da tabela gerida a criar. Se o nome não for qualificado, a tabela é criada no esquema alvo do pipeline. O nome não deve já pertencer a uma tabela de streaming.
especificação_da_tabela
Opcionalmente define as colunas, os seus tipos, propriedades e descrições. Se omitido, o esquema é inferido a partir da consulta de fluxo.
CONSTRAINT expectation_name EXIGIR (expectation_expr) [ EM CASO DE VIOLAÇÃO { FAIL UPDATE | DROP ROW } ]
Adiciona expectativas de qualidade dos dados à tabela gerida. Estas expectativas de qualidade dos dados podem ser acompanhadas ao longo do tempo e acedidas através do registo de eventos do pipeline. Uma expectativa de
FAIL UPDATEfaz com que o processamento falhe ao criar a tabela e ao atualizá-la. UmaDROP ROWexpectativa faz com que toda a linha seja removida se a expectativa não for cumprida. Consulte Gerir a qualidade dos dados com as expectativas do fluxo de dados.expectation_exprpode ser composta por literais, identificadores de coluna dentro da tabela e funções ou operadores SQL determinísticos incorporados, exceto:-
Funções agregadas
- Funções de janela analítica
- Funções da janela de classificação
- Funções geradoras de valores de tabela
Também
expectation_exprnão deve conter nenhuma subconsulta.-
Funções agregadas
DIVIDIDO POR (col [, ...])
Opcionalmente, particiona a tabela por um subconjunto de colunas.
CLUSTER BY cláusula
Opcionalmente, ativa o agrupamento de líquidos na mesa. Não se pode combinar
PARTITIONED BYeCLUSTER BY.Caminho de LOCALIZAÇÃO
Um local opcional de armazenamento para os dados da tabela.
COMENTÁRIO table_comment
Uma
STRINGdescrição literal da mesa.Cláusula TBLPROPERTIES
Opcionalmente, define uma ou mais propriedades de tabela definidas pelo utilizador.
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 avalia para
TRUE.CONSULTA DE FLUXO INSERT [ONCE] POR NOME
Define um fluxo de adição que insere o resultado de
queryna tabela, associando as colunas de resultado às colunas da tabela pelo nome.querypode consultar fontes em lote ou em streaming.ONCEExecuta o fluxo uma única vez (por exemplo, para um preenchimento) em vez de em todas as atualizações. Cada fluxo nomeado processa a sua entrada exatamente uma vez por atualização de pipeline, idêntico aFLOW INSERT BY NAMEuma tabela de streaming.PONTO DE CONTROLO DE IMPORTAÇÃO checkpoint_path
Um
STRINGliteral com o caminho para um checkpoint de Streaming Estruturado existente para importar no fluxo, de modo a que um fluxo migrado retome a partir do seu último offset comprometido em vez de reprocessar a fonte. Importar um checkpoint está em Beta. Veja Migrar um ponto de verificação de Streaming Estruturado.
Migre um ponto de verificação de Streaming Estruturado
Importante
Importar um checkpoint está em Beta.
Use IMPORT CHECKPOINT para migrar uma carga de trabalho de Streaming Estruturado existente para um pipeline sem reprocessar a fonte. Defina checkpoint_path para a checkpointLocation sua consulta de Streaming Estruturado utilizada, que pode ser um armazenamento na cloud, um volume do Unity Catalog ou um caminho DBFS. Na primeira atualização do pipeline, o flow clona esse checkpoint no armazenamento gerido do pipeline. O fluxo retoma então a partir do último deslocamento comprometido com o seu estado (como agregações, chaves de deduplicação e marcas de água) intacto. As atualizações subsequentes do pipeline utilizam o checkpoint clonado do fluxo; o checkpoint original não é modificado.
Warning
Pare a consulta original de Structured Streaming antes de executar o pipeline. A consulta original de Structured Streaming pode ser reutilizada após a importação, mas é necessário gerir o estado do checkpoint e garantir que o pipeline e a consulta não escrevem na mesma tabela ao mesmo tempo, o que pode produzir dados duplicados.
Recrie a consulta de Streaming Estruturado como um fluxo de pipeline que continua a escrever na tabela onde a consulta escreveu, e importa o seu checkpoint:
-- 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 checkpoint é importado apenas na primeira atualização do pipeline. Atualizações posteriores ignoram IMPORT CHECKPOINTo . Uma atualização completa não reimporta o checkpoint. Começa a partir de um novo ponto de controlo vazio e reprocessa a fonte.
Limitações
- As tabelas geridas não suportam fluxos de alteração CDC.
AUTO CDC INTO(SQL) ouapply_changes/apply_changes_from_snapshot(Python) contra uma tabela gerida falha com .MANAGED_TABLE_DOES_NOT_SUPPORT_CDCPara alvos CDC, use um CREATE STREAMING TABLE (pipelines) com um fluxo definido por CREATE FLOW (pipelines). - As tabelas geridas não suportam
FLOW ... REPLACE WHERE. Só oFLOW INSERT BY NAMEé suportado. Para recalcular e sobrescrever um subconjunto alvo de uma tabela, crie-se uma tabela de streaming e defina umREPLACE WHEREfluxo com CREATE FLOW (pipelines). Consulte o processamento em lote com fluxos REPLACE WHERE. - As tabelas geridas são suportadas apenas em pipelines com o Unity Catalog. A metastore Hive não é suportada.
- Não pode reutilizar o nome de uma tabela de streaming existente para uma tabela gerida. Elimine primeiro a tabela de streaming, ou a instrução falha 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');