Anleitungen zur Migration von Snowflake zu BigQuery

Dieses Dokument enthält End-to-End-Beispiele und Anleitungen für die verschiedenen Möglichkeiten, eine Migrationspipeline von Snowflake zu BigQuery einzurichten.

Beispiele für Migrationspipelines für Snowflake

Sie können Ihre Daten mit drei verschiedenen Prozessen von Snowflake zu BigQuery migrieren: ELT, ETL oder mit Partnertools.

Extrahieren, Laden und Transformieren

Sie können einen ELT-Prozess (Extrahieren, Laden und Transformieren) mit zwei Methoden einrichten:

  • Pipeline verwenden, um Daten aus Snowflake zu extrahieren und in BigQuery zu laden
  • Daten mit anderen Google Cloud Produkten aus Snowflake extrahieren

Pipeline verwenden, um Daten aus Snowflake zu extrahieren

Verwenden Sie das Tool snowflake2bq, um Daten aus Snowflake zu extrahieren und direkt in Cloud Storage zu laden.

Anschließend können Sie Ihre Daten mit einem der folgenden Tools aus Cloud Storage in BigQuery laden:

Andere Tools zum Extrahieren von Daten aus Snowflake

Sie können auch die folgenden Tools verwenden, um Daten aus Snowflake zu extrahieren:

Andere Tools zum Laden von Daten in BigQuery

Sie können auch die folgenden Tools verwenden, um Daten in BigQuery zu laden:

Extrahieren, Transformieren und Laden

Wenn Sie Ihre Daten transformieren möchten, bevor Sie sie in BigQuery laden, können Sie die folgenden Tools verwenden:

  • Dataflow
  • Cloud Data Fusion
    • Erstellen Sie eine wiederverwendbare Pipeline und transformieren Sie Ihre Daten mit CDAP-Plug-ins.
  • Managed Service for Apache Spark
    • Transformieren Sie Ihre Daten mit Spark SQL oder benutzerdefiniertem Code in einer der unterstützten Spark-Sprachen wie Scala, Java, Python oder R.

Partnertools für die Migration

Es gibt mehrere Anbieter, die sich auf den EDW-Migrationsraum spezialisiert haben. Eine Liste der wichtigsten Partner und ihrer Lösungen finden Sie unter BigQuery-Partner.

Anleitung zum Exportieren von Snowflake-Daten

In der folgenden Anleitung wird ein Beispiel für den Export von Daten von Snowflake nach BigQuery gezeigt, bei dem der COPY INTO <location> Snowflake-Befehl verwendet wird. Eine detaillierte Schritt-für-Schritt-Anleitung, die Codebeispiele enthält, finden Sie unter dem Google Cloud Tool „Snowflake to BigQuery“ der Google Cloud-Dienstleistungen.

Auf Export vorbereiten

Sie können Ihre Snowflake-Daten für einen Export vorbereiten, indem Sie sie mit den folgenden Schritten in einen Cloud Storage- oder Amazon Simple Storage Service-Bucket (Amazon S3) extrahieren:

Cloud Storage

In dieser Anleitung wird die Datei im Format PARQUET vorbereitet.

  1. Verwenden Sie Snowflake-SQL-Anweisungen, um eine benannte Dateiformatspezifikation zu erstellen.

    create or replace file format NAMED_FILE_FORMAT
        type = 'PARQUET'

    Ersetzen Sie NAMED_FILE_FORMAT durch einen Namen für das Dateiformat. Beispiel: my_parquet_unload_format.

  2. Erstellen Sie eine Integration mit dem CREATE STORAGE INTEGRATION Befehl.

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

    Ersetzen Sie Folgendes:

    • INTEGRATION_NAME: ein Name für die Speicherintegration. Beispiel: gcs_int
    • BUCKET_NAME: der Pfad zum Cloud Storage-Bucket. Beispiel: gcs://mybucket/extract/
  3. Rufen Sie das Cloud Storage-Dienstkonto für Snowflake mit dem Befehl DESCRIBE INTEGRATION ab.

    desc storage integration INTEGRATION_NAME;

    Die Ausgabe sieht etwa so aus:

    +-----------------------------+---------------+-----------------------------------------------------------------------------+------------------+
    | 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. Gewähren Sie dem Dienstkonto, das als STORAGE_GCP_SERVICE_ACCOUNT aufgeführt ist, Lese- und Schreibzugriff auf den Bucket, der im Befehl zur Speicherintegration angegeben ist. In diesem Beispiel gewähren Sie dem Dienstkonto service-account-id@ Lese- und Schreibzugriff auf den <var>UNLOAD_BUCKET</var> Bucket.

  5. Erstellen Sie eine externe Cloud Storage-Phase, die auf die zuvor erstellte Integration verweist.

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

    Ersetzen Sie Folgendes:

    • STAGE_NAME: ein Name für das Cloud Storage-Phasenobjekt. Beispiel: my_ext_unload_stage

Amazon S3

Das folgende Beispiel zeigt, wie Sie Daten aus einer Snowflake-Tabelle in einen Amazon S3-Bucket verschieben:

  1. Konfigurieren Sie in Snowflake ein Speicherintegrationsobjekt , damit Snowflake in einen Amazon S3-Bucket schreiben kann, auf den in einer externen Cloud Storage-Phase verwiesen wird.

    Dieser Schritt umfasst die Konfiguration von Zugriffsberechtigungen für den Amazon S3-Bucket, das Erstellen der AWS IAM-Rolle (Amazon Web Services Identity and Access Management), und das Erstellen einer Speicherintegration in Snowflake mit dem CREATE STORAGE INTEGRATION Befehl:

    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')

    Ersetzen Sie Folgendes:

    • INTEGRATION_NAME: ein Name für die Speicherintegration. Beispiel: s3_int
    • BUCKET_NAME: der Pfad zum Amazon S3-Bucket, in den Dateien geladen werden sollen. Beispiel: s3://unload/files/
  2. Rufen Sie den AWS IAM-Nutzer ab mit dem Befehl DESCRIBE INTEGRATION.

    desc integration INTEGRATION_NAME;

    Die Ausgabe sieht etwa so aus:

    +---------------------------+---------------+================================================================================+------------------+
    | 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. Erstellen Sie eine Rolle mit der Berechtigung CREATE STAGE für das Schema und der Berechtigung USAGE für die Speicherintegration:

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

    Ersetzen Sie ROLE_NAME durch einen Namen für die Rolle. Beispiel: myrole.

  4. Gewähren Sie dem AWS IAM-Nutzer Berechtigungen zum Zugriff auf den Amazon S3-Bucket und erstellen Sie eine externe Phase mit dem CREATE STAGE Befehl:

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

    Ersetzen Sie Folgendes:

    • STAGE_NAME: ein Name für das Cloud Storage-Phasenobjekt. Beispiel: my_ext_unload_stage

Snowflake-Daten exportieren

Nachdem Sie Ihre Daten vorbereitet haben, können Sie sie nach verschieben Google Cloud. Verwenden Sie den Befehl COPY INTO, um Daten aus der Snowflake-Datenbanktabelle in einen Cloud Storage- oder Amazon S3-Bucket zu kopieren. Geben Sie dazu das Objekt der externen Phase STAGE_NAME an.

    copy into @STAGE_NAME/d1
    from TABLE_NAME;

Ersetzen Sie TABLE_NAME durch den Namen Ihrer Snowflake-Datenbanktabelle.

Als Ergebnis dieses Befehls werden die Tabellendaten in das Phasenobjekt kopiert, das mit dem Cloud Storage- oder Amazon S3-Bucket verknüpft ist. Die Datei enthält das Präfix d1.

Andere Exportmethoden

Wenn Sie Azure Blob Storage für Ihre Datenexporte verwenden möchten, führen Sie die Schritte unter In Microsoft Azure entladen aus. Übertragen Sie dann die exportierten Dateien mit Storage Transfer Service nach Cloud Storage.