Rilevamento e mapping 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 il mapping dello schema e dei tipi di dati oppure utilizzare il motore di traduzione per definire manualmente lo schema e i tipi di dati.

Rilevamento 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 dell'output di traduzione quando configuri un trasferimento Snowflake.

Il seguente elenco mostra come il connettore Snowflake esegue il mapping dei 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.

Utilizzo dell'output del motore di traduzione per lo schema

Per definire manualmente lo schema (ad esempio, per sostituire determinati attributi dello schema), puoi generare i metadati ed eseguire il motore di traduzione seguendo questi passaggi:

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
      

BigQuery Data Transfer Service per il connettore Snowflake utilizza il motore di traduzione del servizio di migrazione BigQuery per il mapping dello schema durante la migrazione delle tabelle Snowflake in BigQuery. Per completare un trasferimento di dati Snowflake, devi prima generare i metadati per la traduzione, quindi eseguire il motore di traduzione:

  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/.

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.