Análise de dados básica executada pelo consumidor

Visão geral

Este tópico demonstra uma análise básica executada pelo consumidor usando a API do Clean Rooms. O exemplo mostra como um provedor pode criar e compartilhar programaticamente uma sala limpa com dados, e um consumidor pode executar uma análise nos dados do provedor. O provedor define as consultas SQL que podem ser executadas nos dados. O provedor pode definir que as consultas sejam feitas apenas nos dados do provedor, apenas nos dados do consumidor ou que unam os dados do provedor e do consumidor.

Você pode baixar o exemplo de código completo para carregar e executar em sua conta Snowflake.

O diagrama a seguir mostra o fluxo de dados pelos principais componentes em uma análise básica executada pelo consumidor.

Direção básica do fluxo de dados em uma análise executada pelo consumidor

Em uma análise básica executada pelo consumidor envolvendo duas partes, o provedor e os consumidores vinculam dados à sala limpa. Esses dados são acessados ​​com o uso de uma exibição segura armazenada no DB do consumidor no pacote de aplicativos da sala limpa na conta do consumidor.

Durante uma análise, o aplicativo da sala limpa na conta do consumidor usa as exibições seguras especificadas do consumidor e do provedor, e os resultados são compartilhados com o consumidor.

Etapas do provedor

A lista a seguir mostra as principais etapas para criar, publicar e compartilhar uma sala limpa com um consumidor:

Configuração do ambiente

Para usar a API, você deve usar um warehouse no qual SAMOOHA_APP_ROLE tenha privilégios. app_wh é um dos vários warehouses com acesso à API. Escolha o warehouse apropriado às suas necessidades. (Você também pode usar o próprio warehouse, se preferir.)

A função SAMOOHA_APP_ROLE é necessária para acessar a API.

USE WAREHOUSE app_wh;
USE ROLE SAMOOHA_APP_ROLE;
Copy

Crie a sala limpa

A próxima etapa é criar uma nova sala limpa. Isso é feito com uma única chamada de API que especifica se a sala limpa é para uso interno ou externo. As salas limpas internas podem ser acessadas somente por consumidores da mesma organização. As salas limpas externas podem ser usadas por consumidores de fora da organização. Para ambos os tipos de sala limpa, os consumidores devem ser convidados a usar a sala limpa para poderem acessá-la.

As salas limpas externas acionam verificações de segurança adicionais quando determinadas ações são executadas. Quando isso acontece, é necessário chamar provider.view_cleanroom_scan_status para ver quando a verificação de segurança é concluída, para que você possa continuar com a próxima ação.

O seguinte exemplo cria uma sala limpa interna:

CALL samooha_by_snowflake_local_db.provider.cleanroom_init($cleanroom_name, 'INTERNAL');
Copy

Definição da política de junção

Se você adicionar um modelo à sala limpa que permita que o consumidor una seus dados, deverá definir uma política de junção de sala limpa para seus dados. A política de junção de sala limpa especifica quais colunas podem ser unidas nas consultas executadas por colaboradores. A políticas de junção próprias não restringem suas próprias consultas.

As salas limpas são compatíveis com alguns tipos de políticas de dados que você pode definir em dados vinculados. Essas políticas são semelhantes, mas não iguais, às políticas equivalentes do Snowflake e são aplicadas somente à exibição interna, não aos dados de origem. Quaisquer políticas do Snowflake definidas nos dados de origem são propagadas para as exibições vinculadas a uma sala limpa. As políticas de sala limpa são definidas somente nos dados vinculados, não nos dados de origem.

Importante

O modelo é responsável por usar filtros JinjaSQL para aplicar as políticas. Se o modelo não usar filtros de política, as políticas não serão respeitadas. Sempre coloque filtros de política nos modelos que você escreve e examine os modelos que você executa para confirmar se eles aplicam as políticas da sala limpa.

Você pode definir políticas somente nos dados vinculados, e não nos dados da outra parte.

O seguinte exemplo mostra como definir uma política de junção para permitir que duas colunas da tabela vinculada possam ser unidas:

CALL samooha_by_snowflake_local_db.provider.set_join_policy(
  $cleanroom_name,
  ['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_EMAIL',
   'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS:HASHED_PHONE']);
Copy

Saiba mais sobre as políticas de junção.

Adição de modelos a uma sala limpa

Um modelo de sala limpa é um modelo JinjaSQL válido que normalmente resulta em uma consulta SQL. O modelo, às vezes chamado de análise, pode receber argumentos do autor da chamada e acessar todos os dados vinculados à sala limpa. Tanto provedores quanto consumidores podem adicionar e executar modelos a uma sala limpa.

O Snowflake fornece alguns modelos padrão, mas você provavelmente fará seus próprios modelos personalizados.

Quaisquer políticas de sala limpa que você definir serão aplicadas somente se o modelo incluir filtros de política. Portanto, certifique-se de que os modelos adicionados a uma sala limpa incluam esses filtros. Para obter mais informações sobre políticas, consulte Compreensão das políticas de tabela de clean room.

Por padrão, somente consumidores podem executar modelos. Se um provedor quiser executar um modelo, ele deverá solicitar permissão do consumidor. Da mesma forma, se um consumidor quiser carregar um modelo, ele deverá solicitar permissão do provedor.

Para obter mais informações sobre a criação de um modelo personalizado, leia Adição de modelos personalizados a uma sala limpa e Referência de modelo de sala limpa personalizado.

O seguinte exemplo mostra como adicionar um modelo fornecido pelo Snowflake à sala limpa:

CALL samooha_by_snowflake_local_db.provider.add_templates(
  $cleanroom_name,
  ['prod_overlap_analysis']);
Copy

Definição de políticas de coluna

As políticas de coluna de sala limpa especificam quais colunas das tabelas podem ser projetadas nas consultas executadas por colaboradores. Uma política de coluna está vinculada a uma coluna e a um modelo, portanto, colunas diferentes podem ser definidas como projetáveis com modelos distintos. Um modelo deve estar presente em uma sala limpa para que você possa definir políticas de coluna para ele.

As políticas de coluna, como todas as políticas, são somente substituição; isso significa que a definição de políticas de coluna substitui completamente todas as políticas de coluna existentes definidas por essa conta. Tanto o provedor quanto o consumidor podem definir políticas de coluna em seus dados. Saiba mais sobre as políticas de coluna.

O seguinte exemplo mostra como permitir que quatro colunas sejam projetadas do banco de dados de amostra de salas limpas que foi vinculado:

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']);
Copy

Compartilhamento com consumidores

Somente os consumidores convidados pelo provedor podem acessar a sala limpa. Os consumidores não podem compartilhar uma sala limpa com outros consumidores. Os consumidores designados não podem acessar a sala limpa até que ela seja publicada. Os convites para participar de uma sala limpa são feitos no nível da conta, não do usuário.

O exemplo a seguir mostra como compartilhar uma sala limpa com dois consumidores. O procedimento usa duas listas paralelas delimitadas por vírgulas de localizadores de contas de consumidor e a conta de compartilhamento de dados do consumidor IDs.

CALL samooha_by_snowflake_local_db.provider.add_consumers(
  $cleanroom_name,
  'CONSUMER_LOCATOR1,CONSUMER_LOCATOR2',
  'CONSUMER_DATA_SHARING_ACCOUNT_ID1,CONSUMER_DATA_SHARING_ACCOUNT_ID2');
Copy

Compartilhamento com consumidores em outras regiões de hospedagem na nuvem

Se um consumidor e um provedor estiverem em regiões de nuvem diferentes, eles deverão habilitar o preenchimento automático entre nuvens para que o consumidor possa ser adicionado à sala limpa. Para ver sua própria região de nuvem, execute SELECT CURRENT_REGION();. Normalmente, você não pode ver a região do consumidor, mas se tentar adicionar um consumidor em outra região, haverá falha em``provider.add_consumers`` com uma mensagem indicando o problema. Quando essa falha ocorre, você deve chamar provider.remove_consumers para remover as contas que estão em uma região diferente, habilitar o preenchimento automático entre nuvens e depois adicionar as contas entre regiões novamente.

Definição da versão padrão

As salas limpas são aplicativos nativos com controle de versão. Determinadas ações, como adicionar código a uma sala limpa, geram uma nova versão de patch do aplicativo. Os consumidores devem instalar a sala limpa em sua conta. A versão que eles instalam é baseada no número da versão padrão que você especifica. Posteriormente, se você publicar uma nova versão da sala limpa e incrementar o número da versão padrão, todas as versões instaladas pelos consumidores serão atualizadas automaticamente, e as novas instalações assumirão como padrão a nova versão. Leia mais sobre o controle de versão de sala limpa.

O seguinte exemplo mostra como definir a versão padrão de uma sala limpa como V1.0.0, que é a versão inicial, se você não carregou nenhum código:

CALL samooha_by_snowflake_local_db.provider.set_default_release_directive(
  $cleanroom_name,
  'V1_0',          -- Version number: Never changes.
  '0'              -- Patch number: Can change.
  );
Copy

Publicação da sala limpa

Publique ou republique a sala limpa, conforme mostrado no exemplo a seguir. A primeira vez que esse procedimento é chamado, ele torna a sala limpa visível e instalável por qualquer consumidor com quem você a compartilhou. Você deve chamar esse procedimento sempre que fizer alterações significativas, como atualizar a versão padrão ou fazer alterações específicas na UI de salas limpas.

CALL samooha_By_snowflake_local_db.provider.create_or_update_cleanroom_listing(
  $cleanroom_name);
Copy

Agora o consumidor pode instalar a sala limpa, vincular dados, definir políticas e executar modelos, conforme descrito a seguir.

Dica

Quando você não precisar mais de uma sala limpa, deverá excluí-la nas contas do provedor e do consumidor (provider.drop_cleanroom e consumer.uninstall_cleanroom). Há um limite para o número de salas limpas e colaboradores por conta. Se você deixar muitas salas limpas não utilizadas em sua conta, poderá atingir sua cota.

Etapas do consumidor

Depois que um provedor publica uma sala limpa, todos os consumidores adicionados como colaboradores poderão vê-la e instalá-la usando a UI ou a API. Esta seção mostra como um consumidor pode instalar uma sala limpa e executar uma análise usando a API.

Aqui está uma breve visão geral das etapas que o consumidor executa para instalar uma sala limpa e executar uma análise:

Configuração do ambiente

Assim como o provedor, o consumidor deve usar um warehouse que a SAMOOHA_APP_ROLE possa acessar. No entanto, diferentemente do provedor, o consumidor pode usar a função SAMOOHA_APP_ROLE diretamente para acesso total à API, ou um administrador da sala limpa nessa conta pode conceder uma função mais limitada que dá privilégios para executar um subconjunto da API para consumidores. Essa função limitada, às vezes chamada genericamente de «função de execução», é concedida por um usuário com todos os privilégios de sala limpa. Saiba como conceder acesso limitado à API.

Uma função de execução não permite que você instale uma sala limpa, portanto, é necessário usar SAMOOHA_APP_ROLE, conforme mostrado no seguinte exemplo:

USE WAREHOUSE app_wh;
USE ROLE SAMOOHA_APP_ROLE;
Copy

Instalação da sala limpa

O seguinte trecho mostra como listar todas as salas limpas instaladas que você foi convidado a instalar:

-- See all clean rooms, installed and not.
CALL samooha_by_snowflake_local_db.consumer.view_cleanrooms();

-- See only clean rooms that aren't installed.
CALL samooha_by_snowflake_local_db.consumer.view_cleanrooms() ->>
  SELECT * FROM $1
    WHERE IS_ALREADY_INSTALLED = false;
Copy

Instale a sala limpa que o provedor compartilhou com você, conforme mostrado no exemplo a seguir. Você deve especificar o localizador da conta do provedor ao instalar uma sala limpa.

CALL samooha_by_snowflake_local_db.consumer.install_cleanroom(
  $cleanroom_name,
  '<PROVIDER_ACCOUNT_LOCATOR>');
Copy

Dica

As salas limpas têm um nome e um ID. Para salas limpas criadas pela API, use o nome da sala limpa sempre que um procedimento de API precisar desse nome. Para salas limpas criadas na UI, use o ID da sala limpa em vez do nome sempre que um procedimento de API precisar de um nome de sala limpa.

A UI de salas limpas denomina as salas limpas criadas por meio da API como Supported with Developer APIs.

Adição de dados e definição de políticas

Se os modelos de sala limpa permitirem que o consumidor inclua os próprios dados em uma consulta, o consumidor registrará os dados, vinculará os dados e definirá políticas da mesma forma que o provedor. Use as versões de consumer dos procedimentos, conforme mostrado no seguinte exemplo:

-- You must use a role with MANAGE GRANTS privilege on an object to register it.
USE ROLE ACCOUNTADMIN;
CALL samooha_by_snowflake_local_db.consumer.register_db('MY_DATABASE');

-- Link some tables.
CALL samooha_by_snowflake_local_db.consumer.link_datasets(
  $cleanroom_name,
  [
    'SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS',
    'MY_DATABASE.PUBLIC.EXPOSURES'
  ]);
Copy

A política de junção do provedor mostra quais colunas do provedor é possível unir. Este exemplo mostra como verificar quais colunas do provedor você pode unir:

CALL samooha_by_snowflake_local_db.consumer.view_provider_join_policy($cleanroom_name);
Copy

O provedor precisa da aprovação do consumidor para executar um modelo na sala limpa. Como resultado, a maioria dos consumidores não se preocupa em definir políticas nas tabelas que vinculam. No entanto, recomendamos que você considere adicionar políticas caso um provedor solicite a execução de um modelo posteriormente, pois você pode se esquecer de adicionar as políticas apropriadas nesse momento.

Se você definir políticas, elas serão aplicadas somente se o modelo incluir um filtro join_policy ou column_policy na coluna do modelo. Portanto, certifique-se de que os modelos que você adicionar a uma sala limpa incluam esses filtros para aplicar suas políticas. Para examinar os modelos em uma sala limpa, chame consumer.view_added_templates. Para obter mais informações sobre políticas, consulte Compreensão das políticas de tabela de clean room.

Execute a análise

Antes de executar um modelo, normalmente você o examina para ver o que ele faz e quais variáveis ele aceita e, depois disso, examina quais tabelas de provedor estão disponíveis na sala limpa.

Exame dos modelos

Você pode listar os modelos em uma sala limpa e examinar o código de cada um (a menos que o provedor tenha ocultado o código explicitamente). Isso pode ser útil para ajudar você a entender melhor a consulta. É possível também solicitar que a sala limpa analise o modelo e mostre quais variáveis você pode passar ao executar o código.

Você pode passar uma lista de tabelas a serem usadas na consulta, sujeita ao design do modelo. Qualquer tabela vinculada à sala limpa pode ser passada para o modelo.

Muitos modelos também oferecem suporte a variáveis que você pode especificar em tempo de execução; por exemplo, para corresponder a um valor específico ou especificar quais colunas mostrar. O ideal é que o provedor informe o que o modelo faz e quais argumentos ele aceita. Mas normalmente, você também quer examinar um modelo para ver o código. O seguinte trecho lista os modelos adicionados à sala limpa por qualquer colaborador e obtém os argumentos compatíveis com um modelo específico:

-- View the list of templates available in this clean room,
-- and the source code for each template.
CALL samooha_by_snowflake_local_db.consumer.view_added_templates($cleanroom_name);

-- Show which variables can be passed in when running the specified template.
CALL samooha_by_snowflake_local_db.consumer.get_arguments_from_template(
  $cleanroom_name,
  $template_name
);
Copy

Dica

Quando aparece a variável de matriz my_table usada em um modelo, ela contém a lista de nomes de tabelas de consumidor que você passa ao executar o modelo. Quando aparece a variável de matriz source_table, ela contém a lista de nomes de tabelas de provedor que você passa ao executar o modelo.

Visualização dos dados disponíveis

É possível listar os conjuntos de dados que você e o provedor vincularam a uma sala limpa, conforme mostrado no seguinte exemplo:

-- See which datasets you have linked into the clean room.
CALL samooha_by_snowflake_local_db.consumer.view_consumer_datasets($cleanroom_name);

-- See which datasets the provider has linked into the clean room.
CALL samooha_by_snowflake_local_db.consumer.view_provider_datasets($cleanroom_name);
Copy

Quando você passar um nome de tabela, use o nome da tabela, e não o nome da exibição, que consta nos resultados desses procedimentos.

Execução do modelo

Nas duas etapas anteriores, você aprendeu quais dados você tem e quais variáveis pode passar. Agora você está pronto para executar a análise.

Dependendo da consulta e do tamanho dos dados, você pode alterar o tamanho do warehouse para algo mais apropriado.

O exemplo a seguir mostra como um usuário pode chamar um modelo que usa tabelas de consumidor e de provedor e duas variáveis: dimensions, que é utilizada como coluna de agrupamento, e uma variável opcional where_clause, usada em uma cláusula WHERE na consulta.

O modelo executa uma consulta em uma única tabela de provedor, portanto, a solicitação omitirá as tabelas de consumidor.

No exemplo a seguir, observe como o valor dimensions é um nome de coluna com o prefixo p. O p indica que a coluna vem da tabela de provedor que foi passada. Normalmente, os nomes de colunas exigem que você adicione um p ou c para indicar de qual tabela eles vêm, do provedor ou do consumidor, para evitar ambiguidade de nomes. No entanto, esse requisito é muito específico do modelo. Você precisa se comunicar com o provedor do modelo ou examinar o código para entender quando esses prefixos são necessários.

CALL samooha_by_snowflake_local_db.consumer.run_analysis(
$cleanroom_name,
$template_name,
[],                                              -- This template doesn't accept consumer tables.
['SAMOOHA_SAMPLE_DATABASE.DEMO.CUSTOMERS'],      -- Provider tables.
object_construct(                                -- Template-specific arguments.
  'dimensions', ['p.STATUS'],                    -- Template takes a variable named 'dimensions'.
  'where_clause', 'p.REGION_CODE=$$REGION_10$$'  -- Template allows you to pass in a WHERE clause.
                                                 -- $$ is used to wrap string literals
  )
);
Copy

Exemplo de código

Os arquivos de planilha a seguir demonstram como criar, compartilhar e executar uma análise de sala limpa.

Baixe os exemplos a seguir e carregue-os como arquivos de planilha em sua conta Snowflake. Você precisa de contas separadas para o provedor e o consumidor, cada uma com a API das salas limpas instalada. Consulte as instruções para carregar uma planilha SQL em sua conta Snowflake.