Esporta i dati come colonne Protobuf
Questo documento descrive come esportare i dati BigQuery come protocollo Memorizza le colonne (Protobuf) utilizzando BigQuery definito dall'utente (UDF).
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 unico valore Protobuf, che presenta i seguenti vantaggi:
- Sicurezza del tipo di oggetto.
- Compressione, tempo di trasferimento 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.
Anche altri tipi di colonna possono garantire la sicurezza dei tipi, utilizzando le colonne Protobuf fornisce un oggetto completamente digitato, il che può ridurre la quantità di lavoro richiesta a livello di applicazione o in un'altra parte della pipeline.
Tuttavia, esistono limitazioni per esportare i dati di BigQuery Colonne protobuf:
- Le colonne protobuf non sono ben indicizzate o filtrate. La ricerca in base ai contenuti le colonne Protobuf possono essere meno efficaci.
- Ordinare i 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 Dataflow per l'esportazione Dati BigQuery in formati file Avro o CSV.
- Utilizza le query pianificate per ordinare di BigQuery esportati per data o ora e per pianificare le esportazioni su base ricorrente.
Ruoli obbligatori
Per ottenere le autorizzazioni necessarie per esportare i dati BigQuery come colonne Protobuf, chiedi all'amministratore di concederti i seguenti ruoli IAM sul tuo 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.
Potresti anche riuscire a ottenere le autorizzazioni richieste tramite la ruoli o altri ruoli predefiniti ruoli.
Crea una funzione definita dall'utente
La procedura seguente mostra come creare una funzione definita dall'utente che
converte un tipo di dati STRUCT
di 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 archivi la funzioneBUCKET_NAME
: il nome del tuo bucket Cloud StoragePROTO_PACKAGE
: nome del pacchetto del file di protocolloPROTO_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 archivi 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 scalabile supportato o non scalabile, tra cuiARRAY
eSTRUCT
COLUMN_TYPE2
: il nome di una colonna. Le colonne possono includere qualsiasi tipo di valore scalabile supportato o non scalabile, tra cuiARRAY
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: