Esporta i dati come colonne Protobuf
Questo documento descrive come esportare i dati BigQuery come colonne Protocol Buffer (Protobuf) utilizzando le funzioni definite dall'utente (UDF) di BigQuery.
Quando utilizzare le colonne Protobuf
BigQuery offre una serie di funzioni integrate per formattare la selezione e i dati di Google Cloud. Un'opzione è unire più valori di colonna in un singolo Protobuf e offrire i seguenti vantaggi:
- Sicurezza del tipo di oggetto.
- Compressione, tempo di trasferimento dei dati e costi migliorati rispetto a JSON.
- Flessibilità, poiché la maggior parte dei linguaggi di programmazione dispone di librerie per gestire Protobuf.
- Meno overhead durante la lettura da più colonne e la creazione di un singolo oggetto.
Sebbene anche altri tipi di colonne possano garantire la sicurezza del tipo, l'utilizzo delle colonne Protobuf fornisce un oggetto completamente tipizzato, che può ridurre la quantità di lavoro da svolgere a livello di applicazione o in un'altra parte della pipeline.
Tuttavia, esistono limitazioni per l'esportazione dei dati di BigQuery come colonne Protobuf:
- Le colonne protobuf non sono ben indicizzate o filtrate. La ricerca in base ai contenuti delle colonne Protobuf può essere meno efficace.
- L'ordinamento dei dati in formato Protobuf può essere difficile.
Se queste limitazioni si applicano al flusso di lavoro di esportazione, puoi prendere in considerazione altri per esportare i dati di BigQuery:
- Utilizza le query pianificate con
istanze
EXPORT DATA
per ordinare i dati di BigQuery esportati in base alla data o all'ora e per pianificare le esportazioni su base ricorrente. BigQuery supporta l'esportazione dei dati nei formati Avro, CSV, JSON e Parquet. - Utilizza Dataflow per l'esportazione Dati BigQuery nel formato file Avro o CSV.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per esportare i dati BigQuery come colonne Protobuf, chiedi all'amministratore di concederti i seguenti ruoli IAM nel progetto:
-
Crea una funzione definita dall'utente:
Editor dati BigQuery (
roles/bigquery.dataEditor
) -
Esporta i dati da una tabella BigQuery:
Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) -
Leggi e carica file su Cloud Storage:
Creatore oggetti Storage (
roles/storage.objectCreator
)
Per saperne di più sulla concessione dei ruoli, consulta Gestire l'accesso a progetti, cartelle e organizzazioni.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
Creare una funzione definita dall'utente
La procedura seguente mostra come creare una funzione definita dall'utente che
converte un tipo di dati STRUCT
BigQuery in una colonna Protobuf:
In una riga di comando, clona il repository
bigquery-utils.git
:git clone https://github.com/GoogleCloudPlatform/bigquery-utils.git
Vai alla cartella di esportazione Protobuf
cd bigquery-utils/tools/protobuf_export
Aggiungi i file proto alla cartella
./protos
.Installa i pacchetti necessari dal repository GitHub:
npm install
Raggruppa il pacchetto utilizzando webpack:
npx webpack --config webpack.config.js --stats-error-details
Individua il file
pbwrapper.js
nella cartelladist/
e copialo in un nel bucket Cloud Storage.Crea una funzione definita dall'utente che crea una colonna Protobuf dal colonne BigQuery esistenti:
CREATE FUNCTION DATASET_ID.toMyProtoMessage(input STRUCT<field_1 TYPE1, field_2 TYPE2>) RETURNS BYTES LANGUAGE js OPTIONS ( library=["gs://BUCKET_NAME/pbwrapper.js"] ) AS r""" let message = pbwrapper.setup("PROTO_PACKAGE.PROTO_MESSAGE") return pbwrapper.parse(message, input) """;
Sostituisci quanto segue:
DATASET_ID
: l'ID del set di dati in cui memorizzi la funzioneBUCKET_NAME
: il nome del bucket Cloud StoragePROTO_PACKAGE
: il nome del pacchetto per il file protoPROTO_MESSAGE
: il tipo di messaggio per il file proto
Per ulteriori informazioni sull'uso dei pacchetti nel linguaggio proto, consulta la sezione Pacchetti.
Formatta le colonne come valori Protobuf
Dopo aver creato la funzione definita dall'utente, esegui la funzione:
SELECT DATASET_ID.toMyProtoMessage(STRUCT(COLUMN_TYPE1, COLUMN_TYPE2)) AS protoResult FROM `DATASET_NAME` LIMIT 100;
Sostituisci quanto segue:
DATASET_ID
: l'ID del set di dati in cui memorizzi la funzioneDATASET_NAME
: il nome del set di dati, ad esempiodataset_name.table_name
COLUMN_TYPE1
: il nome di una colonna. Le colonne possono includere qualsiasi tipo di valore scalare supportato o tipo non scalare, inclusiARRAY
eSTRUCT
COLUMN_TYPE2
: il nome di una colonna. Le colonne possono includere qualsiasi tipo di valore scalare supportato o tipo non scalare, inclusiARRAY
eSTRUCT
Lavorare con i valori Protobuf
Con i tuoi dati BigQuery esportati nel formato Protobuf, puoi ora puoi lavorare con i tuoi dati come struct o oggetto completamente digitato.
I seguenti esempi di codice forniscono diversi esempi di modalità di elaborazione o lavorare con i dati esportati: