Esportare 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 i dati selezionati. Un'opzione è unire più valori di colonna in un unico valore Protobuf, che presenta 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 tuo flusso di lavoro di esportazione, potresti prendere in considerazione altri metodi 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 esportare i dati di BigQuery in 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;utente:
BigQuery Data Editor (
roles/bigquery.dataEditor
) -
Esporta i dati da una tabella BigQuery:
Visualizzatore dati BigQuery (
roles/bigquery.dataViewer
) -
Leggi e carica file su Cloud Storage:
Storage Object Creator (
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 i ruoli personalizzati o altri ruoli predefiniti.
Creare una funzione definita dall'utente
La procedura seguente mostra come creare una funzione definita dall'utente;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 di Protobuf
cd bigquery-utils/tools/protobuf_export
Aggiungi i file proto alla cartella
./protos
.Installa i pacchetti necessari dal repository GitHub:
npm install
Unisci il pacchetto utilizzando webpack:
npx webpack --config webpack.config.js --stats-error-details
Individua il file
pbwrapper.js
nella cartelladist/
e copialo in un bucket Cloud Storage.Crea una UDF che genera una colonna Protobuf dalle 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'utilizzo dei pacchetti nel linguaggio proto, consulta Pacchetti.
Formattare le colonne come valori Protobuf
Dopo aver creato la FDU, 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 dati BigQuery esportati nel formato Protobuf, ora puoi lavorare con i dati come oggetto o struct completamente tipizzato.
I seguenti esempi di codice forniscono diversi esempi di modi in cui puoi elaborare o utilizzare i dati esportati: