Trasferimenti dei rapporti Cloud Storage
Il connettore BigQuery Data Transfer Service per Cloud Storage ti consente di pianificare i caricamenti di dati ricorrenti da Cloud Storage in BigQuery.
Prima di iniziare
Prima di creare un trasferimento di dati Cloud Storage, svolgi i seguenti passaggi:
- Verifica di aver completato tutte le azioni richieste in Attivazione di BigQuery Data Transfer Service.
- Recupera l'URI Cloud Storage.
- Crea un set di dati BigQuery per archiviare i dati.
- Crea la tabella di destinazione per il trasferimento dei dati e specifica la definizione dello schema.
- Se prevedi di specificare una chiave di crittografia gestita dal cliente (CMEK), assicurati che il tuo account di servizio disponga delle autorizzazioni per criptare e decriptare e che tu disponga dell'ID risorsa della chiave Cloud KMS necessario per utilizzare la chiave CMEK. Per informazioni su come CMEK funziona con BigQuery Data Transfer Service, consulta Specificare la chiave di crittografia con i trasferimenti.
Limitazioni
I trasferimenti di dati ricorrenti da Cloud Storage a BigQuery sono soggetti alle seguenti limitazioni:
- Tutti i file corrispondenti ai pattern definiti da un carattere jolly o dai parametri di runtime per il trasferimento dei dati devono condividere lo stesso schema definito per la tabella di destinazione, altrimenti il trasferimento non andrà a buon fine. Anche le modifiche allo schema della tabella tra le esecuzioni causano il fallimento del trasferimento.
- Poiché gli oggetti Cloud Storage possono essere versionati, è importante notare che gli oggetti Cloud Storage archiviati non sono supportati per i trasferimenti di dati di BigQuery. Gli oggetti devono essere pubblicati per essere trasferiti.
- A differenza dei caricamenti singoli di dati da Cloud Storage a BigQuery, per i trasferimenti di dati continui devi creare la tabella di destinazione prima di configurare il trasferimento. Per i file CSV e JSON, devi anche definire in anticipo lo schema della tabella. BigQuery non può creare la tabella nell'ambito del processo di trasferimento dati ricorrente.
- I trasferimenti di dati da Cloud Storage impostano il parametro Preferenza di scrittura su
APPEND
per impostazione predefinita. In questa modalità, un file non modificato può essere caricato in BigQuery solo una volta. Se la proprietàlast modification time
del file viene aggiornata, il file verrà ricaricato. BigQuery Data Transfer Service non garantisce che tutti i file verranno trasferiti o trasferiti una sola volta se i file di Cloud Storage vengono modificati durante un trasferimento di dati. Quando carichi i dati in BigQuery da un bucket Cloud Storage, devi rispettare le seguenti limitazioni:
Se la posizione del set di dati è impostata su un valore diverso dall'area geografica multipla
US
, il bucket Cloud Storage deve trovarsi nella stessa regione o essere contenuto nella stessa area geografica multipla del set di dati.BigQuery non garantisce la coerenza dei dati per le origini dati esterne. Le modifiche ai dati sottostanti durante l'esecuzione di una query possono comportare un comportamento imprevisto.
BigQuery non supporta il controllo delle versioni degli oggetti Cloud Storage. Se includi un numero di generazione nell'URI Cloud Storage, il job di caricamento non va a buon fine.
A seconda del formato dei dati dell'origine Cloud Storage, potrebbero esserci limitazioni aggiuntive. Per ulteriori informazioni, vedi:
Il bucket Cloud Storage deve trovarsi in una posizione compatibile con la regione o la regione multipla del set di dati di destinazione in BigQuery. Questo fenomeno è noto come colocation. Per maggiori dettagli, consulta le Località dei dati per il trasferimento di Cloud Storage.
Intervalli minimi
- I file di origine vengono acquisiti immediatamente per il trasferimento dei dati, senza limiti di tempo minimi.
- L'intervallo di tempo minimo tra i trasferimenti di dati ricorrenti è di 15 minuti. L'intervallo predefinito per un trasferimento dati ricorrente è ogni 24 ore.
Autorizzazioni obbligatorie
Quando carichi i dati in BigQuery, hai bisogno di autorizzazioni che ti consentano di caricare i dati in tabelle e partizioni BigQuery nuove o esistenti. Se carichi i dati da Cloud Storage, devi anche avere accesso al bucket che li contiene. Assicurati di disporre delle seguenti autorizzazioni obbligatorie:
BigQuery: assicurati che la persona o l'account di servizio che crea il trasferimento di dati disponga delle seguenti autorizzazioni in BigQuery:
- Autorizzazioni
bigquery.transfers.update
per creare il trasferimento di dati - Entrambe le autorizzazioni
bigquery.datasets.get
ebigquery.datasets.update
sul set di dati di destinazione
Il ruolo IAM predefinito
bigquery.admin
include le autorizzazionibigquery.transfers.update
,bigquery.datasets.update
ebigquery.datasets.get
. Per ulteriori informazioni sui ruoli IAM in BigQuery Data Transfer Service, consulta Controllo dell'accesso.- Autorizzazioni
Cloud Storage: sono richieste autorizzazioni
storage.objects.get
sul singolo bucket o versioni successive. Se utilizzi un URI jolly, devi disporre anche delle autorizzazionistorage.objects.list
. Se vuoi eliminare i file di origine dopo ogni trasferimento riuscito, devi disporre anche delle autorizzazionistorage.objects.delete
. Il ruolo IAM predefinitostorage.objectAdmin
include tutte queste autorizzazioni.
Configurare un trasferimento di Cloud Storage
Per creare un trasferimento di dati di Cloud Storage in BigQuery Data Transfer Service:
Console
Vai alla pagina Trasferimenti dati nella console Google Cloud.
Fai clic su
Crea trasferimento.Nella sezione Tipo di origine, scegli Google Cloud Storage per Origine.
Nella sezione Nome configurazione di trasferimento, in Nome visualizzato, inserisci un nome per il trasferimento dei dati, ad esempio
My Transfer
. Il nome del trasferimento può essere qualsiasi valore che ti consenta di identificare il trasferimento se devi modificarlo in un secondo momento.Nella sezione Opzioni di programmazione:
Seleziona una Frequenza di ripetizione. Se selezioni Ore, Giorni, Settimane o Mesi, devi anche specificare una frequenza. Puoi anche selezionare Personalizzata per specificare una frequenza di ripetizione personalizzata. Se selezioni On demand, questo trasferimento di dati viene eseguito quando attivi manualmente il trasferimento.
Se applicabile, seleziona Inizia ora o Inizia all'ora impostata e fornisci una data di inizio e un'ora di esecuzione.
Nella sezione Impostazioni di destinazione, per Set di dati di destinazione, scegli il set di dati che hai creato per archiviare i dati.
Nella sezione Dettagli dell'origine dati:
- In Tabella di destinazione, inserisci il nome della tabella di destinazione. La tabella di destinazione deve rispettare le regole di denominazione delle tabelle. I nomi delle tabelle di destinazione supportano anche i parametri.
- In URI Cloud Storage, inserisci URI Cloud Storage. I caratteri jolly e i parametri sono supportati.
- Per Preferenza di scrittura, scegli:
- APPEND per accodare in modo incrementale i nuovi dati alla tabella di destinazione esistente. APPEND è il valore predefinito per Preferenza scrittura.
- MIRROR per sovrascrivere i dati nella tabella di destinazione durante ogni esecuzione del trasferimento dati.
Per saperne di più su come BigQuery Data Transfer Service importa i dati utilizzando APPEND o MIRROR, consulta Importazione dei dati per i trasferimenti di Cloud Storage. Per ulteriori informazioni sul campo
writeDisposition
, consultaJobConfigurationLoad
.- Per Elimina file di origine dopo il trasferimento, seleziona la casella se vuoi eliminare i file di origine dopo ogni trasferimento di dati riuscito. L'eliminazione dei job avviene secondo il criterio del "best effort". I job di eliminazione non riprovano se il primo tentativo di eliminazione dei file di origine non va a buon fine.
Nella sezione Opzioni di trasferimento:
- In Tutti i formati:
- In Numero di errori consentiti, inserisci il numero massimo di record non validi che BigQuery può ignorare durante l'esecuzione del job. Se il numero di record non validi supera questo valore, nel risultato del job viene restituito un errore "non valido" e il job non va a buon fine. Il valore predefinito è
0
. - (Facoltativo) Per Tipi di destinazione decimali, inserisci un
elenco separato da virgole di possibili tipi di dati SQL in cui i
valori decimali di origine potrebbero essere convertiti. Il tipo di dato SQL selezionato per la conversione dipende dalle seguenti condizioni:
- Il tipo di dati selezionato per la conversione sarà il primo tipo di dati nel seguente elenco che supporta la precisione e la scala dei dati di origine, in questo ordine: NUMERIC, BIGNUMERIC e STRING.
- Se nessuno dei tipi di dati elencati supporta la precisione e la scala, viene selezionato il tipo di dati che supporta l'intervallo più ampio nell'elenco specificato. Se un valore supera l'intervallo supportato durante la lettura dei dati di origine, verrà generato un errore.
- Il tipo di dati STRING supporta tutti i valori di precisione e scala.
- Se questo campo viene lasciato vuoto, il tipo di dati sarà "NUMERIC,STRING" per ORC e "NUMERIC" per gli altri formati file.
- Questo campo non può contenere tipi di dati duplicati.
- L'ordine dei tipi di dati elencati in questo campo viene ignorato.
- In Numero di errori consentiti, inserisci il numero massimo di record non validi che BigQuery può ignorare durante l'esecuzione del job. Se il numero di record non validi supera questo valore, nel risultato del job viene restituito un errore "non valido" e il job non va a buon fine. Il valore predefinito è
- In JSON, CSV:
- Per Ignora valori sconosciuti, seleziona la casella se vuoi che il trasferimento dei dati elimini i dati che non corrispondono allo schema della tabella di destinazione.
- In AVRO:
- Per Utilizza tipi logici Avro, seleziona la casella se vuoi che il trasferimento dei dati converta i tipi logici Avro nei tipi di dati BigQuery corrispondenti. Il comportamento predefinito è ignorare l'attributo
logicalType
per la maggior parte dei tipi e utilizzare invece il tipo Avro sottostante.
- Per Utilizza tipi logici Avro, seleziona la casella se vuoi che il trasferimento dei dati converta i tipi logici Avro nei tipi di dati BigQuery corrispondenti. Il comportamento predefinito è ignorare l'attributo
In CSV:
- In Delimitatore di campo, inserisci il carattere che separa i campi. Il valore predefinito è una virgola.
- In Carattere virgolette, inserisci il carattere utilizzato per citare le sezioni di dati in un file CSV. Il valore predefinito è una quota doppia (
"
). - In Righe di intestazione da saltare, inserisci il numero di righe di intestazione
nei file di origine se non vuoi importarle. Il valore predefinito è
0
. - Per Consenti caratteri di fine riga con virgolette, seleziona la casella se vuoi consentire i caratteri di fine riga all'interno dei campi tra virgolette.
- Per Consenti righe frastagliate, seleziona la casella se vuoi consentire il trasferimento dei dati delle righe con colonne
NULLABLE
mancanti.
- In Tutti i formati:
Nel menu Account di servizio, seleziona un account di servizio tra quelli associati al tuo progetto Google Cloud. Puoi associare un account di servizio al trasferimento dei dati anziché utilizzare le credenziali utente. Per ulteriori informazioni sull'utilizzo degli account di servizio con i trasferimenti di dati, consulta Utilizzare gli account di servizio.
- Se hai eseguito l'accesso con un'identità federata, è necessario un account di servizio per creare un trasferimento di dati. Se hai eseguito accesso con un Account Google, un account di servizio per il trasferimento dei dati è facoltativo.
- L'account di servizio deve disporre delle autorizzazioni richieste sia per BigQuery sia per Cloud Storage.
(Facoltativo) Nella sezione Opzioni di notifica:
- Fai clic sul pulsante di attivazione/disattivazione per attivare le notifiche via email. Quando attivi questa opzione, il proprietario della configurazione del trasferimento dati riceve una notifica via email quando un'esecuzione del trasferimento non va a buon fine.
- In Seleziona un argomento Pub/Sub, scegli il nome dell'argomento o fai clic su Crea un argomento. Questa opzione configura le notifiche di esecuzione di Pub/Sub per il trasferimento.
(Facoltativo) Nella sezione Opzioni avanzate:
- Se utilizzi le chiavi CMEK, seleziona Chiave gestita dal cliente. Viene visualizzato un elenco di CMEK disponibili tra cui scegliere.
Per informazioni sul funzionamento delle CMEK con BigQuery Data Transfer Service, consulta Specificare la chiave di crittografia con i trasferimenti.
Fai clic su Salva.
bq
Inserisci il comando bq mk
e specifica il flag di creazione del trasferimento:
--transfer_config
. Sono obbligatori anche i seguenti flag:
--data_source
--display_name
--target_dataset
--params
Flag facoltativi:
--destination_kms_key
: specifica l'ID risorsa chiave per la chiave Cloud KMS se utilizzi una chiave di crittografia gestita dal cliente (CMEK) per questo trasferimento di dati. Per informazioni sul funzionamento delle chiavi CMEK con BigQuery Data Transfer Service, consulta Specificare la chiave di crittografia con i trasferimenti.--service_account_name
: specifica un account di servizio da utilizzare per l'autenticazione del trasferimento di Cloud Storage anziché il tuo account utente.
bq mk \ --transfer_config \ --project_id=PROJECT_ID \ --data_source=DATA_SOURCE \ --display_name=NAME \ --target_dataset=DATASET \ --destination_kms_key="DESTINATION_KEY" \ --params='PARAMETERS' \ --service_account_name=SERVICE_ACCOUNT_NAME
Dove:
- PROJECT_ID è l'ID progetto. Se non viene fornito
--project_id
per specificare un determinato progetto, viene utilizzato il progetto predefinito. - DATA_SOURCE è l'origine dati, ad esempio
google_cloud_storage
. - NAME è il nome visualizzato della configurazione di trasferimento dei dati. Il nome del trasferimento può essere qualsiasi valore che ti consenta di identificare il trasferimento se devi modificarlo in un secondo momento.
- DATASET è il set di dati di destinazione per la configurazione del trasferimento.
- DESTINATION_KEY: l'ID risorsa chiave Cloud KMS, ad esempio
projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name
. - PARAMETERS contiene i parametri per la configurazione del trasferimento creata in formato JSON. Ad esempio:
--params='{"param":"param_value"}'
.destination_table_name_template
: il nome della tabella BigQuery di destinazione.data_path_template
: l'URI Cloud Storage contenente i file da trasferire, che può includere un carattere jolly.write_disposition
: determina se i file corrispondenti vengono aggiunti alla tabella di destinazione o se ne viene eseguito il mirroring per intero. I valori supportati sonoAPPEND
oMIRROR
. Per informazioni su come BigQuery Data Transfer Service aggiunge o esegue il mirroring dei dati nei trasferimenti di Cloud Storage, consulta Importazione dei dati per i trasferimenti di Cloud Storage.file_format
: il formato dei file che vuoi trasferire. Il formato può essereCSV
,JSON
,AVRO
,PARQUET
oORC
. Il valore predefinito èCSV
.max_bad_records
: per qualsiasi valorefile_format
, il numero massimo di record errati che possono essere ignorati. Il valore predefinito è0
.decimal_target_types
: per qualsiasi valorefile_format
, un elenco di tipi di dati SQL possibili separati da virgole in cui è possibile convertire i valori decimali di origine. Se questo campo non viene fornito, il tipo di dati predefinito è"NUMERIC,STRING"
perORC
e"NUMERIC"
per gli altri formati di file.ignore_unknown_values
: per qualsiasi valorefile_format
, impostato suTRUE
per accettare righe contenenti valori che non corrispondono allo schema. Per ulteriori informazioni, consulta i dettagli del campoignoreUnknownvalues
nella tabella di riferimentoJobConfigurationLoad
.use_avro_logical_types
: per i valoriAVRO
file_format
, imposta suTRUE
per interpretare i tipi logici nei tipi corrispondenti (per esempio,TIMESTAMP
), anziché utilizzare solo i tipi non elaborati (per esempio,INTEGER
).parquet_enum_as_string
: per i valoriPARQUET
file_format
, imposta suTRUE
per dedurre il tipo logicoPARQUET
ENUM
comeSTRING
anziché il valore predefinitoBYTES
.parquet_enable_list_inference
: per i valoriPARQUET
file_format
, imposta suTRUE
per utilizzare l'inferenza dello schema specificamente per il tipo logicoPARQUET
LIST
.reference_file_schema_uri
: un percorso URI a un file di riferimento con lo schema del lettore.field_delimiter
: per i valoriCSV
file_format
, un carattere che separa i campi. Il valore predefinito è una virgola.quote
: per i valoriCSV
file_format
, un carattere utilizzato per citare le sezioni di dati in un file CSV. Il valore predefinito è una doppia virgolette ("
).skip_leading_rows
: per i valoriCSV
file_format
, indica il numero di righe di intestazione iniziali che non vuoi importare. Il valore predefinito è 0.allow_quoted_newlines
: per i valoriCSV
file_format
, impostaTRUE
per consentire i ritorni a capo all'interno dei campi tra virgolette.allow_jagged_rows
: per i valoriCSV
file_format
, imposta suTRUE
per accettare le righe che non hanno le colonne finali facoltative. I valori mancanti vengono compilati conNULL
.preserve_ascii_control_characters
: per i valoriCSV
file_format
, impostato suTRUE
per preservare eventuali caratteri di controllo ASCII incorporati.encoding
: specifica il tipo di codificaCSV
. I valori supportati sonoUTF8
,ISO_8859_1
,UTF16BE
,UTF16LE
,UTF32BE
eUTF32LE
.delete_source_files
: impostato suTRUE
per eliminare i file di origine dopo ogni trasferimento riuscito. I job di eliminazione non vengono eseguiti di nuovo se il primo tentativo di eliminare il file di origine non va a buon fine. Il valore predefinito èFALSE
.
- SERVICE_ACCOUNT_NAME è il nome dell'account di servizio utilizzato per autenticare il trasferimento. L'account di servizio deve essere di proprietà dello stesso
project_id
utilizzato per creare il trasferimento e deve disporre di tutte le autorizzazioni richieste.
Ad esempio, il seguente comando crea un trasferimento di dati Cloud Storage denominato My Transfer
utilizzando un valore data_path_template
di gs://mybucket/myfile/*.csv
, il set di dati di destinazione mydataset
e file_format
CSV
. Questo esempio include valori non predefiniti per i parametri facoltativi associati al file_format CSV
.
Il trasferimento dei dati viene creato nel progetto predefinito:
bq mk --transfer_config \
--target_dataset=mydataset \
--project_id=myProject \
--display_name='My Transfer' \
--destination_kms_key=projects/myproject/locations/mylocation/keyRings/myRing/cryptoKeys/myKey \
--params='{"data_path_template":"gs://mybucket/myfile/*.csv",
"destination_table_name_template":"MyTable",
"file_format":"CSV",
"max_bad_records":"1",
"ignore_unknown_values":"true",
"field_delimiter":"|",
"quote":";",
"skip_leading_rows":"1",
"allow_quoted_newlines":"true",
"allow_jagged_rows":"false",
"delete_source_files":"true"}' \
--data_source=google_cloud_storage \
--service_account_name=abcdef-test-sa@abcdef-test.iam.gserviceaccount.com projects/862514376110/locations/us/transferConfigs/ 5dd12f26-0000-262f-bc38-089e0820fe38
Dopo aver eseguito il comando, viene visualizzato un messaggio simile al seguente:
[URL omitted] Please copy and paste the above URL into your web browser and
follow the instructions to retrieve an authentication code.
Segui le istruzioni e incolla il codice di autenticazione sulla riga di comando.
API
Utilizza il metodo projects.locations.transferConfigs.create
e fornisci un'istanza della risorsa TransferConfig
.
Java
Prima di provare questo esempio, segui le istruzioni di configurazione Java riportate nella guida rapida all'utilizzo di BigQuery con le librerie client. Per ulteriori informazioni, consulta la documentazione di riferimento dell'API BigQuery Java.
Per autenticarti in BigQuery, configura le Credenziali predefinite dell'applicazione. Per saperne di più, consulta Configurare l'autenticazione per le librerie client.
Specificare la chiave di crittografia con i trasferimenti
Puoi specificare le chiavi di crittografia gestite dal cliente (CMEK) per criptare i dati per un'esecuzione del trasferimento. Puoi utilizzare una chiave CMEK per supportare i trasferimenti da Cloud Storage.Quando specifichi una CMEK con un trasferimento, BigQuery Data Transfer Service applica la CMEK a qualsiasi cache intermedia su disco dei dati importati in modo che l'intero flusso di lavoro di trasferimento dei dati sia conforme alla CMEK.
Non puoi aggiornare un trasferimento esistente per aggiungere un CMEK se il trasferimento non è stato creato inizialmente con un CMEK. Ad esempio, non puoi modificare una tabella di destinazione che era inizialmente criptata per impostazione predefinita in modo che venga criptata con CMEK. Al contrario, non puoi nemmeno modificare una tabella di destinazione con crittografia CMEK per avere un tipo di crittografia diverso.
Puoi aggiornare un CMEK per un trasferimento se la configurazione del trasferimento è stata creata inizialmente con una crittografia CMEK. Quando aggiorni un CMEK per una configurazione di trasferimento, BigQuery Data Transfer Service lo propaga alle tabelle di destinazione alla successiva esecuzione del trasferimento, dove sostituisce eventuali CMEK obsoleti con il nuovo CMEK durante l'esecuzione del trasferimento. Per ulteriori informazioni, vedi Aggiornare un trasferimento.
Puoi anche utilizzare le chiavi predefinite del progetto. Quando specifichi una chiave predefinita del progetto con un trasferimento, BigQuery Data Transfer Service la utilizza come chiave predefinita per tutte le nuove configurazioni di trasferimento.
Attivare manualmente un trasferimento
Oltre ai trasferimenti di dati pianificati automaticamente da Cloud Storage, puoi attivare manualmente un trasferimento per caricare file di dati aggiuntivi.
Se la configurazione del trasferimento è parametrizzata in fase di esecuzione, dovrai specificare un intervallo di date per le quali verranno avviati trasferimenti aggiuntivi.
Per attivare un trasferimento di dati:
Console
Vai alla pagina BigQuery nella console Google Cloud.
Fai clic su
Trasferimenti dati.Seleziona il trasferimento dati dall'elenco.
Fai clic su Esegui trasferimento ora o Pianifica il backfill (per le configurazioni di trasferimento parametroizzate in fase di esecuzione).
Se hai fatto clic su Esegui trasferimento ora, seleziona Esegui trasferimento una tantum o Esegui per data specifica, a seconda dei casi. Se hai selezionato Esegui per una data specifica, seleziona una data e un'ora specifiche:
Se hai fatto clic su Pianifica backfill, seleziona Esegui trasferimento una tantum o Esegui per un intervallo di date, a seconda dei casi. Se hai selezionato Esegui per un intervallo di date, seleziona una data e un'ora di inizio e di fine:
Fai clic su Ok.
bq
Inserisci il comando bq mk
e specifica il flag --transfer_run
. Puoi utilizzare il flag --run_time
o i flag --start_time
e --end_time
.
bq mk \ --transfer_run \ --start_time='START_TIME' \ --end_time='END_TIME' \ RESOURCE_NAME
bq mk \ --transfer_run \ --run_time='RUN_TIME' \ RESOURCE_NAME
Dove:
START_TIME e END_TIME sono timestamp che terminano con
Z
o contengono un offset del fuso orario valido. Ad esempio:2017-08-19T12:11:35.00Z
2017-05-25T00:00:00+00:00
RUN_TIME è un timestamp che specifica l'ora per pianificare l'esecuzione del trasferimento dei dati. Se vuoi eseguire un trasferimento una tantum per il momento corrente, puoi utilizzare il flag
--run_time
.RESOURCE_NAME è il nome della risorsa del trasferimento (chiamato anche configurazione di trasferimento), ad esempio
projects/myproject/locations/us/transferConfigs/1234a123-1234-1a23-1be9-12ab3c456de7
. Se non conosci il nome della risorsa del trasferimento, esegui il comandobq ls --transfer_config --transfer_location=LOCATION
per trovarlo.
API
Utilizza il metodo projects.locations.transferConfigs.startManualRuns
e fornisci la risorsa di configurazione del trasferimento utilizzando il parametro parent
.
Passaggi successivi
- Scopri di più sui parametri di runtime nei trasferimenti dei report Cloud Storage.
- Scopri di più su BigQuery Data Transfer Service.