Anleitungen für die Migration von Snowflake zu BigQuery

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

Beispiele für Snowflake-Migrationspipelines

Sie können Ihre Daten mit drei verschiedenen Verfahren 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 zum Extrahieren von Daten aus Snowflake und Laden der Daten in BigQuery verwenden
  • Daten aus Snowflake mit anderen Google Cloud Produkten extrahieren

Pipeline zum Extrahieren von Daten aus Snowflake verwenden

Wenn Sie Daten aus Snowflake extrahieren und direkt in Cloud Storage laden möchten, verwenden Sie das Tool snowflake2bq.

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.
  • Dataproc
    • 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

Im folgenden Tutorial wird ein Beispiel für den Export von Daten von Snowflake nach BigQuery gezeigt, bei dem der Befehl COPY INTO <location> von Snowflake verwendet wird. Eine detaillierte Schritt-für-Schritt-Anleitung, die Codebeispiele enthält, finden Sie im Artikel zum 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 Befehl CREATE STORAGE INTEGRATION.

    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 als STORAGE_GCP_SERVICE_ACCOUNT aufgeführten Dienstkonto Lese- und Schreibzugriff auf den im Befehl zur Speicherintegration angegebenen Bucket. In diesem Beispiel gewähren Sie dem Dienstkonto service-account-id@ Lese- und Schreibzugriff auf den Bucket <var>UNLOAD_BUCKET</var>.

  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-Staging-Objekt. 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 und das Erstellen einer Speicherintegration in Snowflake mit dem Befehl 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')

    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 mit dem Befehl DESCRIBE INTEGRATION ab.

    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 Befehl CREATE STAGE:

        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-Staging-Objekt. Beispiel: my_ext_unload_stage.

Snowflake-Daten exportieren

Nachdem Sie Ihre Daten vorbereitet haben, können Sie sie zu Google Cloudverschieben. 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 Staging-Objekt 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, folgen Sie der Anleitung unter In Microsoft Azure entladen. Übertragen Sie dann die exportierten Dateien mit Storage Transfer Service nach Cloud Storage.