CREATE STREAMING TABLE ( Declarative pipeline)LakeFlow
Uma tabela de transmissão é uma tabela com suporte para transmissão ou processamento incremental de dados. As tabelas de transmissão são apoiadas pelo pipeline declarativo LakeFlow. Cada vez que uma tabela de transmissão é atualizada, os dados adicionados às tabelas de origem são anexados à tabela de transmissão. O senhor pode refresh tabelas de transmissão manualmente ou em um programador.
Para saber mais sobre como executar ou programar a atualização, consulte executar uma atualização em LakeFlow Declarative pipeline.
Sintaxe
CREATE [OR REFRESH] [PRIVATE] STREAMING TABLE
table_name
[ table_specification ]
[ table_clauses ]
[ AS query ]
table_specification
( { column_identifier column_type [column_properties] } [, ...]
[ column_constraint ] [, ...]
[ , table_constraint ] [...] )
column_properties
{ NOT NULL | COMMENT column_comment | column_constraint | MASK clause } [ ... ]
table_clauses
{ USING DELTA
PARTITIONED BY (col [, ...]) |
CLUSTER BY clause |
LOCATION path |
COMMENT view_comment |
TBLPROPERTIES clause |
WITH { ROW FILTER clause } } [ ... ]
Parâmetros
-
REFRESH
Se especificado, criará a tabela ou atualizará uma tabela existente e seu conteúdo.
-
PRIVADO
Cria uma tabela de transmissão privada.
- Eles não são adicionados ao catálogo e só podem ser acessados dentro do pipeline de definição
- Eles podem ter o mesmo nome de um objeto existente no catálogo. No site pipeline, se uma tabela de transmissão privada e um objeto no catálogo tiverem o mesmo nome, as referências ao nome serão resolvidas para a tabela de transmissão privada.
- As tabelas de transmissão privadas são mantidas apenas durante a vida útil do site pipeline, não apenas em uma única atualização.
As tabelas de transmissão privadas foram criadas anteriormente com o parâmetro
TEMPORARY
. -
nome_da_tabela
O nome da tabela recém-criada. O nome da tabela totalmente qualificada deve ser exclusivo.
-
especificação_tabela
Essa cláusula opcional define a lista de colunas, seus tipos, propriedades, descrições e restrições de coluna.
-
Os nomes das colunas devem ser exclusivos e mapeados para as colunas de saída da consulta.
-
Especifica o tipo de dados da coluna. Nem todos os tipos de dados suportados pelo site Databricks são suportados pelas tabelas de transmissão.
-
comentário_coluna
Um literal
STRING
opcional descrevendo a coluna. Essa opção deve ser especificada junto comcolumn_type
. Se o tipo de coluna não for especificado, o comentário da coluna será ignorado. -
Adiciona uma restrição que valida os dados à medida que eles fluem para a tabela. Veja como gerenciar a qualidade dos dados com pipeline expectativas.
-
Visualização
Esse recurso está em Public Preview.
Adiciona uma função de máscara de coluna para anonimizar dados confidenciais.
Consulte Filtro sensível à tabela uso de dados filtros de linha e máscaras de coluna.
- restrição_de_tabela
Visualização
Esse recurso está em Public Preview.
Ao especificar um esquema, o senhor pode definir chaves primárias e estrangeiras. As restrições são informativas e não são aplicadas. Consulte a cláusula CONSTRAINT na referência da linguagem SQL.
Para definir restrições de tabela, seu pipeline deve ser um pipeline habilitado para o Unity Catalog.
-
cláusulas de tabela
Opcionalmente, especifique particionamento, comentários e propriedades definidas pelo usuário para a tabela. Cada subcláusula só pode ser especificada uma vez.
-
USANDO DELTA
Especifica o formato dos dados. A única opção é DELTA.
Essa cláusula é opcional e o padrão é DELTA.
-
PARTICIONADO POR
Uma lista opcional de uma ou mais colunas a serem usadas para particionar na tabela. Mutuamente exclusivo com
CLUSTER BY
.O Liquid clustering oferece soluções flexíveis e otimizadas para clustering. Considere usar
CLUSTER BY
em vez dePARTITIONED BY
para o pipeline declarativo LakeFlow. -
agrupamento POR
Habilite o clustering líquido na tabela e defina as colunas a serem usadas como chave clustering. Mutuamente exclusivo com
PARTITIONED BY
.Consulte Usar clustering líquido para tabelas.
-
Localização
Um local de armazenamento opcional para dados da tabela. Se não estiver definido, o sistema adotará como padrão o local de armazenamento do pipeline.
-
comentário
Um literal
STRING
opcional para descrever a tabela. -
PROPRIEDADES DA TABELA
Uma lista opcional de propriedades da tabela.
-
COM FILTRO DE LINHA
-
Visualização
Esse recurso está em Public Preview.
Adiciona uma função de filtro de linha à tabela. As consultas futuras dessa tabela recebem um subconjunto das linhas para as quais a função é avaliada como TRUE. Isso é útil para um controle de acesso refinado, pois permite que a função inspecione a identidade e as associações de grupo do usuário que está invocando para decidir se deseja filtrar determinadas linhas.
Veja a cláusulaROW FILTER
.
-
Essa cláusula preenche a tabela usando os dados de
query
. Essa consulta deve ser uma consulta de transmissão . Use a palavra-chave transmissão para usar a semântica de transmissão para ler a partir da fonte. Se a leitura encontrar uma alteração ou exclusão em um registro existente, um erro será gerado. É mais seguro ler de fontes estáticas ou somente anexadas. Para ingerir dados com commit de alteração, o senhor pode usar Python e a opçãoSkipChangeCommits
para lidar com erros.Quando você especifica
query
etable_specification
juntos, o esquema de tabela especificado emtable_specification
deve conter todas as colunas retornadas peloquery
, caso contrário, você receberá um erro. Todas as colunas especificadas emtable_specification
, mas não retornadas porquery
, retornam valoresnull
quando consultadas.Para obter mais informações sobre transmissão de dados, consulte transformação de dados com pipeline.
Permissões necessárias
O usuário executor de um pipeline deve ter as seguintes permissões:
SELECT
privilégio sobre as tabelas de base referenciadas pela tabela de transmissão.USE CATALOG
privilégio no catálogo principal e o privilégioUSE SCHEMA
no esquema principal.CREATE MATERIALIZED VIEW
no esquema da tabela de transmissão.
Para que um usuário possa atualizar o site pipeline em que a tabela de transmissão está definida, ele precisa
USE CATALOG
privilégio no catálogo principal e o privilégioUSE SCHEMA
no esquema principal.- Propriedade da tabela de transmissão ou
REFRESH
privilégio na tabela de transmissão. - O proprietário da tabela de transmissão deve ter o privilégio
SELECT
sobre as tabelas de base referenciadas pela tabela de transmissão.
Para que um usuário possa consultar a tabela de transmissão resultante, é necessário:
USE CATALOG
privilégio no catálogo principal e o privilégioUSE SCHEMA
no esquema principal.SELECT
privilégio sobre a tabela de transmissão.
Limitações
-
Somente os proprietários de tabelas podem refresh transmitir tabelas para obter os dados mais recentes.
-
ALTER TABLE
comando não são permitidos nas tabelas de transmissão. A definição e as propriedades da tabela devem ser alteradas por meio da instruçãoCREATE OR REFRESH
ou ALTER STREAMING TABLE. -
Não há suporte para a evolução do esquema da tabela por meio de comandos DML, como
INSERT INTO
eMERGE
. -
Os comandos a seguir não são compatíveis com as tabelas de transmissão:
CREATE TABLE ... CLONE <streaming_table>
COPY INTO
ANALYZE TABLE
RESTORE
TRUNCATE
GENERATE MANIFEST
[CREATE OR] REPLACE TABLE
-
Não há suporte para renomear a tabela ou alterar o proprietário.
-
Não há suporte para colunas geradas, colunas de identidade e colunas default.
Exemplos
-- Define a streaming table from a volume of files:
CREATE OR REFRESH STREAMING TABLE customers_bronze
AS SELECT * FROM STREAM read_files("/databricks-datasets/retail-org/customers/*", format => "csv")
-- Define a streaming table from a streaming source table:
CREATE OR REFRESH STREAMING TABLE customers_silver
AS SELECT * FROM STREAM(customers_bronze)
-- Define a table with a row filter and column mask:
CREATE OR REFRESH STREAMING TABLE customers_silver (
id int COMMENT 'This is the customer ID',
name string,
region string,
ssn string MASK catalog.schema.ssn_mask_fn COMMENT 'SSN masked for privacy'
)
WITH ROW FILTER catalog.schema.us_filter_fn ON (region)
AS SELECT * FROM STREAM(customers_bronze)
-- Define a streaming table that you can add flows into:
CREATE OR REFRESH STREAMING TABLE orders;