Detecção e mapeamento de esquema para o Snowflake

Neste guia, mostramos como definir seu esquema ao transferir dados do Snowflake para o BigQuery. É possível usar o serviço de transferência de dados do BigQuery para detectar automaticamente o mapeamento de esquema e tipo de dados ou usar o mecanismo de tradução para definir manualmente o esquema e os tipos de dados.

Detecção de esquema padrão

O conector do Snowflake pode detectar automaticamente o esquema da tabela do Snowflake. Para usar a detecção automática de esquema, deixe o campo Caminho do GCS de saída da tradução em branco ao configurar uma transferência do Snowflake.

A lista a seguir mostra como o conector do Snowflake mapeia os tipos de dados do Snowflake para o BigQuery:

  • Os seguintes tipos de dados são mapeados como STRING no BigQuery:
    • TIMESTAMP_TZ
    • TIMESTAMP_LTZ
    • OBJECT
    • VARIANT
    • ARRAY
  • Os seguintes tipos de dados são mapeados como TIMESTAMP no BigQuery:
    • TIMESTAMP_NTZ

Todos os outros tipos de dados do Snowflake são mapeados diretamente para os tipos equivalentes no BigQuery.

Usar a saída do mecanismo de tradução para o esquema

Para definir seu esquema manualmente (por exemplo, para substituir determinados atributos do esquema), gere os metadados e execute o mecanismo de tradução com estas etapas:

Limitações

  • Os dados são extraídos do Snowflake no formato de dados Parquet antes de serem carregados no BigQuery:

    • Os seguintes tipos de dados do Parquet não são aceitos:
    • Os seguintes tipos de dados Parquet não são compatíveis, mas podem ser convertidos:

      • TIMESTAMP_NTZ
      • OBJECT, VARIANT, ARRAY

      Use o YAML de configuração de conversão de tipo global para substituir o comportamento padrão desses tipos de dados ao executar o mecanismo de tradução.

      A configuração YAML pode ser semelhante ao exemplo a seguir:

      type: experimental_object_rewriter
      global:
        typeConvert:
          datetime: TIMESTAMP
          json: VARCHAR
      

O conector do serviço de transferência de dados do BigQuery para Snowflake usa o mecanismo de tradução do serviço de migração do BigQuery para mapeamento de esquema ao migrar tabelas do Snowflake para o BigQuery. Para concluir uma transferência de dados do Snowflake, primeiro gere metadados para tradução e execute o mecanismo de tradução:

  1. Execute o dwh-migration-tool para o Snowflake. Para mais informações, consulte Gerar metadados para tradução e avaliação.
  2. Faça upload do arquivo metadata.zip gerado para um bucket do Cloud Storage. O arquivo metadata.zip é usado como entrada para o mecanismo de tradução.
  3. Execute o serviço de tradução em lote, especificando o campo target_types como metadata. Para mais informações, consulte Traduzir consultas SQL com a API Translation.

    • Confira um exemplo de comando para executar uma tradução em lote para o Snowflake:
      curl -d "{
      \"name\": \"sf_2_bq_translation\",
      \"displayName\": \"Snowflake to BigQuery Translation\",
      \"tasks\": {
          string: {
            \"type\": \"Snowflake2BigQuery_Translation\",
            \"translation_details\": {
                \"target_base_uri\": \"gs://sf_test_translation/output\",
                \"source_target_mapping\": {
                  \"source_spec\": {
                      \"base_uri\": \"gs://sf_test_translation/input\"
                  }
                },
                \"target_types\": \"metadata\",
            }
          }
      },
      }" \
      -H "Content-Type:application/json" \
      -H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2alpha/projects/project_id/locations/location/workflows
    
    • É possível verificar o status desse comando na página de tradução de SQL no BigQuery. A saída do job de tradução em lote é armazenada em gs://translation_target_base_uri/metadata/config/.

Permissões necessárias da conta de serviço

Em uma transferência do Snowflake, uma conta de serviço é usada para ler dados da saída do mecanismo de tradução no caminho especificado do Cloud Storage. Você precisa conceder à conta de serviço as permissões storage.objects.get e storage.objects.list.

Recomendamos que a conta de serviço pertença ao mesmo projeto Google Cloud em que a configuração de transferência e o conjunto de dados de destino são criados. Se a conta de serviço estiver em um projeto Google Cloud diferente do projeto que criou a transferência de dados do BigQuery, será necessário ativar a autorização de conta de serviço entre projetos.

Para mais informações, consulte Papéis e permissões do BigQuery IAM.