Rilevamento e mappatura dello schema per Snowflake

Questa guida mostra come definire lo schema durante il trasferimento dei dati da Snowflake a BigQuery. Puoi utilizzare BigQuery Data Transfer Service per rilevare automaticamente lo schema e la mappatura dei tipi di dati oppure utilizzare il motore di traduzione per definire manualmente lo schema e i tipi di dati.

Attivare il rilevamento automatico dello schema predefinito

Il connettore Snowflake può rilevare automaticamente lo schema della tabella Snowflake. Per utilizzare il rilevamento automatico dello schema, puoi lasciare vuoto il campo Percorso GCS di output della traduzione quando configuri un trasferimento Snowflake.

Il seguente elenco mostra come il connettore Snowflake mappa i tipi di dati Snowflake in BigQuery:

  • I seguenti tipi di dati vengono mappati come STRING in BigQuery:
    • TIMESTAMP_TZ
    • TIMESTAMP_LTZ
    • OBJECT
    • VARIANT
    • ARRAY
  • I seguenti tipi di dati vengono mappati come TIMESTAMP in BigQuery:
    • TIMESTAMP_NTZ

Tutti gli altri tipi di dati Snowflake vengono mappati direttamente ai tipi equivalenti in BigQuery.

Definire manualmente lo schema utilizzando l'output del motore di traduzione

BigQuery Data Transfer Service per il connettore Snowflake utilizza il motore di traduzione del servizio di migrazione di BigQuery per la mappatura dello schema durante la migrazione delle tabelle Snowflake in BigQuery.

Per definire manualmente lo schema (ad esempio, per sostituire determinati attributi dello schema), puoi generare i metadati, quindi eseguire il motore di traduzione.

Limitazioni

  • I dati vengono estratti da Snowflake nel formato di dati Parquet prima di essere caricati in BigQuery:

    • I seguenti tipi di dati Parquet non sono supportati:
    • I seguenti tipi di dati Parquet non sono supportati, ma possono essere convertiti:

      • TIMESTAMP_NTZ
      • OBJECT, VARIANT, ARRAY

      Utilizza il file YAML di configurazione della conversione dei tipi globali per sostituire il comportamento predefinito di questi tipi di dati quando esegui il motore di traduzione.

      Il file YAML di configurazione potrebbe essere simile al seguente esempio:

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

Autorizzazioni del account di servizio richieste

In un trasferimento Snowflake, un account di servizio viene utilizzato per leggere i dati dall'output del motore di traduzione nel percorso Cloud Storage specificato. Devi concedere al account di servizio le autorizzazioni storage.objects.get e storage.objects.list.

Ti consigliamo che il account di servizio appartenga allo stesso Google Cloud progetto in cui viene creato il set di dati di destinazione e la configurazione del trasferimento. Se il account di servizio si trova in un Google Cloud progetto diverso da quello che ha creato il trasferimento di dati BigQuery, devi abilitare l'autorizzazione account di servizio tra progetti.

Per saperne di più, consulta Ruoli e autorizzazioni IAM di BigQuery.

Definire manualmente la mappatura dello schema

Puoi definire manualmente la mappatura dello schema seguendo questi passaggi:

  1. Esegui dwh-migration-tool per Snowflake. Per saperne di più, consulta Generare metadati per la traduzione e la valutazione.
  2. Carica il file metadata.zip generato in un bucket Cloud Storage. Il file metadata.zip viene utilizzato come input per il motore di traduzione.
  3. Esegui il servizio di traduzione batch, specificando il campo target_types come metadata. Per saperne di più, consulta Tradurre le query SQL con l' API Translation.

    • Di seguito è riportato un esempio di comando per eseguire una traduzione batch per 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
    
    • Puoi controllare lo stato di questo comando nella pagina Traduzione SQL in BigQuery. L'output del job di traduzione batch viene archiviato in gs://translation_target_base_uri/metadata/config/.