Détection et mappage de schémas pour Snowflake

Ce guide vous explique comment définir votre schéma lorsque vous transférez des données de Snowflake vers BigQuery. Vous pouvez utiliser le service de transfert de données BigQuery pour détecter automatiquement le schéma et le mappage des types de données, ou utiliser le moteur de traduction pour définir manuellement votre schéma et vos types de données.

Détection de schéma par défaut

Le connecteur Snowflake peut détecter automatiquement le schéma de votre table Snowflake. Pour utiliser la détection automatique de schéma, vous pouvez laisser le champ Chemin GCS de la sortie de traduction vide lorsque vous configurez un transfert Snowflake.

La liste suivante montre comment le connecteur Snowflake mappe vos types de données Snowflake dans BigQuery :

  • Les types de données suivants sont mappés en tant que STRING dans BigQuery :
    • TIMESTAMP_TZ
    • TIMESTAMP_LTZ
    • OBJECT
    • VARIANT
    • ARRAY
  • Les types de données suivants sont mappés en tant que TIMESTAMP dans BigQuery :
    • TIMESTAMP_NTZ

Tous les autres types de données Snowflake sont mappés directement avec leurs types équivalents dans BigQuery.

Utiliser la sortie du moteur de traduction pour le schéma

Pour définir manuellement votre schéma (par exemple, pour remplacer certains attributs de schéma), vous pouvez générer vos métadonnées et exécuter le moteur de traduction en procédant comme suit :

Limites

  • Les données sont extraites de Snowflake au format de données Parquet avant d'être chargées dans BigQuery :

    • Les types de données Parquet suivants ne sont pas compatibles :
    • Les types de données Parquet suivants ne sont pas compatibles, mais peuvent être convertis :

      • TIMESTAMP_NTZ
      • OBJECT, VARIANT, ARRAY

      Utilisez le fichier YAML de configuration de la conversion de type globale pour remplacer le comportement par défaut de ces types de données lorsque vous exécutez le moteur de traduction.

      Le fichier YAML de configuration peut ressembler à l'exemple suivant :

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

Le connecteur du service de transfert de données BigQuery pour Snowflake utilise le moteur de traduction du service de migration BigQuery pour le mappage de schéma lors de la migration de tables Snowflake vers BigQuery. Pour effectuer un transfert de données Snowflake, vous devez d'abord générer des métadonnées pour la traduction, puis exécuter le moteur de traduction :

  1. Exécutez dwh-migration-tool pour Snowflake. Pour en savoir plus, consultez la page Générer des métadonnées pour la traduction et l'évaluation.
  2. Importez le fichier metadata.zip généré dans un bucket Cloud Storage. Le fichier metadata.zip est utilisé comme entrée pour le moteur de traduction.
  3. Exécutez le service de traduction par lots en spécifiant le champ target_types comme metadata. Pour en savoir plus, consultez la section Traduire des requêtes SQL avec l'API Translation.

    • Voici un exemple de commande permettant d'exécuter une traduction par lots pour 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
    
    • Vous pouvez vérifier l'état de cette commande sur la page Traduction SQL dans BigQuery. La sortie de la tâche de traduction par lots est stockée dans gs://translation_target_base_uri/metadata/config/.

Autorisations requises pour le compte de service

Lors d'un transfert Snowflake, un compte de service est utilisé pour lire les données de la sortie du moteur de traduction dans le chemin Cloud Storage spécifié. Vous devez accorder au compte de service les autorisations storage.objects.get et storage.objects.list.

Nous vous recommandons que le compte de service appartienne au même Google Cloud projet que celui dans lequel la configuration du transfert et l'ensemble de données de destination sont créés. Si le compte de service se trouve dans un Google Cloud projet différent de celui qui a créé le transfert de données BigQuery, vous devez activer l'autorisation du compte de service entre projets.

Pour en savoir plus, consultez la section Rôles et autorisations IAM BigQuery.