Trasferimenti dei rapporti di Cloud Storage
BigQuery Data Transfer Service per Cloud Storage consente di pianificare caricamenti di dati ricorrenti da Cloud Storage a BigQuery.
Prima di iniziare
Prima di creare un trasferimento Cloud Storage, segui questi passaggi:
- Verifica di aver completato tutte le azioni richieste in Abilitazione di BigQuery Data Transfer Service.
- Recupera l'URI Cloud Storage.
- Crea un set di dati BigQuery per archiviare i tuoi dati.
- Crea la tabella di destinazione per il trasferimento 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 di avere l'ID risorsa della chiave Cloud KMS necessario per utilizzare CMEK. Per informazioni su come funziona CMEK con BigQuery Data Transfer Service, vedi Specificare la chiave di crittografia con i trasferimenti.
Limitazioni
I trasferimenti ricorrenti da Cloud Storage a BigQuery sono soggetti alle seguenti limitazioni:
- Tutti i file che corrispondono ai pattern definiti da un carattere jolly o da parametri di runtime per il trasferimento 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 comportano un errore del trasferimento.
- Poiché è possibile eseguire il controllo delle versioni degli oggetti Cloud Storage, è importante notare che gli oggetti Cloud Storage archiviati non sono supportati per i trasferimenti BigQuery. Gli oggetti devono essere attivi per poter essere trasferiti.
- A differenza dei carichi singoli di dati da Cloud Storage a BigQuery, per i trasferimenti in corso 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 ricorrente di trasferimento dei dati.
- I trasferimenti 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 una sola 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 solo una volta se i file di Cloud Storage vengono toccati durante il trasferimento. Quando carichi dati in BigQuery da un bucket Cloud Storage, devi rispettare le seguenti limitazioni:
Se la località del set di dati è impostata su un valore diverso da
US
, il bucket Cloud Storage deve trovarsi nella stessa regione o all'interno della stessa multiregione 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 causare comportamenti imprevisti.
BigQuery non supporta il controllo delle versioni degli oggetti di 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 di origine Cloud Storage, potrebbero essere previste limitazioni aggiuntive. Per ulteriori informazioni, vedi:
Il bucket Cloud Storage deve trovarsi in una località compatibile con la regione o con più regioni del set di dati di destinazione in BigQuery. Questa operazione è nota come colocation. Per maggiori dettagli, consulta Località dei dati di Cloud Storage.
Intervalli minimi
- I file di origine vengono immediatamente prelevati per il trasferimento, senza una durata minima dei file.
- L'intervallo minimo tra trasferimenti ricorrenti è di 15 minuti. L'intervallo predefinito per un trasferimento ricorrente è ogni 24 ore.
Autorizzazioni obbligatorie
Quando carichi dati in BigQuery, devi disporre di autorizzazioni che consentano di caricare i dati in tabelle e partizioni BigQuery nuove o esistenti. Se carichi i dati da Cloud Storage, devi avere accesso anche al bucket che contiene i tuoi dati. Assicurati di disporre delle seguenti autorizzazioni richieste:
BigQuery: assicurati che la persona o l'account di servizio che crea il trasferimento disponga delle seguenti autorizzazioni in BigQuery:
bigquery.transfers.update
autorizzazioni per creare il trasferimento- Sia le autorizzazioni
bigquery.datasets.get
chebigquery.datasets.update
per il 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.Cloud Storage: sono richieste autorizzazioni
storage.objects.get
per singolo bucket o superiore. Se utilizzi un caratteri jolly URI, devi disporre anche delle autorizzazionistorage.objects.list
. Se vuoi eliminare i file di origine dopo ogni trasferimento riuscito, devi avere anche le autorizzazionistorage.objects.delete
. Il ruolo IAM predefinito distorage.objectAdmin
include tutte queste autorizzazioni.
Configura un trasferimento Cloud Storage
Per creare un trasferimento Cloud Storage in BigQuery Data Transfer Service:
Console
Vai alla pagina BigQuery nella console Google Cloud.
Fai clic su
Trasferimenti di dati.Fai clic su
Crea trasferimento.Nella sezione Tipo di origine, per Origine, scegli Google Cloud Storage.
Nella sezione Nome configurazione di trasferimento, per Nome visualizzato, inserisci un nome per il trasferimento, 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 pianificazione:
Seleziona una Frequenza di ripetizione. Se selezioni Ore, Giorni, Settimane o Mesi, devi specificare anche una frequenza. Puoi anche selezionare Personalizzato per specificare una frequenza di ripetizione personalizzata. Se selezioni On demand, questo trasferimento viene eseguito quando attivi manualmente il trasferimento.
Se applicabile, seleziona Inizia ora o Inizia all'ora impostata e specifica una data di inizio e un'ora di esecuzione.
Nella sezione Impostazioni destinazione, per Set di dati di destinazione, scegli il set di dati che hai creato per archiviare i dati.
Nella sezione Dettagli origine dati:
- In Tabella di destinazione, inserisci il nome della tabella. La tabella di destinazione deve seguire le regole di denominazione delle tabelle. I nomi delle tabelle di destinazione supportano anche i parametri.
- In URI Cloud Storage, inserisci l'URI Cloud Storage. I caratteri jolly e i parametri sono supportati.
- Per Preferenza di scrittura, scegli:
- APPEND per aggiungere in modo incrementale nuovi dati alla tabella di destinazione esistente. APPEND è il valore predefinito per Preferenza di scrittura.
- MIRROR per sovrascrivere i dati nella tabella di destinazione durante ogni esecuzione del trasferimento.
Per ulteriori informazioni su come BigQuery Data Transfer Service importa i dati utilizzando APPEND o MIRROR, consulta Importazione dati per i trasferimenti di Cloud Storage. Per ulteriori informazioni sul campo
writeDisposition
, consultaJobConfigurationLoad
.- In Elimina i file di origine dopo il trasferimento, seleziona la casella se vuoi eliminare i file di origine dopo ogni trasferimento riuscito. L'eliminazione dei job è la soluzione migliore. I job di eliminazione non riprovano se il primo tentativo di eliminare i 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 riesce. Il valore predefinito è
0
. - (Facoltativo) In Tipi di target decimali, inserisci un elenco separato da virgole di possibili tipi di dati SQL in cui è possibile convertire i valori decimali di origine. Il tipo di dati SQL selezionato per la conversione dipende dalle seguenti condizioni:
- Il tipo di dati selezionato per la conversione sarà il primo tipo di dati nell'elenco seguente a supportare la precisione e la scalabilità dei dati di origine, in questo ordine: NUMERIC, BIGNUMERIC e STRING.
- Se nessuno dei tipi di dati elencati supporta la precisione e la scalabilità, 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à visualizzato 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 predefinito 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 riesce. Il valore predefinito è
- In JSON, CSV:
- In Ignora valori sconosciuti, seleziona la casella se vuoi che il trasferimento elimini dati che non corrispondono allo schema della tabella di destinazione.
- In AVRO:
- In Utilizza tipi logici Avro, seleziona la casella se vuoi che il trasferimento 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.
- In Utilizza tipi logici Avro, seleziona la casella se vuoi che il trasferimento 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 citazione, inserisci il carattere utilizzato per citare le sezioni di dati in un file CSV. Il valore predefinito è le virgolette doppie (
"
). - 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
. - In corrispondenza di Consenti a capo delle righe tra virgolette, seleziona la casella se vuoi consentire i ritorni a capo nei campi tra virgolette.
- In Consenti righe interrotte, seleziona la casella se vuoi consentire il trasferimento di 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, anziché utilizzare le tue credenziali utente. Per ulteriori informazioni sull'utilizzo degli account di servizio con 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. Se hai eseguito l'accesso con un Account Google, un account di servizio per il trasferimento è 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 abilitare le notifiche via email. Se abiliti questa opzione, il proprietario della configurazione di trasferimento riceve una notifica via email se un 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 dell'esecuzione di Pub/Sub per il trasferimento.
(Facoltativo) Nella sezione Opzioni avanzate:
- Se utilizzi CMEK, seleziona Chiave gestita dal cliente. Viene visualizzato un elenco di CMEK disponibili.
Per informazioni su come funzionano le CMEK con BigQuery Data Transfer Service, vedi Specificare la chiave di crittografia con i trasferimenti.
Fai clic su Salva.
bq
Inserisci il comando bq mk
e fornisci il flag di creazione del trasferimento --transfer_config
. Sono richiesti anche i seguenti flag:
--data_source
--display_name
--target_dataset
--params
Flag facoltativi:
--destination_kms_key
: specifica l'ID risorsa della chiave per la chiave Cloud KMS se utilizzi una chiave di crittografia gestita dal cliente (CMEK) per questo trasferimento. Per informazioni su come funzionano le CMEK con BigQuery Data Transfer Service, vedi Specificare la chiave di crittografia con i trasferimenti.--service_account_name
: specifica un account di servizio da utilizzare per l'autenticazione di 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
--project_id
non viene fornito per specificare un progetto specifico, viene utilizzato il progetto predefinito. - DATA_SOURCE è l'origine dati, ad esempio
google_cloud_storage
. - NAME è il nome visualizzato della configurazione di trasferimento. 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 di trasferimento.
- DESTINATION_KEY: l'ID risorsa della chiave Cloud KMS, ad esempio
projects/project_name/locations/us/keyRings/key_ring_name/cryptoKeys/key_name
. - PARAMETERS contiene i parametri per la configurazione di 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 che contiene i file da trasferire, che può includere un carattere jolly.write_disposition
: determina se i file corrispondenti vengono aggiunti alla tabella di destinazione o sottoposti a mirroring interamente. 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 dati per i trasferimenti di Cloud Storage.file_format
: il formato dei file che vuoi trasferire. Può essereCSV
,JSON
,AVRO
,PARQUET
oORC
. Il valore predefinito èCSV
.max_bad_records
: per qualsiasi valorefile_format
, il numero massimo di record non validi che possono essere ignorati. Il valore predefinito è0
.decimal_target_types
: per qualsiasi valorefile_format
, un elenco separato da virgole di possibili tipi di dati SQL in cui è possibile convertire i valori decimali di origine. Se questo campo non viene fornito, il tipo di dati predefinito sarà"NUMERIC,STRING"
perORC
e"NUMERIC"
per gli altri formati file.ignore_unknown_values
: per qualsiasi valorefile_format
, impostaTRUE
per accettare righe che contengono 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
, impostalo suTRUE
per interpretare i tipi logici nei tipi corrispondenti (ad esempio,TIMESTAMP
), anziché utilizzarne solo i tipi non elaborati (ad esempioINTEGER
).parquet_enum_as_string
: per i valoriPARQUET
file_format
, impostato suTRUE
per dedurrePARQUET
il tipo logicoENUM
comeSTRING
anziché il valore predefinitoBYTES
.parquet_enable_list_inference
: per i valoriPARQUET
file_format
, imposta suTRUE
per utilizzare l'inferenza dello schema specifica per il tipo logicoPARQUET
LIST
.reference_file_schema_uri
: un percorso URI a un file di riferimento con lo schema del lettore.field_delimiter
: perCSV
valorifile_format
, un carattere che separa i campi. Il valore predefinito è una virgola.quote
: perCSV
valorifile_format
, un carattere utilizzato per citare le sezioni di dati in un file CSV. Il valore predefinito è le 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
: perCSV
valorifile_format
, impostato suTRUE
per consentire gli a capo nei campi tra virgolette.allow_jagged_rows
: perCSV
valorifile_format
, impostato suTRUE
per accettare righe in cui mancano le colonne finali facoltative. I valori mancanti sono compilati conNULL
.preserve_ascii_control_characters
: per i valoriCSV
file_format
, imposta suTRUE
per mantenere 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
: imposta suTRUE
per eliminare i file di origine dopo ogni trasferimento riuscito. I job di eliminazione non vengono eseguiti nuovamente 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 avere tutte le autorizzazioni richieste.
Ad esempio, il seguente comando crea un trasferimento Cloud Storage denominato My Transfer
utilizzando un valore data_path_template
pari a gs://mybucket/myfile/*.csv
, set di dati di destinazione mydataset
e file_format
CSV
. Questo esempio include valori non predefiniti per i parametri facoltativi associati a file_format CSV
.
Il trasferimento viene creato nel progetto predefinito:
bq mk --transfer_config \
--target_dataset=mydataset \
--display_name='My Transfer' \
--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
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 nella 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 di Java disponibili nella guida rapida di BigQuery sull'utilizzo delle librerie client. Per saperne di più, consulta la documentazione di riferimento dell'API BigQuery Java.
Per eseguire l'autenticazione in BigQuery, configura Credenziali predefinite dell'applicazione. Per maggiori informazioni, consulta Configurare l'autenticazione per le librerie client.
Specifica la chiave di crittografia con i trasferimenti
Puoi specificare chiavi di crittografia gestite dal cliente (CMEK) per criptare i dati per un'esecuzione di trasferimento. Puoi utilizzare una 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 su disco intermedia di dati importati, in modo che l'intero flusso di lavoro di trasferimento dei dati sia conforme a CMEK.
Non puoi aggiornare un trasferimento esistente per aggiungere una CMEK se il trasferimento non è stato creato originariamente con una CMEK. Ad esempio, non puoi modificare una tabella di destinazione che in origine era criptata per impostazione predefinita per ora essere criptata con CMEK. Al contrario, non puoi modificare una tabella di destinazione criptata con CMEK in modo che abbia un tipo di crittografia diverso.
Puoi aggiornare una CMEK per un trasferimento se la configurazione di trasferimento è stata creata originariamente con una crittografia CMEK. Quando aggiorni una CMEK per una configurazione di trasferimento, BigQuery Data Transfer Service propaga la CMEK alle tabelle di destinazione all'esecuzione successiva del trasferimento, in cui BigQuery Data Transfer Service sostituisce eventuali CMEK obsolete con la nuova 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 utilizza la chiave predefinita del progetto come chiave predefinita per qualsiasi nuova configurazione di trasferimento.
Attivare manualmente un trasferimento
Oltre ai trasferimenti pianificati automaticamente da Cloud Storage, puoi attivare manualmente un trasferimento per caricare file di dati aggiuntivi.
Se la configurazione di trasferimento è parametrizzata di runtime, dovrai specificare un intervallo di date per il quale verranno avviati i trasferimenti aggiuntivi.
Per attivare un trasferimento:
Console
Vai alla pagina BigQuery nella console Google Cloud.
Fai clic su
Trasferimenti di dati.Seleziona il trasferimento dall'elenco.
Fai clic su Esegui trasferimento ora o Pianifica backfill (per le configurazioni di trasferimento con parametri di runtime).
Se hai fatto clic su Esegui il trasferimento ora, seleziona Esegui trasferimento una tantum o Esegui per una 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 un 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 fornisci 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 di fuso orario valido. Ad esempio:2017-08-19T12:11:35.00Z
2017-05-25T00:00:00+00:00
RUN_TIME è un timestamp che specifica il momento in cui pianificare l'esecuzione del Data Transfer. Se vuoi eseguire un trasferimento una tantum per l'ora attuale, 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 trovare il nome della risorsa.
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 di Cloud Storage.
- Scopri di più su BigQuery Data Transfer Service.