Snowflake Data Clean Rooms: análise de sobreposição¶
Este tópico descreve os fluxos de provedor e consumidor necessários para configurar programaticamente uma sala limpa, compartilhá-la com um consumidor e executar análises de dados nela do lado do provedor. Uma análise de dados do lado do provedor é aquela em que o consumidor não precisa trazer seus conjuntos de dados, mas simplesmente deseja obter insights agregados sobre os conjuntos de dados do provedor.
Ela cobrirá o seguinte:
Provedor:
a. Criação de uma sala limpa do zero.
b. Vinculação de conjuntos de dados a ele com segurança.
c. Como adicionar políticas que controlem quais colunas podem ser unidas e usadas na análise.
d. Habilitação do modelo de análise de sobreposição predefinido.
e. Compartilhamento com um consumidor.
Consumidor:
a. Instalação de uma sala limpa compartilhada pelo provedor.
b. Como adicionar conjuntos de dados à sala limpa.
c. Exame do modelo fornecido na sala limpa.
d. Execução de uma análise na sala limpa usando o modelo.
Pré-requisitos¶
Você precisa de duas contas Snowflake separadas para concluir este fluxo. Use a primeira conta para executar os comandos do provedor e alterne para a segunda conta para executar os comandos do consumidor.
Provedor¶
Nota
Os comandos a seguir devem ser executados em uma planilha Snowflake na conta do provedor.
Configuração do ambiente¶
Execute os seguintes comandos para configurar o ambiente Snowflake antes de usar as APIs de desenvolvedor para trabalhar com uma Snowflake Data Clean Room. Se você não tem a função SAMOOHA_APP_ROLE, entre em contato com o administrador da sua conta.
use role samooha_app_role;
use warehouse app_wh;
Crie a sala limpa¶
Crie um nome para a sala limpa. Insira um novo nome de salas limpas para evitar colisões com nomes de salas limpas. Observe que os nomes dos salas limpas só podem ser alfanuméricos. Os nomes de salas limpas não podem conter caracteres especiais além de espaços e sublinhados.
set cleanroom_name = 'Overlap Analysis Demo Clean Room';
Você pode criar uma nova sala limpa com o nome de sala limpa definido acima. Se o nome da sala limpa definido acima já existir como uma sala limpa, este processo falhará.
Esse procedimento normalmente leva cerca de meio minuto para ser executado.
O segundo argumento para provider.cleanroom_init é a distribuição da sala limpa. Ele pode ser INTERNAL ou EXTERNAL. Para fins de teste, se você estiver compartilhando a sala limpa com uma conta na mesma organização, você pode usar INTERNAL para ignorar a verificação de segurança automatizada que deve ocorrer antes que um pacote de aplicativo seja liberado aos colaboradores. No entanto, se você estiver compartilhando esta sala limpa com uma conta em uma organização diferente, você deve usar uma distribuição de sala limpa EXTERNAL.
call samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
Para visualizar o status da verificação de segurança, use:
call samooha_by_snowflake_local_db.provider.view_cleanroom_scan_status($cleanroom_name);
Após criar sua sala limpa, você deve definir sua diretiva de lançamento para que ela possa ser compartilhada com qualquer colaborador. No entanto, se sua distribuição tiver sido definida como EXTERNAL, você deverá primeiro aguardar a conclusão da verificação de segurança antes de definir a diretiva de lançamento. Você pode continuar executando o restante das etapas enquanto a verificação é concluída e retornar aqui antes da etapa provider.create_cleanroom_listing.
Para definir a diretiva de lançamento, chame:
call samooha_by_snowflake_local_db.provider.set_default_release_directive($cleanroom_name, 'V1_0', '0');
Compartilhamento entre regiões¶
Para compartilhar uma sala limpa com um cliente Snowflake cuja conta está em uma região diferente da sua conta, você deve habilitar o Preenchimento automático entre nuvens. Para obter mais informações sobre os custos adicionais associados à colaboração com consumidores em outras regiões, consulte Custos de preenchimento automático entre nuvens.
Ao usar as APIs de desenvolvedor, o processo para habilitar o compartilhamento entre regiões ocorre em duas etapas.
Um administrador Snowflake com a função ACCOUNTADMIN habilita o preenchimento automático entre nuvens para sua conta Snowflake. Para obter instruções, consulte Colaboração com contas em diferentes regiões.
Execute o comando provider.enable_laf_for_cleanroom para habilitar o preenchimento automático entre nuvens para a sala limpa. Por exemplo:
call samooha_by_snowflake_local_db.provider.enable_laf_for_cleanroom($cleanroom_name);
Após habilitar o preenchimento automático entre nuvens para a sala limpa, você pode adicionar consumidores à sua listagem normalmente usando o comando provider.create_cleanroom_listing. A listagem é replicada automaticamente para nuvens e regiões remotas, conforme necessário.
Vincule o conjunto de dados e defina a política de junção para o conjunto de dados¶
Conecte as tabelas Snowflake à sala limpa. Navegue pela lista de tabelas em sua conta Snowflake e insira os nomes de tabela totalmente qualificados (Database.Schema.Table) como uma matriz. O procedimento torna a tabela automaticamente acessível à sala limpa, criando uma exibição segura da tabela de dentro da sala limpa, evitando assim a necessidade de fazer uma cópia da tabela.
call samooha_by_snowflake_local_db.provider.link_datasets($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Nota
Se esta etapa não funcionar mesmo que sua tabela exista, é provável que a função SAMOOHA_APP_ROLE ainda não tenha recebido acesso a ela. Se esse for o caso, mude para a função ACCOUNTADMIN, chame o procedimento abaixo no banco de dados e reverta para o restante do fluxo:
use role accountadmin;
call samooha_by_snowflake_local_db.provider.register_db('<DATABASE_NAME>');
use role samooha_app_role;
Se quiser visualizar os conjuntos de dados adicionados à sala limpa, chame o procedimento a seguir.
call samooha_by_snowflake_local_db.provider.view_provider_datasets($cleanroom_name);
Para descobrir quais colunas usar como política de junção, você pode analisar seu conjunto de dados para determinar as colunas PII. Para ver as 10 principais linhas, execute a seguinte consulta:
select * from SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS limit 10;
Especifique em quais colunas o consumidor tem permissão para unir ao executar modelos na sala limpa. Este procedimento deve ser chamado em colunas de identidade como e-mail. A política de junção é “somente substituição”, portanto, se a função for chamada novamente, a política de junção definida anteriormente será completamente substituída pela nova.
call samooha_by_snowflake_local_db.provider.set_join_policy($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HEM']);
Se você quiser visualizar a política de junção adicionada à sala limpa, chame o procedimento a seguir.
call samooha_by_snowflake_local_db.provider.view_join_policy($cleanroom_name);
Como adicionar modelos de análise à sala limpa¶
Adicione uma lista de modelos predefinidos usando os identificadores de nome. Neste fluxo, você adicionará um modelo predefinido que permite que um consumidor realize uma análise sobre a sobreposição entre seus conjuntos de dados e os conjuntos de dados do provedor de maneira segura e aprovada pelo provedor em colunas aprovadas pelo provedor.
Um detalhe crucial sobre este modelo é que ele implementa nativamente as garantias de segurança adicionais fornecidas pela Privacidade diferencial. Consulte Privacidade diferencial para saber mais.
call samooha_by_snowflake_local_db.provider.add_templates($cleanroom_name, ['prod_overlap_analysis']);
Se você quiser visualizar os modelos atualmente ativos na sala limpa, chame o procedimento a seguir. Você pode ver as modificações que precisa usar para habilitar garantias de Privacidade diferencial em sua análise. Um padrão semelhante pode ser incorporado em qualquer modelo personalizado que você escolher gravar.
Nota
Observe que todos os modelos predefinidos definidos pelo sistema são criptografados e não podem ser visualizados por padrão. No entanto, todos os modelos personalizados que você adicionar ficarão visíveis.
call samooha_by_snowflake_local_db.provider.view_added_templates($cleanroom_name);
Qualquer modelo adicionado à sala limpa também pode ser removido, se necessário. Consulte o Guia de referência da API do provedor para mais detalhes.
Definição da política de coluna em cada tabela¶
Visualize os dados vinculados para ver as colunas presentes na tabela. Para exibir as 10 primeiras linhas, chame o procedimento a seguir.
select * from SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS limit 10;
Defina as colunas que o consumidor pode agrupar e agregar (por exemplo SUM/AVG) e geralmente usa em uma análise para cada combinação de tabela e modelo. Isso proporciona flexibilidade para que a mesma tabela possa permitir diferentes seleções de colunas, dependendo do modelo subjacente. Isso só deve ser chamado depois que o modelo for adicionado.
Observe que a política de coluna é somente substituição, portanto, se a função for chamada novamente, a política de coluna definida anteriormente será completamente substituída pela nova.
A política de coluna não deve ser usada em colunas de identidade como e-mail, HEM, RampID etc., já que você não quer que o consumidor seja capaz de agrupar por essas colunas. No ambiente de produção, o sistema irá inferir de forma inteligente as colunas PII e bloquear esta operação, mas esse recurso não está disponível no ambiente sandbox. Ele só deve ser usado nas colunas em que você deseja que o consumidor possa agregar e agrupar, como Status, Faixa etária, Canal, Dias ativos etc.
call samooha_by_snowflake_local_db.provider.set_column_policy($cleanroom_name, [
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:STATUS',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:AGE_BAND',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:DAYS_ACTIVE',
'prod_overlap_analysis:SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:REGION_CODE']);
Se você quiser visualizar a política de coluna adicionada à sala limpa, chame o procedimento a seguir.
call samooha_by_snowflake_local_db.provider.view_column_policy($cleanroom_name);
Consumidor¶
Nota
Os seguintes comandos devem ser executados em uma planilha Snowflake na conta do consumidor
Configuração do ambiente¶
Execute os seguintes comandos para configurar o ambiente Snowflake antes de usar as APIs de desenvolvedor para trabalhar com uma Snowflake Data Clean Room. Se você não tem a função SAMOOHA_APP_ROLE, entre em contato com o administrador da sua conta.
use role samooha_app_role;
use warehouse app_wh;
Instalação da sala limpa¶
Depois que um compartilhamento de sala limpa for instalado, a lista de salas limpas disponíveis poderá ser visualizada usando o comando abaixo.
call samooha_by_snowflake_local_db.consumer.view_cleanrooms();
Atribua um nome para a sala limpa que o provedor compartilhou com você.
set cleanroom_name = 'Overlap Analysis Demo Clean room';
O comando a seguir instala a sala limpa na conta do consumidor com o provedor associado e a sala limpa selecionada. Insira o localizador da conta Snowflake do provedor (não o nome).
Este procedimento pode demorar um pouco mais para ser executado, normalmente cerca de meio minuto.
call samooha_by_snowflake_local_db.consumer.install_cleanroom($cleanroom_name, '<PROVIDER_ACCOUNT_LOCATOR>');
Após a instalação da sala limpa, o provedor precisa terminar de configurá-la do seu lado antes que ela seja habilitada para uso. A função abaixo permite que você verifique o status da sala limpa. Depois que ela for habilitada, você poderá executar o comando Run Analysis abaixo. Normalmente, leva cerca de 1 minuto para que a sala limpa seja habilitada.
call samooha_by_snowflake_local_db.consumer.is_enabled($cleanroom_name);
Vincule o conjunto de dados¶
Agora você pode vincular alguns dos conjuntos de dados à sala limpa para realizar cálculos seguros com os dados do provedor.
call samooha_by_snowflake_local_db.consumer.link_datasets($cleanroom_name, ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS']);
Nota
Se esta etapa não funcionar mesmo que sua tabela exista, é provável que a função SAMOOHA_APP_ROLE ainda não tenha recebido acesso a ela. Se esse for o caso, mude para a função ACCOUNTADMIN, chame o procedimento abaixo no banco de dados e reverta para o restante do fluxo:
use role accountadmin;
call samooha_by_snowflake_local_db.consumer.register_db('<DATABASE_NAME>');
use role samooha_app_role;
Para executar a análise, você precisará passar a tabela do consumidor. Se quiser visualizar os conjuntos de dados que adicionou à sala limpa, chame o procedimento a seguir.
call samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);
Execute a análise¶
Agora que a sala limpa está instalada, você pode executar o modelo de análise fornecido à sala limpa pelo provedor usando o comando “run_analysis”. Você pode ver como cada campo é determinado nas seções abaixo.
Nota
Antes de executar a análise, você pode alterar o tamanho do warehouse ou usar um novo warehouse de tamanho maior se suas tabelas forem grandes.
-- Example run analysis procedure with single provider dataset
call samooha_by_snowflake_local_db.consumer.run_analysis(
$cleanroom_name, -- cleanroom
'prod_overlap_analysis', -- template name
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], -- your tables
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'], -- the provider table we want to carry out analysis on
object_construct( -- The keyword arguments needed for the SQL Jinja template
'dimensions', ['p.REGION_CODE'], -- Group by column
'measure_type', ['AVG'], -- Aggregate function you want to perform like COUNT, AVG, etc.
'measure_column', ['p.DAYS_ACTIVE'], -- Columns you want to perform aggregate function on
'where_clause', 'p.HEM=c.HEM' -- A boolean filter
-- $$ is used to pass string literal
)
);
Para cada uma das colunas referenciadas na filtragem do conjunto de dados “where_clause” ou dimensions ou measure_columns, você pode usar p. para consultar campos nas tabelas do provedor e c. para consultar campos nas tabelas do consumidor. Use p2, p3 etc. para mais de uma tabela de provedores e c2, c3 etc. para mais de uma tabela de consumidores.
Como determinar as entradas para run_analysis¶
Para executar a análise, você precisa passar alguns parâmetros à função run_analysis. Esta seção mostra como determinar quais parâmetros passar.
Nomes dos modelos
Primeiro, você pode ver os modelos de análise compatíveis chamando o procedimento a seguir.
call samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);
Antes de executar uma análise com um modelo, você precisa saber quais argumentos especificar e quais tipos são esperados. Para modelos personalizados, você pode executar o seguinte.
Nota
Observe que todos os modelos predefinidos definidos pelo sistema são criptografados e não podem ser visualizados por padrão. No entanto, todos os modelos personalizados que você adicionar ficarão visíveis.
call samooha_by_snowflake_local_db.consumer.view_template_definition($cleanroom_name, 'prod_overlap_analysis');
Isso geralmente também pode conter um grande número de diferentes parâmetros SQL Jinja. A funcionalidade a seguir analisa o modelo SQL Jinja e extrai os argumentos que precisam ser especificados em run_analysis, organizando-os em uma lista.
Nota
Observe que todos os modelos definidos previamente pelo sistema são criptografados e, portanto, esta função não obterá os argumentos para esses modelos. No entanto, você poderá recuperar os parâmetros para seus modelos personalizados.
call samooha_by_snowflake_local_db.consumer.get_arguments_from_template($cleanroom_name, 'prod_overlap_analysis');
Nomes dos conjuntos de dados
Se você quiser visualizar os nomes dos conjuntos de dados adicionados à sala limpa pelo provedor, chame o procedimento a seguir. Observe que você não pode visualizar os dados presentes nos conjuntos de dados adicionados à sala limpa pelo provedor devido às propriedades de segurança da sala limpa.
call samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);
Você também pode ver as tabelas vinculadas à sala limpa usando a seguinte chamada:
call samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);
Colunas de dimensão e medida
Ao executar a análise, você pode querer filtrar, agrupar e agregar em determinadas colunas. Se você quiser visualizar a política de coluna adicionada à sala limpa pelo provedor, chame o procedimento a seguir.
call samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
Orçamentos epsilon e de privacidade
Se estiver recebendo um erro como resultado do último procedimento de execução, pode ser porque não há orçamento disponível para o epsilon alto que você escolheu. Você pode verificar o orçamento de privacidade restante usando o procedimento abaixo.
call samooha_by_snowflake_local_db.consumer.view_remaining_privacy_budget($cleanroom_name);
O parâmetro epsilon que você especifica é uma entrada para o mecanismo de privacidade diferencial que opera dentro da sala limpa. Consulte a seção Privacidade diferencial para saber mais sobre como a privacidade diferencial funciona. Quanto maior o valor epsilon especificado, maior será o consumo do orçamento de privacidade finito (redefinido diariamente), mas maior será a precisão do resultado, pois menos ruído será adicionado aos dados agregados.
Erros comuns
Se você estiver recebendo o erro Não aprovado: colunas não autorizadas usadas como resultado da análise de execução, talvez seja necessário visualizar novamente a política de junção e a política de coluna definidas pelo provedor.
call samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);
call samooha_by_snowflake_local_db.consumer.view_provider_column_policy($cleanroom_name);
Também é possível que você tenha esgotado seu orçamento de privacidade, o que o impedirá de executar mais consultas. Seu orçamento de privacidade restante pode ser visualizado usando o comando abaixo. Ele é redefinido diariamente, mas o provedor de sala limpa pode redefini-lo, se quiser.
call samooha_by_snowflake_local_db.consumer.view_remaining_privacy_budget($cleanroom_name);
Você pode verificar se a privacidade diferencial foi habilitada para sua sala limpa usando a seguinte API:
call samooha_by_snowflake_local_db.consumer.is_dp_enabled($cleanroom_name);