Partilhar via


CREATE STREAMING TABLE (gasodutos)

Uma tabela de streaming é uma tabela com suporte para streaming ou processamento incremental de dados. As tabelas de streaming são apoiadas por pipelines. Sempre que uma tabela de streaming é atualizada, os dados adicionados às tabelas de origem são acrescentados à tabela de streaming. Você pode atualizar tabelas de streaming manualmente ou de forma agendada.

Para saber mais sobre como executar ou agendar atualizações, consulte Executar uma atualização de 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 streaming privada.

    • Eles não são adicionados ao catálogo e só são acessíveis na pipeline onde são definidos.
    • Eles podem ter o mesmo nome de um objeto existente no catálogo. Dentro do pipeline, se uma tabela de streaming privada e um objeto no catálogo tiverem o mesmo nome, as referências a esse nome serão resolvidas para a tabela de streaming privada.
    • As tabelas de streaming privadas são mantidas durante toda a duração do pipeline e não apenas durante uma única atualização.

    Tabelas de streaming privadas foram criadas anteriormente com o TEMPORARY parâmetro.

  • table_name

    O nome da tabela recém-criada. O nome totalmente qualificado da tabela deve ser único.

  • especificação_da_tabela

    Esta cláusula opcional define a lista de colunas, seus tipos, propriedades, descrições e restrições de coluna.

  • restrição_de_tabela

    Importante

    Este recurso está no Public Preview.

    Ao especificar um esquema, você 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.

    Observação

    Para definir restrições de tabela, seu pipeline deve ser um pipeline habilitado para Unity Catalog.

  • cláusulas_da_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 de dados. A única opção é DELTA.

      Esta cláusula é opcional e por predefinição é DELTA.

    • DIVIDIDO POR

      Uma lista opcional de uma ou mais colunas a serem usadas para particionamento na tabela. Mutuamente exclusivo com CLUSTER BY.

      O agrupamento líquido oferece uma solução flexível e otimizada para agrupamento. Considere usar CLUSTER BY em vez de PARTITIONED BY para pipelines.

    • CLUSTER BY

      Ative o agrupamento líquido na tabela e defina as colunas que serão utilizadas como chaves de agrupamento. Utilize o clustering automático de líquidos com CLUSTER BY AUTO, e o Databricks escolhe inteligentemente as chaves de clustering para otimizar o desempenho das consultas. Mutuamente exclusivo com PARTITIONED BY.

      Veja Utilizar clustering líquido para tabelas.

    • LOCALIZAÇÃO

      Um local de armazenamento opcional para dados de tabela. Se não estiver definido, o sistema assumirá como padrão o local de armazenamento do pipeline.

    • COMENTAR

      É opcional um literal STRING para descrever a tabela.

    • TBLPROPERTIES

      Uma lista opcional de propriedades da tabela.

    • COM ROW FILTER

    Importante

    Este recurso está no Public Preview.

    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 como TRUE. Isso é útil para controle de acesso refinado, porque permite que a função inspecione a identidade e as associações de grupo do usuário que invoca para decidir se deseja filtrar determinadas linhas.

    Consulte a cláusula ROW FILTER.

  • consulta

    Esta cláusula preenche a tabela usando os dados de query. Essa consulta deve ser uma consulta de streaming . Utilize a palavra-chave STREAM para aplicar a semântica de transmissão e 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 a partir de fontes estáticas ou apenas de anexação. Para ingerir dados que têm confirmações de alteração, podes usar Python e a opção SkipChangeCommits para manipular erros.

    Quando você especifica um query e um table_specification juntos, o esquema de tabela especificado em table_specification deve conter todas as colunas retornadas pelo query, caso contrário, você receberá um erro. Quaisquer colunas especificadas em table_specification mas não retornadas por query apresentarão valores null quando consultadas.

    Para obter mais informações sobre a transmissão de dados, consulte Transformar dados com pipelines.

Permissões necessárias

O usuário run-as para um pipeline deve ter as seguintes permissões:

  • SELECT privilégio sobre as tabelas base referenciadas pela tabela de transmissão.
  • o privilégio USE CATALOG no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • CREATE MATERIALIZED VIEW privilégio na estrutura da tabela de streaming.

Para que um usuário possa atualizar o pipeline no qual a tabela de streaming está definida, eles precisam:

  • o privilégio USE CATALOG no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • Propriedade da tabela de streaming ou REFRESH privilégio sobre a tabela de streaming.
  • O proprietário da tabela de streaming deve ter o SELECT privilégio sobre as tabelas base referenciadas pela tabela de streaming.

Para que um usuário possa consultar a tabela de streaming resultante, eles precisam:

  • o privilégio USE CATALOG no catálogo pai e o privilégio USE SCHEMA no esquema pai.
  • SELECT privilégio sobre a tabela de streaming.

Limitações

  • Apenas os proprietários das tabelas podem atualizar as tabelas em tempo real para obter os dados mais recentes.
  • Comandos ALTER TABLE não são permitidos em tabelas de streaming. A definição e as propriedades da tabela devem ser alteradas através da instrução CREATE OR REFRESH ou ALTER STREAMING TABLE.
  • Não há suporte para a evolução do esquema de tabela por meio de comandos DML como INSERT INTOe MERGE.
  • Os seguintes comandos não são suportados em tabelas de streaming:
    • 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 padrão.

Examples

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