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 la mise en correspondance des types de données, ou vous pouvez utiliser le moteur de traduction pour définir manuellement votre schéma et vos types de données.
Activer la détection automatique du 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 d'accès GCS du résultat de la 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
STRINGdans BigQuery :TIMESTAMP_TZTIMESTAMP_LTZOBJECTVARIANTARRAY
- Les types de données suivants sont mappés en tant que
TIMESTAMPdans BigQuery :TIMESTAMP_NTZ
Tous les autres types de données Snowflake sont mappés directement sur leurs types équivalents dans BigQuery.
Définir manuellement le schéma à l'aide de la sortie du moteur de traduction
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 des tables Snowflake vers BigQuery.
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, puis exécuter le moteur de traduction.
Limites
Les données sont extraites de Snowflake au format Parquet avant d'être chargées dans BigQuery :
- Les types de données Parquet suivants ne sont pas acceptés :
TIMESTAMP_TZ,TIMESTAMP_LTZ- Pour en savoir plus, consultez Évaluer les données Snowflake.
Les types de données Parquet suivants ne sont pas acceptés, mais peuvent être convertis :
TIMESTAMP_NTZOBJECT,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
- Les types de données Parquet suivants ne sont pas acceptés :
Autorisations requises pour le compte de service
Dans un transfert Snowflake, un compte de service est utilisé pour lire les données issues 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 d'utiliser un compte de service appartenant 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 projet Google Cloud 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 Rôles et autorisations IAM BigQuery.
Définir manuellement le mappage de schéma
Pour définir manuellement le mappage de votre schéma :
- Exécutez
dwh-migration-toolpour Snowflake. Pour en savoir plus, consultez Générer des métadonnées pour la traduction et l'évaluation. - Importez le fichier
metadata.zipgénéré dans un bucket Cloud Storage. Le fichiermetadata.zipest utilisé comme entrée pour le moteur de traduction. Exécutez le service de traduction par lot en spécifiant le champ
target_typessurmetadata. Pour en savoir plus, consultez Traduire des requêtes SQL avec l'API Translation.- Voici un exemple de commande permettant d'exécuter une traduction par lot 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.
Le résultat du job de traduction par lot est stocké dans
gs://translation_target_base_uri/metadata/config/.