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
STRINGin BigQuery:TIMESTAMP_TZTIMESTAMP_LTZOBJECTVARIANTARRAY
- I seguenti tipi di dati vengono mappati come
TIMESTAMPin 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:
TIMESTAMP_TZ,TIMESTAMP_LTZ- Per saperne di più, consulta Valutare i dati Snowflake.
I seguenti tipi di dati Parquet non sono supportati, ma possono essere convertiti:
TIMESTAMP_NTZOBJECT,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
- I seguenti tipi di dati Parquet non sono supportati:
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:
- Esegui
dwh-migration-toolper Snowflake. Per saperne di più, consulta Generare metadati per la traduzione e la valutazione. - Carica il file
metadata.zipgenerato in un bucket Cloud Storage. Il filemetadata.zipviene utilizzato come input per il motore di traduzione. Esegui il servizio di traduzione batch, specificando il campo
target_typescomemetadata. 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.