Tutoriels de migration de Snowflake vers BigQuery

Ce document fournit des exemples de bout en bout et des tutoriels sur les différentes façons de configurer un pipeline de migration de Snowflake vers BigQuery.

Exemples de pipeline de migration Snowflake

Vous pouvez migrer vos données de Snowflake vers BigQuery à l'aide de trois processus différents : ELT, ETL ou à l'aide d'outils partenaires.

Extraction, chargement et transformation

Vous pouvez configurer un processus d'extraction, de chargement et de transformation (ELT) de deux manières :

  • Utiliser un pipeline pour extraire des données de Snowflake et les charger dans BigQuery
  • Extraire des données de Snowflake à l'aide d'autres Google Cloud produits.

Utiliser un pipeline pour extraire des données de Snowflake

Pour extraire des données de Snowflake et les charger directement dans Cloud Storage, utilisez l'outil snowflake2bq.

Vous pouvez ensuite charger vos données de Cloud Storage vers BigQuery à l'aide de l'un des outils suivants :

Autres outils pour extraire des données de Snowflake

Vous pouvez également utiliser les outils suivants pour extraire des données de Snowflake :

Autres outils pour charger des données dans BigQuery

Vous pouvez également utiliser les outils suivants pour charger des données dans BigQuery :

Extraction, transformation et chargement

Si vous souhaitez transformer vos données avant de les charger dans BigQuery, envisagez d'utiliser les outils suivants :

  • Dataflow
  • Cloud Data Fusion
    • Créez un pipeline réutilisable et transformez vos données à l'aide des plug-ins CDAP.
  • Managed Service pour Apache Spark
    • Transformez vos données à l'aide de Spark SQL ou de code personnalisé dans l'un des langages Spark compatibles, tels que Scala, Java, Python ou R.

Outils partenaires pour la migration

Plusieurs fournisseurs sont spécialisés dans l'espace de migration d'entrepôt de données d'entreprise. Pour obtenir une liste des partenaires clés et des solutions qu'ils proposent, consultez la page Partenaires BigQuery.

Tutoriel sur l'exportation Snowflake

Le tutoriel suivant montre un exemple d'exportation de données de Snowflake vers BigQuery à l'aide de la commande Snowflake COPY INTO <location>. Pour obtenir un processus détaillé avec des exemples de code, consultez la section Google Cloud Services professionnels Snowflake vers l'outil BigQuery.

Préparer l'exportation

Vous pouvez préparer vos données Snowflake pour une exportation en les extrayant dans un bucket Cloud Storage ou Amazon Simple Storage Service (Amazon S3) en procédant comme suit :

Cloud Storage

Ce tutoriel prépare le fichier au format PARQUET.

  1. Utilisez les instructions SQL Snowflake pour créer une spécification de format de fichier nommé.

    create or replace file format NAMED_FILE_FORMAT
        type = 'PARQUET'

    Remplacez NAMED_FILE_FORMAT par un nom pour le format de fichier. Exemple : my_parquet_unload_format.

  2. Créez une intégration avec la CREATE STORAGE INTEGRATION commande.

    create storage integration INTEGRATION_NAME
        type = external_stage
        storage_provider = gcs
        enabled = true
        storage_allowed_locations = ('BUCKET_NAME')

    Remplacez les éléments suivants :

    • INTEGRATION_NAME : nom de l'intégration de stockage. Exemple : gcs_int
    • BUCKET_NAME : chemin d'accès au bucket Cloud Storage. Exemple : gcs://mybucket/extract/
  3. Récupérez le compte de service Cloud Storage associé à Snowflake avec la commande DESCRIBE INTEGRATION.

    desc storage integration INTEGRATION_NAME;

    Le résultat ressemble à ce qui suit :

    +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
    | property                    | property_type | property_value                                                              | property_default |
    +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------|
    | ENABLED                     | Boolean       | true                                                                        | false            |
    | STORAGE_ALLOWED_LOCATIONS   | List          | gcs://mybucket1/path1/,gcs://mybucket2/path2/                               | []               |
    | STORAGE_BLOCKED_LOCATIONS   | List          | gcs://mybucket1/path1/sensitivedata/,gcs://mybucket2/path2/sensitivedata/   | []               |
    | STORAGE_GCP_SERVICE_ACCOUNT | String        | service-account-id@iam.gserviceaccount.com                 |                  |
    +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
  4. Accordez au compte de service listé comme STORAGE_GCP_SERVICE_ACCOUNT un accès en lecture et en écriture au bucket spécifié dans la commande d'intégration de stockage. Dans cet exemple, accordez au compte de service service-account-id@ un accès en lecture et en écriture au bucket <var>UNLOAD_BUCKET</var>.

  5. Créez une étape Cloud Storage externe qui fait référence à l'intégration que vous avez créée précédemment.

    create or replace stage STAGE_NAME
        url='UNLOAD_BUCKET'
        storage_integration = INTEGRATION_NAME
        file_format = NAMED_FILE_FORMAT;

    Remplacez les éléments suivants :

    • STAGE_NAME : nom de l'objet d'étape Cloud Storage. Exemple : my_ext_unload_stage

Amazon S3

L'exemple suivant montre comment déplacer des données d'une table Snowflake vers un bucket Amazon S3 :

  1. Dans Snowflake, configurez un objet d'intégration de stockage pour permettre à Snowflake d'écrire dans un bucket Amazon S3 référencé lors d'une étape Cloud Storage externe.

    Cette étape implique de configurer les autorisations d'accès au bucket Amazon S3, créer le rôle IAM Amazon Web Services (AWS), et créer une intégration de stockage dans Snowflake avec la commande CREATE STORAGE INTEGRATION :

    create storage integration INTEGRATION_NAME
    type = external_stage
    storage_provider = s3
    enabled = true
    storage_aws_role_arn = 'arn:aws:iam::001234567890:role/myrole'
    storage_allowed_locations = ('BUCKET_NAME')

    Remplacez les éléments suivants :

    • INTEGRATION_NAME : nom de l'intégration de stockage. Exemple : s3_int
    • BUCKET_NAME : chemin d'accès au bucket Amazon S3 dans lequel charger les fichiers. Exemple : s3://unload/files/
  2. Récupérez l'utilisateur IAM AWS à l'aide de la DESCRIBE INTEGRATION commande.

    desc integration INTEGRATION_NAME;

    Le résultat ressemble à ce qui suit :

    +---------------------------+---------------+================================================================================+------------------+
    | property                  | property_type | property_value                                                                 | property_default |
    +---------------------------+---------------+================================================================================+------------------|
    | ENABLED                   | Boolean       | true                                                                           | false            |
    | STORAGE_ALLOWED_LOCATIONS | List          | s3://mybucket1/mypath1/,s3://mybucket2/mypath2/                                | []               |
    | STORAGE_BLOCKED_LOCATIONS | List          | s3://mybucket1/mypath1/sensitivedata/,s3://mybucket2/mypath2/sensitivedata/    | []               |
    | STORAGE_AWS_IAM_USER_ARN  | String        | arn:aws:iam::123456789001:user/abc1-b-self1234                                 |                  |
    | STORAGE_AWS_ROLE_ARN      | String        | arn:aws:iam::001234567890:role/myrole                                          |                  |
    | STORAGE_AWS_EXTERNAL_ID   | String        | MYACCOUNT_SFCRole=                                                   |                  |
    +---------------------------+---------------+================================================================================+------------------+
  3. Créez un rôle disposant du privilège CREATE STAGE pour le schéma et du privilège USAGE pour l'intégration de stockage :

        CREATE role ROLE_NAME;  
        GRANT CREATE STAGE ON SCHEMA public TO ROLE ROLE_NAME;
        GRANT USAGE ON INTEGRATION s3_int TO ROLE ROLE_NAME;

    Remplacez ROLE_NAME par un nom pour le rôle. Exemple : myrole.

  4. Accordez à l'utilisateur IAM AWS les autorisations pour accéder au bucket Amazon S3 et créez une étape externe à l'aide de la commande CREATE STAGE :

        USE SCHEMA mydb.public;
    
        create or replace stage STAGE_NAME
            url='BUCKET_NAME'
            storage_integration = INTEGRATION_NAMEt
            file_format = NAMED_FILE_FORMAT;

    Remplacez les éléments suivants :

    • STAGE_NAME : nom de l'objet d'étape Cloud Storage. Exemple : my_ext_unload_stage

Exporter les données Snowflake

Une fois vos données préparées, vous pouvez les déplacer vers Google Cloud. Utilisez la commande COPY INTO pour copier les données de la table de base de données Snowflake dans un bucket Cloud Storage ou Amazon S3 en spécifiant l'objet d'étape externe, STAGE_NAME.

    copy into @STAGE_NAME/d1
    from TABLE_NAME;

Remplacez TABLE_NAME par le nom de votre table de base de données Snowflake.

À la suite de cette commande, les données de la table sont copiées dans l'objet d'étape, qui est lié au bucket Cloud Storage ou Amazon S3. Le fichier inclut le préfixe d1.

Autres méthodes d'exportation

Pour utiliser Azure Blob Storage pour vos exportations de données, suivez les étapes décrites dans la section Déchargement vers Microsoft Azure. Transférez ensuite les fichiers exportés vers Cloud Storage à l'aide du service de transfert de stockage.