Carica i dati con operazioni cross-cloud
In qualità di amministratore o analista BigQuery, puoi caricare i dati da un bucket Amazon Simple Storage Service (Amazon S3) o Archiviazione BLOB di Azure nelle tabelle BigQuery. Puoi unire i dati trasferiti ai dati presenti nelle regioni di Google Cloud o sfruttare funzionalità di BigQuery come BigQuery ML.
Puoi trasferire i dati in BigQuery nei seguenti modi:
Trasferisci i dati dai file in Amazon S3 e Archiviazione BLOB di Azure alle tabelle BigQuery utilizzando l'istruzione
LOAD DATA
.Filtra i dati dei file in Amazon S3 o Archiviazione BLOB prima di trasferire i risultati nelle tabelle BigQuery utilizzando l'istruzione
CREATE TABLE AS SELECT
. Per aggiungere dati alla tabella di destinazione, utilizza l'istruzioneINSERT INTO SELECT
.La manipolazione dei dati viene applicata sulle tabelle esterne che fanno riferimento ai dati di Amazon S3 o Archiviazione BLOB.
Quote e limiti
Per informazioni su quote e limiti, consulta Quote e limiti dei job di query.
Prezzi
Ti vengono addebitati i byte trasferiti tra i cloud utilizzando
l'istruzione LOAD
. Per informazioni sui prezzi, consulta la sezione relativa a Omni Cross Cloud Data Transfer in Prezzi di BigQuery Omni.
Ti vengono addebitati i byte trasferiti tra i cloud utilizzando
l'istruzione CREATE TABLE AS SELECT
o
l'istruzione INSERT INTO SELECT
e la capacità di calcolo.
Entrambe le istruzioni LOAD
e CREATE TABLE AS SELECT
richiedono slot nelle
regioni BigQuery Omni per analizzare i file di Amazon S3 e di Archiviazione BLOB e caricarli. Per saperne di più, consulta la pagina relativa ai prezzi di BigQuery Omni.
Prima di iniziare
Per fornire a Google Cloud l'accesso in lettura ai file in altri cloud, chiedi all'amministratore di creare una connessione e di condividerla con te. Per informazioni su come creare connessioni, consulta Connessione ad Amazon S3 o Archiviazione BLOB.
Ruolo richiesto
Per ottenere le autorizzazioni necessarie per caricare i dati utilizzando i trasferimenti tra cloud,
chiedi all'amministratore di concederti il ruolo IAM
Editor dati BigQuery (roles/bigquery.dataEditor
) sul set di dati.
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso.
Questo ruolo predefinito contiene le autorizzazioni necessarie per caricare i dati utilizzando i trasferimenti tra cloud. Per visualizzare le autorizzazioni esatte necessarie, espandi la sezione Autorizzazioni richieste:
Autorizzazioni obbligatorie
Per caricare dati utilizzando i trasferimenti tra cloud sono necessarie le seguenti autorizzazioni:
-
bigquery.tables.create
-
bigquery.tables.get
-
bigquery.tables.updateData
-
bigquery.tables.update
-
bigquery.jobs.create
-
bigquery.connections.use
Potresti anche essere in grado di ottenere queste autorizzazioni con i ruoli personalizzati o altri ruoli predefiniti.
Per ulteriori informazioni sui ruoli IAM in BigQuery, consulta Autorizzazioni e ruoli predefiniti.
Carica dati
Puoi caricare dati in BigQuery con l'istruzione LOAD DATA [INTO|OVERWRITE]
.
Limitazioni
- Il caricamento dei dati in una tabella di destinazione con partizione del tempo di importazione non è supportato.
LOAD DATA
job non vengono eseguiti sulle prenotazioni. I job usano slot on demand gestiti da Google Cloud.- La connessione e il set di dati di destinazione devono appartenere allo stesso progetto. Il caricamento dei dati tra progetti non è supportato.
LOAD DATA
è supportato solo quando trasferisci dati da un Amazon Simple Storage Service (Amazon S3) o Archiviazione BLOB di Azure a una regione BigQuery condivisa. Per ulteriori informazioni, consulta la sezione Località.- Puoi trasferire i dati da qualsiasi regione
US
a una localitàUS
con più regioni. Puoi anche trasferire file da qualsiasi regioneEU
a una località con più regioniEU
.
- Puoi trasferire i dati da qualsiasi regione
Esempio
Esempio 1
L'esempio seguente carica un file parquet denominato sample.parquet
da un bucket Amazon S3
nella tabella test_parquet
con uno schema di rilevamento automatico:
LOAD DATA INTO mydataset.testparquet FROM FILES ( uris = ['s3://test-bucket/sample.parquet'], format = 'PARQUET' ) WITH CONNECTION `aws-us-east-1.test-connection`
Esempio 2
L'esempio seguente carica un file CSV con il prefisso sampled*
da Blob Storage nella tabella test_csv
con il partizionamento predefinito delle colonne in base al tempo:
LOAD DATA INTO mydataset.test_csv (Number INT64, Name STRING, Time DATE) PARTITION BY Time FROM FILES ( format = 'CSV', uris = ['azure://test.blob.core.windows.net/container/sampled*'], skip_leading_rows=1 ) WITH CONNECTION `azure-eastus2.test-connection`
Esempio 3
L'esempio seguente sovrascrive la tabella esistente test_parquet
con
i dati di un file denominato sample.parquet
con uno schema di rilevamento automatico:
LOAD DATA OVERWRITE mydataset.testparquet FROM FILES ( uris = ['s3://test-bucket/sample.parquet'], format = 'PARQUET' ) WITH CONNECTION `aws-us-east-1.test-connection`
Filtra dati
Puoi filtrare i dati prima di trasferirli in BigQuery utilizzando l'istruzione CREATE TABLE AS SELECT
e l'istruzione INSERT INTO SELECT
.
Limitazioni
Se il risultato della query
SELECT
supera i 60 GiB in byte logici, la query non riesce. La tabella non viene creata e i dati non vengono trasferiti. Per scoprire come ridurre le dimensioni dei dati analizzati, consulta Ridurre i dati elaborati nelle query.Le tabelle temporanee non sono supportate.
Il trasferimento del formato dei dati geospaziali Well-known Binario (WKB) non è supportato.
L'istruzione
INSERT INTO SELECT
non supporta il trasferimento di dati in una tabella in cluster.Nell'istruzione
INSERT INTO SELECT
, se la tabella di destinazione corrisponde a quella di origine nella querySELECT
, l'istruzioneINSERT INTO SELECT
non modifica nessuna riga nella tabella di destinazione. La tabella di destinazione non viene modificata perché BigQuery non può leggere i dati nelle varie regioni.CREATE TABLE AS SELECT
eINSERT INTO SELECT
sono supportati solo quando trasferisci dati da un Amazon S3 o Archiviazione BLOB a una regione BigQuery condivisa. Per ulteriori informazioni, consulta la sezione Località.- Puoi trasferire i dati da qualsiasi regione
US
a una localitàUS
con più regioni. Puoi anche trasferire file da qualsiasi regioneEU
a una località con più regioniEU
.
- Puoi trasferire i dati da qualsiasi regione
Esempio
Esempio 1
Supponi di avere una tabella BigLake denominata myawsdataset.orders
che fa riferimento ai dati di Amazon S3.
Vuoi trasferire i dati da quella tabella a una tabella BigQuery myotherdataset.shipments
nella località multiregionale degli Stati Uniti.
Innanzitutto, visualizza le informazioni sulla tabella myawsdataset.orders
:
bq show myawsdataset.orders;
L'output è simile al seguente:
Last modified Schema Type Total URIs Expiration ----------------- -------------------------- ---------- ------------ ----------- 31 Oct 17:40:28 |- l_orderkey: integer EXTERNAL 1 |- l_partkey: integer |- l_suppkey: integer |- l_linenumber: integer |- l_returnflag: string |- l_linestatus: string |- l_commitdate: date
Quindi, visualizza le informazioni sulla tabella myotherdataset.shipments
:
bq show myotherdataset.shipments
L'output è simile al seguente. Alcune colonne vengono omesse per semplificare l'output.
Last modified Schema Total Rows Total Bytes Expiration Time Partitioning Clustered Fields Total Logical ----------------- --------------------------- ------------ ------------- ------------ ------------------- ------------------ --------------- 31 Oct 17:34:31 |- l_orderkey: integer 3086653 210767042 210767042 |- l_partkey: integer |- l_suppkey: integer |- l_commitdate: date |- l_shipdate: date |- l_receiptdate: date |- l_shipinstruct: string |- l_shipmode: string
Ora, utilizzando l'istruzione CREATE TABLE AS SELECT
puoi caricare selettivamente i dati nella tabella myotherdataset.orders
nella località multiregionale degli Stati Uniti:
CREATE OR REPLACE TABLE myotherdataset.orders PARTITION BY DATE_TRUNC(l_commitdate, YEAR) AS SELECT * FROM myawsdataset.orders WHERE EXTRACT(YEAR FROM l_commitdate) = 1992;
Puoi quindi eseguire un'operazione di join con la tabella appena creata:
SELECT orders.l_orderkey, orders.l_orderkey, orders.l_suppkey, orders.l_commitdate, orders.l_returnflag, shipments.l_shipmode, shipments.l_shipinstruct FROM myotherdataset.shipments JOIN `myotherdataset.orders` as orders ON orders.l_orderkey = shipments.l_orderkey AND orders.l_partkey = shipments.l_partkey AND orders.l_suppkey = shipments.l_suppkey WHERE orders.l_returnflag = 'R'; -- 'R' means refunded.
Quando sono disponibili nuovi dati, aggiungi i dati dell'anno 1993 alla tabella di destinazione utilizzando l'istruzione INSERT INTO SELECT
:
INSERT INTO myotherdataset.orders SELECT * FROM myawsdataset.orders WHERE EXTRACT(YEAR FROM l_commitdate) = 1993;
Esempio 2
Nell'esempio seguente vengono inseriti dati in una tabella partizionata per data di importazione:
CREATE TABLE mydataset.orders(id String, numeric_id INT) PARTITION BY _PARTITIONDATE;
Dopo aver creato una tabella partizionata, puoi inserire i dati nella tabella partizionata per la fase di importazione:
INSERT INTO mydataset.orders( _PARTITIONTIME, id, numeric_id) SELECT TIMESTAMP("2023-01-01"), id, numeric_id, FROM mydataset.ordersof23 WHERE numeric_id > 4000000;
Best practice
- Evita di caricare più file di dimensioni inferiori a 5 MB. Crea invece una tabella esterna per il file ed esporta il risultato della query in Amazon S3 o Archiviazione BLOB per creare un file più grande. Questo metodo consente di migliorare il tempo di trasferimento dei dati. Per informazioni sul limite massimo per il risultato della query, consulta Dimensione massima del risultato della query su BigQuery Omni.
- Se i dati di origine si trovano in un file compresso con gzip, durante la creazione delle tabelle esterne imposta l'opzione
external_table_options.compression
suGZIP
.
Passaggi successivi
- Scopri di più su BigQuery ML.
- Scopri di più su BigQuery Omni.
- Scopri come eseguire query.
- Scopri come configurare Controlli di servizio VPC per BigQuery Omni.
- Scopri come pianificare e gestire i job di caricamento ricorrenti da Amazon S3 a BigQuery e Archiviazione BLOB in BigQuery.