Consultas SQL de forma livre

Um provedor de dados pode permitir que seus dados sejam expostos a um executor de análise por meio de um modelo ou consultas de forma livre. Quando um provedor de dados habilita consultas de forma livre em um conjunto de dados, qualquer executor de análise com acesso à oferta de dados pode executar consultas SQL no ambiente dele nesse conjunto de dados.

Os executores de análise e os provedores de dados devem ter ingressado na colaboração antes que os dados estejam disponíveis.

Visão geral

Aqui estão as etapas para executar consultas de forma livre em dados em uma sala limpa:

Provedor de dados

  1. Registre uma oferta de dados que contenha um ou mais conjuntos de dados em que allowed_analyses: template_and_freeform_sql esteja especificado.

    Se o provedor de dados quiser aplicar políticas do Snowflake às colunas do conjunto de dados, ele deverá criar essas políticas antes de registrar os dados e associá-las às colunas na especificação da oferta de dados.

  2. Vincule a oferta de dados à colaboração da maneira padrão.

Executor de análise

Após a instalação da colaboração na conta, o executor de análise chama VIEW_DATA_OFFERINGS. Se houver um valor na coluna freeform_sql_view_name, será possível consultar o conjunto de dados diretamente na exibição nomeada nessa coluna.

Todas as políticas listadas em freeform_sql_column_policies são aplicadas aos dados pela colaboração. Todas as políticas aplicadas diretamente aos dados de origem pelo provedor de dados são aplicadas, mas não serão exibidas nessa coluna.

Detalhes sobre o provedor de dados e as etapas de análise são fornecidos nas seções a seguir.

Registrando um conjunto de dados de consulta de forma livre (provedor de dados)

As etapas a seguir mostram como habilitar consultas de forma livre durante o registro da oferta de dados:

  1. Especifique allowed_analyses: template_and_freeform_sql na especificação da colaboração. Isso permite que o conjunto de dados seja consultado usando um modelo ou uma consulta de forma livre.

    ...
    datasets:
    - alias: customers_view
      data_object_fqn: PROVIDER_DB.DATA_SCH.CUSTOMERS
      object_class: custom
      allowed_analyses: template_and_freeform_sql
      schema_and_template_policies:
        HASHED_EMAIL:
          category: join_standard
          column_type: hashed_email_b64_encoded
    ...
    

    Somente as colunas listadas em schema_and_template_policies estão disponíveis para consulta por meio de modelos ou consultas de forma livre.

  2. Se você deseja aplicar políticas do Snowflake em consultas de forma livre sem aplicá-las aos seus dados de origem, siga estas etapas:

    1. Crie suas políticas do Snowflake da maneira padrão. Não as aplique à sua tabela.

      CREATE OR REPLACE AGGREGATION POLICY PROVIDER_DB.DATA_SCH.MIN_GROUP_SIZE_POLICY
        AS () RETURNS AGGREGATION_CONSTRAINT ->
          AGGREGATION_CONSTRAINT(MIN_GROUP_SIZE => 5);
      

      A função que cria a colaboração deve ter o privilégio USAGE no banco de dados, esquema e objeto de política.

      Essas políticas são vinculadas dinamicamente; quaisquer alterações feitas nelas afetarão imediatamente todos os conjuntos de dados que as utilizam, mesmo que a oferta de dados já esteja registrada e vinculada.

    2. Atribua suas políticas na especificação da oferta de dados no campo freeform_sql_policies. Importante: todos os nomes de coluna utilizados ​​em freeform_sql_policies deverão usar o nome de coluna gerado automaticamente se a coluna tiver sido renomeada. A renomeação afeta apenas as colunas de categoria padrão de junção.

      Essas políticas não são aplicadas diretamente à tabela de origem, apenas à exibição registrada pela colaboração.

      schema_and_template_policies:
        HASHED_EMAIL:                                  # Source column name.
          category: join_standard
          column_type: hashed_email_b64_encoded        # Column is renamed to the column_type value.
        STATUS:
          category: passthrough
        AGE_BAND:
          category: passthrough
        DAYS_ACTIVE:
          category: passthrough
        INCOME_BRACKET:
          category: passthrough
      freeform_sql_policies:          # Apply agg, join, and masking policies created by the data owner to these columns.
        aggregation_policy:
          name: PROVIDER_DB.DATA_SCH.MIN_GROUP_SIZE_POLICY
          entity_keys:
            - HASHED_EMAIL_B64_ENCODED
        join_policy:
          name: PROVIDER_DB.DATA_SCH.EMAIL_JOIN_POLICY
          columns:
            - HASHED_EMAIL_B64_ENCODED    # This is the renamed column.
        masking_policies:
          - name: PROVIDER_DB.DATA_SCH.MASK_INCOME_POLICY
            columns:
              - INCOME_BRACKET
      
  3. Registre a oferta de dados da maneira padrão chamando REGISTER_DATA_OFFERING.

Executando consultas de forma livre (executor de análise)

Quando um executor de análise chama VIEW_DATA_OFFERINGS, se um valor aparecer na coluna freeform_sql_view_name, a exibição SQL de forma livre poderá ser consultada diretamente, sem usar um modelo. Todas as políticas do Snowflake aplicadas à tabela de origem ou definidas na seção freeform_sql_policies da oferta de dados são aplicadas nas consultas.

CALL SAMOOHA_BY_SNOWFLAKE_LOCAL_DB.COLLABORATION.VIEW_DATA_OFFERINGS($collaboration_name);

Coluna

Valor

TEMPLATE_VIEW_NAME

data_provider.provider_customers_V1.customers

TEMPLATE_JOIN_COLUMNS

hashed_email_b64_encoded

ANALYSIS_ALLOWED_COLUMNS

STATUS, AGE_BAND, DAYS_ACTIVE, INCOME_BRACKET

ACTIVATION_ALLOWED_COLUMNS

FREEFORM_SQL_VIEW_NAME

SFDCR_FREEFORM_SQL_DEMO.FREEFORM_SQL.DATA_PROVIDER_PROVIDER_CUSTOMERS_V1_CUSTOMERS

FREEFORM_SQL_COLUMN_POLICIES

{
  "aggregation_policy": {"entity_keys": ["HASHED_EMAIL_B64_ENCODED"]},
  "masking_policy": {"columns": ["INCOME_BRACKET"]},
  "join_policy": {"columns": ["HASHED_EMAIL_B64_ENCODED"]},
  "no_policy": {"columns": ["DAYS_ACTIVE", "AGE_BAND", "STATUS"]}
}

SHARED_BY

data_provider

SHARED_WITH

["data_consumer"]

DATA_OFFERING_ID

provider_customers_V1

Você deve usar o valor de freeform_sql_view_name, não o valor de template_view_name.

SELECT status, COUNT(*) AS customer_count
  FROM SFDCR_FREEFORM_SQL_DEMO.FREEFORM_SQL.DATA_PROVIDER_PROVIDER_CUSTOMERS_V1_CUSTOMERS AS t
  GROUP BY status
  ORDER BY customer_count DESC;

Exemplo: colaboração de duas partes

O exemplo a seguir demonstra uma colaboração entre duas partes, em que uma parte (o «provedor») é o proprietário da colaboração e um provedor de dados para o consumidor. A outra parte (o «consumidor») é um executor de análise que pode executar o modelo e usar os dados fornecidos pelo provedor, além de executar consultas SQL de forma livre nos dados, sujeitas às políticas definidas na especificação do provedor de dados.

Para executar este exemplo, você deve ter duas contas separadas com o Snowflake Data Clean Rooms instalado.

Você pode baixar os arquivos e carregá-los em sua conta Snowflake ou copiar e colar o código de exemplo em planilhas em duas contas separadas usando o Snowsight.

Baixe os arquivos SQL de origem e carregue-os em duas contas separadas que tenham o Snowflake Data Clean Rooms instalado: