Introduzione ai trasferimenti di Amazon S3

BigQuery Data Transfer Service per Amazon S3 consente di pianificare e gestire automaticamente i job di caricamento ricorrenti da Amazon S3 a BigQuery.

Formati di file supportati

BigQuery Data Transfer Service supporta il caricamento dei dati da Amazon S3 in uno dei seguenti formati:

  • Valori separati da virgola (CSV)
  • JSON (delimitato da nuova riga)
  • Avro
  • Parquet
  • ORC

Tipi di compressione supportati

BigQuery Data Transfer Service per Amazon S3 supporta il caricamento di dati compressi. I tipi di compressione supportati da BigQuery Data Transfer Service sono gli stessi di quelli supportati dai job di caricamento di BigQuery. Per ulteriori informazioni, consulta Caricare dati compressi e non compressi.

Prerequisiti di Amazon S3

Per caricare i dati da un'origine dati Amazon S3, devi:

  • Fornisci l'URI Amazon S3 per i dati di origine
  • Avere l'ID della tua chiave di accesso
  • Disporre della chiave di accesso segreta
  • Imposta come minimo il criterio gestito AWS AmazonS3ReadOnlyAccess sui tuoi dati di origine Amazon S3

URI Amazon S3

Quando fornisci l'URI Amazon S3, il percorso deve essere nel seguente formato s3://bucket/folder1/folder2/... È richiesto solo il nome del bucket di primo livello. I nomi delle cartelle sono facoltativi. Se specifichi un URI che include solo il nome del bucket, tutti i file nel bucket vengono trasferiti e caricati in BigQuery.

Parametrizzazione del runtime di trasferimento Amazon S3

L'URI Amazon S3 e la tabella di destinazione possono essere entrambi parametrizzati, consentendoti di caricare i dati dai bucket Amazon S3 organizzati per data. Tieni presente che la parte del bucket dell'URI non può essere parametrizzata. I parametri utilizzati dai trasferimenti di Amazon S3 sono gli stessi utilizzati dai trasferimenti di Cloud Storage.

Per maggiori dettagli, vedi Parametri di runtime nei trasferimenti.

Importazione dati per trasferimenti di Amazon S3

Puoi specificare la modalità di caricamento dei dati in BigQuery selezionando una Preferenza di scrittura nella configurazione di trasferimento quando configuri un trasferimento Amazon S3.

Sono disponibili due tipi di preferenze di scrittura: trasferimenti incrementali e trasferimenti troncati.

Trasferimenti incrementali

Una configurazione di trasferimento con una preferenza di scrittura APPEND o WRITE_APPEND, chiamata anche trasferimento incrementale, aggiunge in modo incrementale nuovi dati poiché il precedente trasferimento è andato a buon fine a una tabella di destinazione BigQuery. Quando una configurazione di trasferimento viene eseguita con una preferenza di scrittura APPEND, BigQuery Data Transfer Service filtra i file che sono stati modificati dopo l'esecuzione del trasferimento precedente. Per determinare quando un file viene modificato, BigQuery Data Transfer Service esamina i metadati del file per una proprietà "Ora dell'ultima modifica". Ad esempio, BigQuery Data Transfer Service esamina la proprietà timestamp updated in un file Cloud Storage. Se BigQuery Data Transfer Service trova file con l'"ora dell'ultima modifica" che si sono verificati dopo il timestamp dell'ultimo trasferimento riuscito, BigQuery Data Transfer Service trasferisce questi file in un trasferimento incrementale.

Per dimostrare come funzionano i trasferimenti incrementali, considera il seguente esempio di trasferimento in Cloud Storage. Un utente crea un file in un bucket Cloud Storage all'indirizzo 01-07-2023T00:00Z denominato file_1. Il timestamp updated per file_1 indica l'ora in cui è stato creato il file. L'utente crea quindi un trasferimento incrementale dal bucket Cloud Storage, pianificato per l'esecuzione una volta al giorno alle 03:00 Z, a partire dal 01/07/2023T03:00Z.

  • Il giorno 01/07/2023T03:00Z inizia il primo trasferimento. Poiché questa è la prima esecuzione di trasferimento per questa configurazione, BigQuery Data Transfer Service tenta di caricare tutti i file corrispondenti all'URI di origine nella tabella BigQuery di destinazione. L'esecuzione del trasferimento ha esito positivo e BigQuery Data Transfer Service carica correttamente file_1 nella tabella BigQuery di destinazione.
  • La prossima esecuzione del trasferimento, il 02/07/2023T03:00Z, non rileva nessun file in cui la proprietà timestamp updated è maggiore dell'ultima esecuzione di trasferimento riuscita (01/07/2023T03:00Z). L'esecuzione del trasferimento ha esito positivo senza caricare altri dati nella tabella BigQuery di destinazione.

L'esempio precedente mostra come BigQuery Data Transfer Service considera la proprietà del timestamp updated del file di origine per determinare se sono state apportate modifiche ai file di origine e per trasferire queste eventuali modifiche rilevate.

Seguendo lo stesso esempio, supponiamo che l'utente crei un altro file denominato file_2 nel bucket Cloud Storage all'ora 2023-07-03T00:00Z. Il timestamp updated per file_2 indica l'ora in cui è stato creato il file.

  • L'esecuzione successiva del trasferimento, il 03/07/2023T03:00Z, rileva che il timestamp updated di file_2 è maggiore dell'ultima esecuzione del trasferimento riuscita (01/07/2023T03:00Z). Supponiamo che l'avvio del trasferimento non vada a buon fine a causa di un errore temporaneo. In questo scenario, file_2 non viene caricato nella tabella BigQuery di destinazione. L'ultimo timestamp eseguito correttamente per l'esecuzione del trasferimento rimane al 01-07-2023T03:00Z.
  • La prossima esecuzione del trasferimento, il 04/07/2023T03:00Z, rileva che il timestamp updated di file_2 è maggiore dell'ultima esecuzione del trasferimento riuscita (01/07/2023T03:00Z). Questa volta, l'esecuzione del trasferimento viene completata senza problemi, quindi viene caricato correttamente file_2 nella tabella BigQuery di destinazione.
  • La prossima esecuzione del trasferimento, il 05/07/2023T03:00Z, non rileva nessun file il cui timestamp updated è maggiore dell'ultima esecuzione del trasferimento riuscita (04/07/2023T03:00Z). L'esecuzione del trasferimento ha esito positivo senza caricare dati aggiuntivi nella tabella BigQuery di destinazione.

L'esempio precedente mostra che, quando un trasferimento non va a buon fine, nessun file viene trasferito nella tabella di destinazione BigQuery. Tutte le modifiche apportate ai file vengono trasferite alla successiva esecuzione di trasferimento riuscita. Eventuali trasferimenti riusciti successivi in seguito a un trasferimento non riuscito non generano dati duplicati. Nel caso di un trasferimento non riuscito, puoi anche scegliere di attivarlo manualmente al di fuori dell'orario regolarmente pianificato.

Trasferimenti troncati

Una configurazione di trasferimento con una preferenza di scrittura MIRROR o WRITE_TRUNCATE, chiamata anche trasferimento troncato, sovrascrive i dati nella tabella di destinazione BigQuery durante ogni esecuzione di trasferimento con i dati provenienti da tutti i file corrispondenti all'URI di origine. MIRROR sovrascrive una nuova copia dei dati nella tabella di destinazione. Se la tabella di destinazione utilizza un decoratore di partizioni, l'esecuzione del trasferimento sovrascrive solo i dati nella partizione specificata. Una tabella di destinazione con un decorator della partizione ha il formato my_table${run_date}, ad esempio my_table$20230809.

La ripetizione degli stessi trasferimenti incrementali o troncati in un giorno non causa dati duplicati. Tuttavia, se esegui più configurazioni di trasferimento che interessano la stessa tabella di destinazione BigQuery, BigQuery Data Transfer Service può duplicare i dati.

Supporto dei caratteri jolly per gli URI di Amazon S3

Se i dati di origine sono separati in più file che hanno lo stesso nome di base, puoi utilizzare un carattere jolly nell'URI quando carichi i dati. Un carattere jolly è costituito da un asterisco (*) e può essere utilizzato ovunque nell'URI Amazon S3, ad eccezione del nome del bucket.

Sebbene sia possibile utilizzare più di un carattere jolly nell'URI di Amazon S3, è possibile eseguire alcune ottimizzazioni quando l'URI di Amazon S3 specifica un solo carattere jolly:

  • Esiste un limite più elevato al numero massimo di file per esecuzione di trasferimento.

  • Il carattere jolly si estenderà fino ai limiti delle directory. Ad esempio, l'URI Amazon S3 s3://my-bucket/*.csv corrisponderà al file s3://my-bucket/my-folder/my-subfolder/my-file.csv.

Esempi di URI Amazon S3

Esempio 1

Per caricare un singolo file da Amazon S3 in BigQuery, specifica l'URI Amazon S3 del file.

s3://my-bucket/my-folder/my-file.csv

Esempio 2

Per caricare tutti i file da un bucket Amazon S3 in BigQuery, specifica solo il nome del bucket, con o senza un carattere jolly.

s3://my-bucket/

o

s3://my-bucket/*

Tieni presente che s3://my-bucket* non è un URI Amazon S3 consentito, poiché non è possibile utilizzare un carattere jolly nel nome del bucket.

Esempio 3

Per caricare tutti i file di Amazon S3 che condividono un prefisso comune, specifica il prefisso comune seguito da un carattere jolly.

s3://my-bucket/my-folder/*

Tieni presente che, diversamente dal caricamento di tutti i file da un bucket Amazon S3 di primo livello, il carattere jolly deve essere specificato alla fine dell'URI Amazon S3 per qualsiasi file da caricare.

Esempio 4

Per caricare tutti i file da Amazon S3 con un percorso simile, specifica il prefisso comune seguito da un carattere jolly.

s3://my-bucket/my-folder/*.csv

Esempio 5

Tieni presente che i caratteri jolly riguardano le directory, pertanto tutti i file csv in my-folder e nelle sottocartelle di my-folder verranno caricati in BigQuery.

Se hai questi file di origine in una cartella logs:

s3://my-bucket/logs/logs.csv
s3://my-bucket/logs/system/logs.csv
s3://my-bucket/logs/some-application/system_logs.log
s3://my-bucket/logs/logs_2019_12_12.csv

quindi li identifica:

s3://my-bucket/logs/*

Esempio 6

Se disponi di questi file di origine, ma vuoi trasferire solo quelli che hanno logs.csv come nome file:

s3://my-bucket/logs.csv
s3://my-bucket/metadata.csv
s3://my-bucket/system/logs.csv
s3://my-bucket/system/users.csv
s3://my-bucket/some-application/logs.csv
s3://my-bucket/some-application/output.csv

il comando seguente identifica i file che contengono logs.csv nel nome:

s3://my-bucket/*logs.csv

Esempio 7

Utilizzando più caratteri jolly, è possibile ottenere un maggiore controllo sui file trasferiti, a costo di limiti inferiori. L'utilizzo di più caratteri jolly fa sì che ogni carattere jolly corrisponda solo alla fine di un percorso all'interno di una sottodirectory. Ad esempio, per i seguenti file di origine in Amazon S3:

s3://my-bucket/my-folder1/my-file1.csv
s3://my-bucket/my-other-folder2/my-file2.csv
s3://my-bucket/my-folder1/my-subfolder/my-file3.csv
s3://my-bucket/my-other-folder2/my-subfolder/my-file4.csv

Se l'intenzione è trasferire solo my-file1.csv e my-file2.csv, utilizza quanto segue come valore per l'URI Amazon S3:

s3://my-bucket/*/*.csv

Poiché nessuno dei due caratteri jolly abbraccia le directory, questo URI limita il trasferimento solo ai file CSV che si trovano in my-folder1 e my-other-folder2. Le sottocartelle non verranno incluse nel trasferimento.

Chiavi di accesso AWS

L'ID chiave di accesso e la chiave di accesso secret vengono utilizzati per accedere ai dati di Amazon S3 per tuo conto. Come best practice, crea un ID chiave di accesso e una chiave di accesso secret univoci per i trasferimenti di Amazon S3 per concedere un accesso minimo a BigQuery Data Transfer Service. Per informazioni sulla gestione delle chiavi di accesso, consulta la documentazione di riferimento generale su AWS.

Considerazioni sulla coerenza

Quando trasferisci i dati da Amazon S3, è possibile che alcuni non vengano trasferiti a BigQuery, in particolare se i file sono stati aggiunti al bucket molto di recente. Potrebbero essere necessari circa 10 minuti prima che un file sia disponibile in BigQuery Data Transfer Service dopo l'aggiunta al bucket. In alcuni casi, tuttavia, potrebbero essere necessari più di 10 minuti.

Per ulteriori informazioni sul modello di coerenza Amazon S3, consulta la pagina relativa al modello di coerenza dei dati di Amazon S3 nella documentazione di Amazon S3.

Best practice per i costi del trasferimento di dati in uscita

I trasferimenti da Amazon S3 potrebbero non riuscire se la tabella di destinazione non è stata configurata correttamente. I motivi che potrebbero causare una configurazione errata includono:

  • La tabella di destinazione non esiste.
  • Lo schema della tabella non è definito.
  • Lo schema della tabella non è compatibile con i dati da trasferire.

Per evitare i costi del trasferimento di dati in uscita di Amazon S3, devi prima testare un trasferimento con un sottoinsieme piccolo ma rappresentativo di file. Piccolo significa che il test dovrebbe avere dimensioni ridotte per i dati e numero di file ridotto.

Prezzi

Per informazioni sui prezzi di BigQuery Data Transfer Service, consulta la pagina Prezzi.

Tieni presente che utilizzando questo servizio è possibile incorrere in costi esterni a Google. Per informazioni dettagliate, consulta la pagina dei prezzi di Amazon S3.

Quote e limiti

BigQuery Data Transfer Service utilizza i job di caricamento per caricare i dati di Amazon S3 in BigQuery. Tutti i limiti e le quote di BigQuery sui job di caricamento si applicano ai trasferimenti ricorrenti di Amazon S3, con le seguenti considerazioni aggiuntive:

Valore Limite
Dimensione massima per esecuzione di trasferimento del job di caricamento 15 TB
Numero massimo di file per esecuzione di trasferimento quando l'URI Amazon S3 include 0 o 1 caratteri jolly 10.000.000 di file
Numero massimo di file per esecuzione di trasferimento quando l'URI Amazon S3 include più di un carattere jolly 10.000 file

Passaggi successivi