Categorias:

Funções de métricas de dados

REFERENTIAL_INTEGRITY_COUNT (função de métricas de dados do sistema)

Retorna a contagem de linhas na tabela de origem em que o valor da coluna não tem uma correspondência na tabela referenciada. As linhas sem correspondência são conhecidas como linhas órfãs e representam violações de integridade referencial.

Se você especificar mais de um argumento de coluna, retorna a contagem de linhas em que a combinação das colunas de origem especificadas não corresponde a nenhuma linha na tabela referenciada, com base nas colunas de referência correspondentes.

Sintaxe

SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT ON ( <column>, TABLE(<ref_table>(<ref_column>)) )

Para chaves compostas (várias colunas):

SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT ON (
  <column1>, <column2>, ...,
  TABLE(<ref_table>(<ref_column1>, <ref_column2>, ...))
)

Argumentos

column

Especifica uma ou mais colunas na tabela de origem nas quais é feita a verificação da integridade referencial dos valores em relação à tabela referenciada. Quando várias colunas de origem são especificadas, elas formam uma chave composta.

TABLE(ref_table(ref_column))

Especifica a tabela (pai) e a(s) coluna(s) referenciadas para validação, usando a sintaxe TABLE(...):

  • ref_table: o nome totalmente qualificado da tabela referenciada (por exemplo, my_db.my_schema.my_table).

  • ref_column: uma ou mais colunas na tabela referenciada que correspondem às colunas de origem.

O número e a ordem das colunas de origem devem corresponder ao número e à ordem das colunas de referência.

Tipos de dados permitidos

As colunas especificadas nos argumentos column e ref_column podem conter qualquer um dos seguintes tipos de dados:

  • DATE

  • FLOAT

  • NUMBER

  • TIMESTAMP_LTZ

  • TIMESTAMP_NTZ

  • TIMESTAMP_TZ

  • VARCHAR

Retornos

A função retorna um valor NUMBER.

  • Um valor de retorno de 0 significa que cada linha na tabela de origem tem uma correspondência na tabela referenciada. A integridade referencial foi totalmente atendida.

  • Um valor de retorno de N > 0 significa que há N linhas na tabela de origem que não têm uma linha correspondente na tabela referenciada. Essas N linhas são consideradas órfãs.

Notas de uso

  • Você não pode chamar esta função diretamente. Para saber como associar a função a uma tabela ou visualização para que seja executada em intervalos regulares, consulte Associar uma DMF. Você pode usar a função SYSTEM$DATA_METRIC_SCAN para executar a função REFERENTIAL_INTEGRITY_COUNT em uma tabela sem associá-la.

  • Os valores NULL na coluna de origem não são contados como violações. As linhas em que o valor da coluna de origem é NULL são excluídas da verificação de integridade referencial. Esse processo segue a semântica da restrição de chave estrangeira (Foreign Key, FK) padrão, em que uma chave estrangeira NULL é considerada válida. Se você precisa monitorar valores NULL na coluna de origem, use a DMF NULL_COUNT junto com esta função.

  • O número e a ordem das colunas de origem devem corresponder às colunas de referência. Isso é validado quando você associa a função.

  • Como renomear uma coluna especificada na função REFERENTIAL_INTEGRITY_COUNT quebra a associação entre a função e a tabela ou exibição da coluna. Se você renomear a coluna, deverá reassociar a função à tabela ou exibição.

  • Não é possível associar esta função à mesma combinação de coluna e tabela de referência mais de uma vez.

Exemplos

Verificação de integridade referencial de coluna única

Associe a função à tabela salesorders para que ela retorne a contagem de linhas em que sp_id não existe na coluna sp_id da tabela salespeople:

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)));

Verificação de integridade referencial de chave composta

Associe a função à tabela order_items para que ela retorne a contagem de linhas em que a combinação de order_id e product_id não tem uma linha correspondente na tabela order_products:

ALTER TABLE order_items
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (order_id, product_id, TABLE(my_db.sch1.order_products(order_id, product_id)));

Descartar a associação

Remova a verificação de integridade referencial da tabela salesorders:

ALTER TABLE salesorders
  DROP DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)));

Associar a uma expectativa

Associe a função e defina uma expectativa de que a integridade referencial deve ser totalmente atendida (zero linha órfã):

ALTER TABLE salesorders
  ADD DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)))
    EXPECTATION no_orphans (VALUE = 0);

Adicionar uma expectativa a uma associação existente

Se a DMF já está associada, adicione uma expectativa usando MODIFY:

ALTER TABLE salesorders
  MODIFY DATA METRIC FUNCTION SNOWFLAKE.CORE.REFERENTIAL_INTEGRITY_COUNT
    ON (sp_id, TABLE(my_db.sch1.salespeople(sp_id)))
    ADD EXPECTATION no_orphans (VALUE = 0);