Políticas de agregação

Uma política de agregação é um objeto em nível de esquema que controla que tipo de consulta pode acessar dados de uma tabela ou exibição. Quando uma política de agregação é aplicada a uma tabela, as consultas nessa tabela devem agregar dados em grupos de tamanho mínimo para retornar resultados, evitando assim que uma consulta retorne informações de um registro individual. Uma tabela ou exibição com uma política de agregação atribuída a ela é considerada restrita por agregação.

Visão geral

Um recurso central do Snowflake é a capacidade de compartilhar conjuntos de dados com outras entidades. As políticas de agregação permitem que um provedor (proprietário dos dados) exerça controle sobre o que pode ser feito com os seus dados, mesmo depois de estes serem compartilhados com um consumidor. Especificamente, o provedor pode exigir que um consumidor de uma tabela agregue os dados em vez de recuperar registros individuais.

Ao criar uma política de agregação, o administrador da política do provedor especifica um tamanho mínimo de grupo (ou seja, o número de linhas que devem ser agregadas em um grupo). Quanto maior o tamanho mínimo do grupo, menor a probabilidade de um consumidor usar os resultados da consulta para deduzir o conteúdo de um único registro.

Depois que a política de agregação for aplicada a uma tabela ou exibição, uma consulta a ela deverá estar em conformidade com dois requisitos:

  • A consulta deve agregar os dados. Se a consulta usar uma função de agregação, ela deverá ser uma das funções de agregação permitidas.

  • Cada grupo criado pela consulta deve incluir a agregação de pelo menos X registros, onde X é o tamanho mínimo do grupo da política de agregação.

Se a consulta retornar um grupo que contém menos registros do que o tamanho mínimo de grupo da política, o Snowflake combinará esses grupos em um grupo restante. Snowflake aplica a função de agregação à coluna apropriada para retornar um valor para o grupo restante. No entanto, como esse valor é calculado a partir de linhas que pertencem a mais de um grupo, o valor da coluna-chave GROUP BY é NULL. Por exemplo, se a consulta incluir a cláusula GROUP BY state, o valor de state no grupo restante será NULL.

Uma consulta que não retorna resultados suficientes para preencher um grupo restante ainda funciona, mas retorna um valor NULL em cada campo dos resultados.

Limitações

Para esta versão preliminar:

  • Se a consulta usar uma construção de agrupamento explícita, ela deverá ser uma cláusula GROUP BY. A consulta não pode usar construções relacionadas como GROUP BY ROLLUP, GROUP BY CUBE ou GROUP BY GROUPING SETS.

  • A maioria dos operadores de conjuntos não são permitidos quando uma das consultas atua em uma tabela com agregação restrita. Como exceção, UNION ALL é suportado, mas cada grupo de resultados deve satisfazer o tamanho mínimo do grupo das tabelas com restrição de agregação que estão sendo consultadas (consulte Requisitos de consulta para obter detalhes).

  • Se uma coluna de uma tabela com restrição de agregação estiver protegida por uma política de projeção, uma consulta nessa tabela não poderá usar a coluna como argumento da função COUNT.

  • CTEs recursivos não são permitidos em consultas em uma tabela ou exibição com agregação restrita.

  • As funções de janela não são permitidas em consultas em uma tabela ou exibição com agregação restrita.

  • Uma consulta em uma tabela com restrição de agregação não pode usar uma subconsulta correlacionada ou uma junção lateral quando há referências de ou para a parte da consulta que atende aos requisitos da política de agregação. Os exemplos a seguir ilustram os tipos de consultas que são proibidas.

    Exemplo 1

    Supondo que protected_table seja restrito por agregação, a consulta a seguir não será permitida porque a parte da consulta que agrega dados faz referência a outra parte da consulta fora da subconsulta:

    SELECT c1, c2
    FROM open_table
    WHERE c1 = (SELECT x FROM protected_table WHERE y = open_table.c2);
    
    Copy
    Exemplo 2

    Supondo que protected_table seja restrito por agregação, a consulta a seguir não será permitida porque a subconsulta faz referência à parte da consulta que agrega dados, que está fora da subconsulta:

    SELECT
      SUM(SELECT COUNT(*) FROM open_table ot WHERE pt.id = ot.id)
    FROM protected_table pt;
    
    Copy

Considerações

Considere o seguinte ao usar políticas de agregação para proteger dados confidenciais:

  • As políticas de agregação protegem os dados de um registro individual, não de uma entidade. Se um conjunto de dados contiver vários registros pertencentes à mesma entidade, uma política de agregação protegerá apenas a privacidade de um registro específico pertencente a essa entidade, e não a entidade inteira.

  • Embora as políticas de agregação limitem o acesso a registos individuais, elas não garantem que um agente mal-intencionado não possa utilizar consultas deliberadas para obter dados potencialmente sensíveis de uma tabela com agregação restrita. Com tentativas de consulta suficientes, um agente mal-intencionado poderia contornar os requisitos de agregação para determinar um valor de uma linha individual. As políticas de agregação são mais adequadas para uso com parceiros e clientes com os quais você já tem um nível de confiança. Além disso, os provedores devem estar atentos a possíveis utilizações indevidas dos seus dados (por exemplo, revendo o histórico de acesso às suas listagens).

Criação de uma política de agregação

A sintaxe para criar uma política de agregação é:

CREATE [ OR REPLACE ] AGGREGATION POLICY <name>
  AS () RETURNS AGGREGATION_CONSTRAINT -> <body>
  [ COMMENT = '<string_literal>' ];
Copy

Onde:

  • name especifica o nome da política.

  • AS () RETURNS AGGREGATION_CONSTRAINT é a assinatura e o tipo de retorno da política. A assinatura não aceita argumentos e o tipo de retorno é AGGREGATION_CONSTRAINT, que é um tipo de dados interno. Todas as políticas de agregação têm a mesma assinatura e tipo de retorno.

  • body é uma expressão SQL que determina as restrições de uma política de agregação.

Chamada de funções internas do corpo

O corpo de uma política de agregação utiliza duas funções internas para definir as restrições da política: NO_AGGREGATION_CONSTRAINT e AGGREGATION_CONSTRAINT. Quando as condições do corpo chamam uma dessas funções, o valor retornado da função determina como as consultas na tabela ou exibição restrita por agregação devem ser formuladas para retornar resultados.

NO_AGGREGATION_CONSTRAINT

Quando o corpo da política retorna um valor dessa função, as consultas podem retornar dados de uma tabela ou exibição com restrição de agregação sem restrições. Por exemplo, o corpo da política poderia chamar esta função quando um administrador precisasse obter resultados não agregados da tabela ou exibição com restrição de agregação.

Chame NO_AGGREGATION_CONSTRAINT sem argumento.

AGGREGATION_CONSTRAINT

Quando o corpo da política retorna um valor desta função, as consultas devem agregar dados para retornar resultados. Use o argumento MIN_GROUP_SIZE para especificar quantos registros devem ser incluídos em cada grupo de agregação.

A sintaxe da função AGGREGATION_CONSTRAINT é:

AGGREGATION_CONSTRAINT ( MIN_GROUP_SIZE => <integer_expression> )
Copy

Onde integer_expression resolve o tamanho mínimo do grupo da política.

Há uma diferença entre passar 1 e 0 como argumento para a função. Ambos exigem que os resultados sejam agregados.

  • Passar um 1 também exige que cada grupo de agregação contenha pelo menos um registro da tabela restrita por agregação. Portanto, para junções externas, pelo menos um registro da tabela com restrição de agregação deve corresponder a um registro de uma tabela desprotegida.

  • Passar um 0 permite que a consulta retorne grupos que consistem inteiramente em registros de outra tabela. Portanto, para junções externas entre uma tabela com restrição de agregação e uma tabela desprotegida, um grupo pode consistir em registros da tabela desprotegida que não correspondam a nenhum registro na tabela com restrição de agregação.

Nota

O corpo de uma política de agregação não pode fazer referência a uma função, tabela ou exibição definida pelo usuário.

Exemplos de política

Tamanho mínimo fixo do grupo

A política de agregação mais simples chama a função AGGREGATION_CONSTRAINT diretamente e define um tamanho mínimo de grupo constante que é aplicado a todas as consultas na tabela. Por exemplo, o comando a seguir cria uma política de agregação com um tamanho mínimo de grupo de 5:

CREATE AGGREGATION POLICY my_agg_policy
  AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
Copy
Política condicional

Os administradores de políticas podem definir a expressão SQL de uma política de agregação para que consultas diferentes tenham restrições diferentes com base em fatores como a função do usuário que executa a consulta. Essa estratégia pode permitir que um usuário consulte uma tabela sem restrições enquanto exige que outros agreguem resultados.

Por exemplo, a política de agregação a seguir oferece aos usuários com a função ADMIN acesso irrestrito a uma tabela, ao mesmo tempo que exige que todas as outras consultas agreguem dados em grupos de pelo menos 5 linhas.

CREATE AGGREGATION POLICY my_agg_policy
  AS () RETURNS AGGREGATION_CONSTRAINT ->
    CASE
      WHEN CURRENT_ROLE() = 'ADMIN'
        THEN NO_AGGREGATION_CONSTRAINT()
      ELSE AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5)
    END;
Copy

Modificação de uma política de agregação

Você pode usar o comando ALTER AGGREGATION POLICY para modificar a expressão SQL que determina o tamanho mínimo do grupo da política de agregação. Você também pode renomear a política ou alterar seu comentário.

Antes de modificar uma política de agregação, você pode executar o comando DESCRIBE AGGREGATION POLICY ou a função GET_DDL para revisar a expressão SQL atual da política. A expressão SQL que determina o tamanho mínimo do grupo aparece na coluna BODY.

Como exemplo, você pode executar o seguinte comando para alterar a expressão SQL da política de agregação my_policy para exigir um tamanho mínimo de grupo de 2 linhas em todas as circunstâncias:

ALTER AGGREGATION POLICY my_policy SET BODY -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE=>2);
Copy

Atribuição de uma política de agregação

Depois de criada, uma política de agregação pode ser aplicada a uma ou mais tabelas ou exibições para torná-la restrita à agregação. Uma tabela ou exibição só pode ter uma política de agregação anexada.

Use a cláusula SET AGGREGATION POLICY de um comando ALTER TABLE ou ALTER VIEW para atribuir uma política de agregação a uma tabela ou exibição existente:

ALTER { TABLE | VIEW } <name> SET AGGREGATION POLICY <policy_name> [ FORCE ]
Copy

Onde:

  • name especifica o nome da tabela ou exibição.

  • policy_name especifica o nome da política de agregação.

  • FORCE é um parâmetro opcional que permite ao comando atribuir a política de agregação a uma tabela ou exibição que já possui uma política de agregação atribuída a ela. A nova política de agregação substitui atomicamente a existente.

Por exemplo, para atribuir a política my_agg_policy à tabela t1, execute:

ALTER TABLE t1 SET AGGREGATION POLICY my_agg_policy;
Copy

Você também pode usar a cláusula WITH dos comandos CREATE TABLE e CREATE VIEW para atribuir uma política de agregação a uma tabela ou exibição no momento da criação. Por exemplo, para atribuir a política my_agg_policy a uma nova tabela, execute:

CREATE TABLE t1 WITH AGGREGATION POLICY my_agg_policy;
Copy

Substituição de uma política de agregação

O método recomendado para substituir uma política de agregação é usar o parâmetro FORCE para desanexar a política de agregação existente e atribuir a nova em um único comando. Isso permite substituir atomicamente a política antiga, sem deixar lacunas na proteção.

Por exemplo, para atribuir uma nova política de agregação a uma tabela que já está com agregação restrita:

ALTER TABLE privacy SET AGGREGATION POLICY agg_policy_2 FORCE;
Copy

Você também pode desanexar a política de agregação de uma tabela ou exibição em uma instrução (… UNSET AGGREGATION POLICY) e, em seguida, definir uma nova política na tabela ou exibição em uma instrução diferente (… SET AGGREGATION POLICY <nome>). Se você escolher esse método, a tabela não será protegida por uma política de agregação entre a desanexação de uma política e a atribuição de outra. Uma consulta poderia potencialmente acessar dados confidenciais durante esse período.

Desanexação de uma política de agregação

Use a cláusula UNSET AGGREGATION POLICY de um comando ALTER TABLE ou ALTER VIEW para separar uma política de agregação de uma tabela ou exibição para eliminar a necessidade de agregar dados. O nome da política de agregação não é obrigatório porque uma tabela ou exibição não pode ter mais de uma política de agregação anexada.

ALTER {TABLE | VIEW} <name> UNSET AGGREGATION POLICY
Copy

Onde:

  • name especifica o nome da tabela ou exibição.

Por exemplo, para desanexar uma política de agregação da exibição v1, execute:

ALTER VIEW v1 UNSET AGGREGATION POLICY;
Copy

Monitoramento das políticas de agregação

Pode ser útil pensar em duas abordagens gerais para determinar como monitorar o uso de política de agregação.

Como descobrir políticas de agregação

Você pode usar a exibição AGGREGATION_POLICIES no esquema Account Usage do banco de dados SNOWFLAKE compartilhado. Esta exibição é um catálogo de todas as políticas de agregação em sua conta Snowflake. Por exemplo:

SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.AGGREGATION_POLICIES
ORDER BY POLICY_NAME;
Copy

Identificação de referências de política de agregação

A função de tabela POLICY_REFERENCES do Information Schema pode identificar referências de política de agregação. Existem duas opções de sintaxe diferentes:

  1. Retornar uma linha para cada objeto (ou seja, tabela ou exibição) que tenha a política de agregação especificada definida:

    USE DATABASE my_db;
    USE SCHEMA information_schema;
    SELECT policy_name,
           policy_kind,
           ref_entity_name,
           ref_entity_domain,
           ref_column_name,
           ref_arg_column_names,
           policy_status
    FROM TABLE(information_schema.policy_references(policy_name => 'my_db.my_schema.aggpolicy'));
    
    Copy
  2. Devolver uma linha para cada política atribuída à tabela chamada my_table:

    USE DATABASE my_db;
    USE SCHEMA information_schema;
    SELECT policy_name,
           policy_kind,
           ref_entity_name,
           ref_entity_domain,
           ref_column_name,
           ref_arg_column_names,
           policy_status
    FROM TABLE(information_schema.policy_references(ref_entity_name => 'my_db.my_schema.my_table', ref_entity_domain => 'table'));
    
    Copy

Requisitos de consulta

Depois que uma política de agregação for aplicada a uma tabela ou exibição, as consultas nessa tabela ou exibição deverão estar em conformidade com determinados requisitos. Esta seção discute o que é e o que não é permitido em uma consulta em uma tabela ou exibição restrita por agregação.

Nota

Depois que parte da consulta agrega dados adequadamente para satisfazer os requisitos da política de agregação, essas restrições de consulta não se aplicam e outra parte da consulta pode incluir itens que de outra forma seriam proibidos.

Por exemplo, a consulta a seguir pode usar uma instrução SELECT que não agrega resultados porque outra parte da consulta já satisfez os requisitos de agregação da política atribuída a protected_table:

SELECT * FROM open_table ot WHERE ot.a > (SELECT SUM(id) FROM protected_table pt)
Copy

Para restrições adicionais sobre o que pode ser incluído em uma consulta, consulte Limitações.

Funções de agregação

As seguintes funções de agregação são permitidas em uma consulta em uma tabela com restrição de agregação:

Uma consulta pode conter mais de uma dessas funções de agregação permitidas. Uma consulta falhará se tentar usar uma função de agregação que não é permitida.

Instrução de agrupamento

Uma consulta em uma tabela com agregação restrita deve agregar dados em grupos de tamanho mínimo. Pode usar uma instrução de agrupamento explícita (ou seja, uma cláusula GROUP BY) ou uma função de agregação escalar que agrega todo o conjunto de dados (por exemplo, COUNT(*)).

Filtros

Em geral, o Snowflake não restringe como uma consulta usa as cláusulas WHERE e ON para filtrar a tabela com restrição de agregação, desde que agregue as linhas selecionadas pelo filtro.

Junções

Uma consulta pode unir uma tabela com agregação restrita a outra tabela, incluindo outra tabela com agregação restrita.

O Snowflake verifica cada grupo de agregação para garantir que o número de linhas obtidas de uma tabela com restrição de agregação atenda ou exceda o tamanho mínimo do grupo dessa tabela. Por exemplo, se uma tabela restrita por agregação table_a com um tamanho de grupo mínimo de 5 for associada a table_b com um tamanho de grupo mínimo de 3, cada grupo retornado pela consulta deverá ser criado usando pelo menos 5 linhas da table_a e 3 linhas da table_b.

O fato de uma consulta com junção atender aos requisitos de uma tabela com restrição de agregação é determinado pelo número de linhas retiradas da tabela, e não pelo tamanho de um grupo. Como resultado, o tamanho de um grupo criado a partir dos dados unidos pode ser maior que o tamanho mínimo do grupo da tabela restrita por agregação, mas ainda assim resultar em dados filtrados. Por exemplo, suponha o seguinte:

  • agg_t é a agregação restrita com um tamanho mínimo de grupo de 2. Esta tabela contém uma única coluna inteira c que possui o seguinte conteúdo: { 1, 2, 2 }.

  • open_t é irrestrito e contém uma coluna inteira c com o seguinte conteúdo: { 1, 1, 1, 2 }.

Um usuário executa a seguinte consulta que une as duas tabelas:

SELECT c, COUNT(*)
FROM agg_t, open_t
WHERE agg_t.c = open_t.c
GROUP BY agg_t.c;
Copy

A consulta retornará:

+-----------------+
|  c   | COUNT(*) |
|------+----------|
|  2   |  2       |
|------+----------|
| null |  3       |
+-----------------+

Embora o segundo grupo tenha 3 registros, que é maior que o tamanho mínimo do grupo, todos esses registros correspondem a um único registro na tabela com restrição de agregação, portanto o valor é filtrado.

UNION ALL

Uma consulta pode usar UNION ALL para combinar resultados de duas subconsultas, mesmo que uma ou mais tabelas consultadas sejam restritas por agregação. Semelhante às junções, cada grupo nos resultados deve satisfazer o tamanho mínimo do grupo de cada tabela com restrição de agregação consultada. Por exemplo, suponha o seguinte:

  • A tabela protected_table1 tem um tamanho mínimo de grupo de 2.

  • A tabela protected_table2 tem um tamanho mínimo de grupo de 5.

Se você executar a consulta:

SELECT a, COUNT(*)
FROM (
    SELECT a, b FROM protected_table1
    UNION ALL
    SELECT a, b FROM protected_table2
)
GROUP BY a;
Copy

Cada grupo formado pela chave a deve conter 2 registros de protected_table1 e 5 registros de protected_table2, caso contrário os registros serão colocados em um grupo restante.

Funções externas

Uma consulta não pode chamar uma função externa a menos que outra parte da consulta tenha agregado resultados adequadamente para atender aos requisitos da tabela com agregação restrita.

Registro em log e métricas

Uma consulta não pode registrar uma coluna de uma tabela com restrição de agregação por meio de geração de registros ou métricas da UDF.

Conversões do tipo de dados

Uma consulta que inclui uma função de conversão de tipo de dados na instrução SELECT deve usar a versão TRY da função. Por exemplo, a função TRY_CAST é permitida, mas a função CAST é proibida. As seguintes funções de conversão de tipo de dados são permitidas para tipos numéricos:

PIVOT

Uma consulta não pode usar o operador PIVOT em uma coluna em uma tabela com agregação restrita.

Exemplo estendido

A criação de uma política de agregação e a atribuição da política de agregação a uma tabela segue o mesmo procedimento geral que a criação e atribuição de outras políticas, como políticas de mascaramento e projeção:

  1. Se você estiver usando uma abordagem de gerenciamento centralizado, crie uma função personalizada (por exemplo, agg_policy_admin) para gerenciar a política. Como alternativa, você pode usar uma função existente.

  2. Conceda a esta função os privilégios para criar e atribuir uma política de agregação.

  3. Crie a política de agregação.

  4. Atribua a política de agregação a uma tabela.

Depois que a política de agregação for atribuída a uma tabela, as consultas bem-sucedidas na tabela deverão agregar seus dados.

O exemplo estendido a seguir fornece informações sobre cada etapa desse processo, desde o administrador de controle de acesso do provedor criando uma função personalizada até um consumidor de dados executando uma consulta para retornar resultados agregados.

Tarefas do administrador de controle de acesso
  1. Crie uma função personalizada para gerenciar a política de agregação. Você também pode reutilizar uma função existente.

    USE ROLE USERADMIN;
    
    CREATE ROLE AGG_POLICY_ADMIN;
    
    Copy
  2. Conceda à função personalizada agg_policy_admin os privilégios para criar uma política de agregação em um esquema e atribuir a política de agregação a uma tabela ou exibição na conta Snowflake.

    Esta etapa pressupõe que a política de agregação será armazenada em um banco de dados e esquema denominado privacy.agg_policies e que esse banco de dados e esquema já existem:

    GRANT USAGE ON DATABASE privacy TO ROLE agg_policy_admin;
    GRANT USAGE ON SCHEMA privacy.agg_policies TO ROLE agg_policy_admin;
    
    GRANT CREATE AGGREGATION POLICY
      ON SCHEMA privacy.agg_policies TO ROLE agg_policy_admin;
    
    GRANT APPLY AGGREGATION POLICY ON ACCOUNT TO ROLE agg_policy_admin;
    
    Copy

    A função agg_policy_admin agora pode ser atribuída a um ou mais usuários.

    Para obter detalhes sobre os privilégios necessários para trabalhar com políticas de agregação, consulte Privilégios e comandos (neste tópico).

Tarefas do administrador de política de agregação
  1. Crie uma política de agregação para exigir agregação e defina um tamanho mínimo de grupo de 3:

    USE ROLE agg_policy_admin;
    USE SCHEMA privacy.aggpolicies;
    
    CREATE AGGREGATION POLICY my_policy
      AS () RETURNS AGGREGATION_CONSTRAINT -> AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 3);
    
    Copy
  2. Atribua a política de agregação a uma tabela t1:

    ALTER TABLE t1 SET AGGREGATION POLICY my_policy;
    
    Copy
Consulta do consumidor

Depois que o provedor compartilha a tabela com agregação restrita, o consumidor de dados pode executar consultas nela. Para este exemplo, suponha que a tabela restrita por agregação t1 contenha as seguintes linhas:

peak

state

elevation

washington

NH

6288

cannon

NH

4080

kearsarge

NH

2937

mansfield

VT

4395

killington

VT

4229

wachusett

MA

2006

Agora, suponha que o consumidor execute a seguinte consulta em t1:

SELECT state, AVG(elevation) AS avg_elevation
FROM t1
GROUP BY state;
Copy

Os resultados são:

+----------+-----------------+
|  STATE   |  AVG_ELEVATION  |
|----------+-----------------+
|  NH      |  4435           |
|  NULL    |  3543           |
+----------+-----------------+

Observe que o valor de state no segundo grupo é NULL porque é um grupo restante que calcula a média da elevação dos picos em VT e MA.

Políticas de agregação com recursos do Snowflake

As subseções a seguir resumem brevemente como as políticas de agregação interagem com vários recursos e serviços do Snowflake.

Outras políticas

Esta seção descreve como uma política de agregação interage com outras políticas, incluindo políticas de mascaramento, políticas de acesso a linhas e políticas de projeção.

Você pode anexar outras políticas a uma tabela com agregação restrita. Uma consulta bem-sucedida na tabela deve atender aos requisitos de todas as políticas.

Se uma política de acesso a linhas for atribuída a uma tabela com restrição de agregação, uma linha excluída dos resultados da consulta com base na política de acesso a linhas não será incluída no cálculo dos resultados agregados.

O corpo de uma política de mascaramento, política de acesso a linhas ou política de projeção não pode fazer referência a uma tabela com restrição de agregação, incluindo suas colunas. Da mesma forma, o corpo da outra política não pode incluir uma UDF que faça referência à tabela restrita por agregação.

Exibições e exibições materializadas

Você pode atribuir uma política de agregação às exibições e exibições materializadas. Quando uma política de agregação é aplicada a uma exibição, a tabela subjacente não fica restrita à agregação. Esta tabela base ainda pode ser consultada sem restrições.

Para evitar a possibilidade de exposição de dados confidenciais, todas as exibições com restrição de agregação são tratadas como se fossem exibições seguras, mesmo que não o sejam.

A possibilidade de criar uma exibição a partir de uma tabela com agregação restrita depende do tipo de exibição:

  • Você pode criar uma exibição regular a partir de uma ou mais tabelas com restrição de agregação; no entanto, as consultas nessa exibição devem agregar dados de uma forma que atenda às restrições dessas tabelas base.

  • Você não pode criar uma exibição materializada com base em uma tabela ou exibição restrita por agregação, nem pode atribuir uma política de agregação a uma tabela ou exibição na qual uma exibição materializada se baseia.

Objetos clonados

A abordagem a seguir ajuda a proteger dados de usuários com o privilégio SELECT em uma tabela ou exibição clonada armazenada no banco de dados ou esquema clonado:

  • A clonagem de um objeto individual de política de agregação não é permitida.

  • A clonagem de um banco de dados resulta na clonagem de todas as políticas de agregação do banco de dados.

  • A clonagem de um esquema resulta na clonagem de todas as políticas de agregação dentro do esquema.

  • Uma tabela clonada é mapeada para as mesmas políticas de agregação que a tabela de origem.

    • Quando uma tabela é clonada no contexto da clonagem de seu esquema principal, se a tabela de origem tiver uma referência a uma política de agregação no mesmo esquema principal (ou seja, uma referência local), a tabela clonada terá uma referência à política de agregação clonada.

    • Se a tabela de origem se referir a uma política de agregação em um esquema diferente (ou seja, uma referência estrangeira), então a tabela clonada manterá a referência estrangeira.

Para obter mais informações, consulte CREATE <objeto> … CLONE.

Replicação

As políticas de agregação e suas atribuições podem ser replicadas usando replicação de banco de dados e grupos de replicação.

Para replicação de banco de dados, a operação de replicação falha se uma das seguintes condições for verdadeira:

  • O banco de dados primário está em uma conta Enterprise (ou superior) e contém uma política, mas uma ou mais das contas aprovadas para replicação estão em edições anteriores.

  • Uma tabela ou exibição contida no banco de dados primário tem uma referência pendente a uma política de agregação em outro banco de dados.

O comportamento de referência pendente para a replicação de banco de dados pode ser evitado ao replicar múltiplos bancos de dados em um grupo de replicação.

Privilégios e comandos

As subseções a seguir fornecem informações para ajudar a gerenciar políticas de agregação.

Privilégios da política de agregação

Snowflake oferece suporte aos seguintes privilégios no objeto de política de agregação.

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Privilégio

Uso

APPLY

Habilita as operações de definição e remoção para uma política de agregação em uma tabela.

OWNERSHIP

Transfere a propriedade da política de agregação, o que concede controle total sobre a política de agregação. Obrigatório para alterar a maioria das propriedades de uma política de agregação.

Para obter mais detalhes, consulte Resumo de comandos DDL, operações e privilégios (neste tópico).

Referência DDL da política de agregação

O Snowflake oferece suporte ao seguinte DDL para criar e gerenciar políticas de agregação:

Resumo de comandos DDL, operações e privilégios

A tabela a seguir resume a relação entre privilégios da política de agregação e operações DDL.

Observe que operar em qualquer objeto de um esquema também requer o privilégio USAGE no banco de dados e esquema principais.

Operação

Privilégio necessário

Criar política de agregação.

Uma função com o privilégio CREATE AGGREGATION POLICY no mesmo esquema.

Alterar política de agregação.

A função com o privilégio OWNERSHIP na política de agregação.

Descrever política de sessão

Um dos seguintes:

  • Uma função com o privilégio global APPLY AGGREGATION POLICY ou

  • Uma função com o privilégio OWNERSHIP na política de agregação ou

  • Uma função com o privilégio APPLY na política de agregação.

Descartar política de agregação.

Uma função com o privilégio OWNERSHIP na política de agregação.

Mostrar políticas de agregação.

Um dos seguintes:

  • Uma função com o privilégio USAGE no esquema em que existe a política de agregação ou

  • Uma função com o privilégio APPLY AGGREGATION POLICY na conta.

Definir ou remover uma política de agregação em uma tabela.

Um dos seguintes:

  • Uma função com o privilégio APPLY AGGREGATION POLICY na conta ou

  • Uma função com o privilégio APPLY na política de agregação e o privilégio OWNERSHIP na tabela ou exibição.

O Snowflake aceita diferentes permissões para criar e definir uma política de agregação em um objeto.

  1. Para uma abordagem centralizada de gerenciamento de políticas de agregação, na qual a função personalizada aggregation_policy_admin cria e define políticas de agregação em todas as tabelas, são necessárias as seguintes permissões:

    USE ROLE securityadmin;
    GRANT USAGE ON DATABASE mydb TO ROLE agg_policy_admin;
    GRANT USAGE ON SCHEMA mydb.schema TO ROLE proj_policy_admin;
    GRANT CREATE AGGREGATION POLICY ON SCHEMA mydb.schema TO ROLE aggregation_policy_admin;
    GRANT APPLY ON AGGREGATION POLICY ON ACCOUNT TO ROLE aggregation_policy_admin;
    
    Copy
  2. Em uma abordagem híbrida de gerenciamento, uma única função tem o privilégio CREATE AGGREGATIONPOLICY para assegurar que as políticas de agregação sejam nomeadas de forma consistente e que equipes ou funções individuais tenham o privilégio APPLY para uma política de agregação específica.

    Por exemplo, a função personalizada finance_role pode receber a permissão para definir a política de agregação cost_center em tabelas e exibições que a função possui (ou seja, a função tem o privilégio OWNERSHIP sobre a tabela ou exibição):

    USE ROLE securityadmin;
    GRANT CREATE AGGREGATION POLICY ON SCHEMA mydb.schema TO ROLE aggregation_policy_admin;
    GRANT APPLY ON AGGREGATION POLICY cost_center TO ROLE finance_role;
    
    Copy