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);
- 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;
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>' ];
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> )
Onde
integer_expression
resolve o tamanho mínimo do grupo da política.Há uma diferença entre passar
1
e0
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);
- 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;
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);
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 ]
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;
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;
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;
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
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;
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;
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:
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'));
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'));
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)
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 atable_b
com um tamanho de grupo mínimo de 3, cada grupo retornado pela consulta deverá ser criado usando pelo menos 5 linhas datable_a
e 3 linhas datable_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 inteirac
que possui o seguinte conteúdo: {1
,2
,2
}.open_t
é irrestrito e contém uma coluna inteirac
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;
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;
Cada grupo formado pela chave
a
deve conter 2 registros deprotected_table1
e 5 registros deprotected_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:
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.Conceda a esta função os privilégios para criar e atribuir uma política de agregação.
Crie a política de agregação.
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
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;
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;
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
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);
Atribua a política de agregação a uma tabela
t1
:ALTER TABLE t1 SET AGGREGATION POLICY my_policy;
- 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;
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 emVT
eMA
.
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:
|
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:
|
Definir ou remover uma política de agregação em uma tabela. |
Um dos seguintes:
|
O Snowflake aceita diferentes permissões para criar e definir uma política de agregação em um objeto.
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;
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çãocost_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;