BigQuery con connessione BigTable, non può eseguire alcuna query


9

Voglio generare alcuni report basati sui dati in BigTable. Per questo volevo creare una query che ottenga i dati più recenti dalla BigTable e li passi sul report di Data Studio. Ora il problema è che quando creo una connessione BigTable in BigQuery non riesco a eseguire alcuna query, anche sulla tabella vuota. Creo il tipo per BigQuery nel modo seguente:

bq mk \
--external_table_definition=gs://somebucket/big-table-definition.json \
datareportingdataset.datareportingtable

e il comando viene eseguito correttamente. Il mio big-table-definition.jsonaspetto è il seguente:

{
    "sourceFormat": "BIGTABLE",
    "sourceUris": [
        "https://googleapis.com/bigtable/projects/playground-2/instances/data-reporting/tables/data-reporting-table"
    ],
    "bigtableOptions": {
        "readRowkeyAsString": "true",
        "columnFamilies" : [
            {
                "familyId": "cf1",
                "onlyReadLatest": "true",
                "columns": [
                    {
                        "qualifierString": "temp",
                        "type": "STRING"
                    },
                    {
                    //the rest of the columns
                ]
            }
        ]
    }
}

L'errore quando si esegue una select *query semplice è simile al seguente:

Error while reading table: datareportingdataset.datareportingtable, error message: Error detected while parsing row starting at position: 2. Error: Data between close double quote (") and field separator.

Prima sospettavo alcuni dati nella BigTable ma quando ho eliminato tutto da lì si verifica ancora l'errore. Ho scoperto che deve essere qualcosa con il file json stesso come quando sposto "sourceFormats" su alcune righe l'errore cambia posizione segnalato. Cosa sto facendo di sbagliato qui?

Risposte:


1

ho appena riprodotto il tuo caso e trovato lo stesso errore esatto. Mi sembra che quando esegui il comando bq mk non stia estraendo alcun dato.

Come workarroud ti suggerirei di eseguire un processo di flusso di dati per estrarre i tuoi dati su Cloud Storage come file .avro e quindi importare i tuoi dati in un set di dati in Bigquery.


Non credo che i file avro di Bigtable possano essere importati in BigQuery (anche se accetta file avro)
Billy Jacobson,

1

Penso di aver trovato il problema in quanto sono stato in grado di riprodurlo. Il messaggio di errore è confuso ma, come documentato qui :

È necessario creare manualmente il file di schema JSON e deve trovarsi sul computer locale. Il riferimento a un file di schema JSON archiviato in Cloud Storage o in Google Drive non è supportato.

Ho fatto alcuni test con l' avvio rapido di Bigtable e ha funzionato bene per me:

bq query "SELECT * FROM DATASET.datareportingtable"
Waiting on JOB_ID ... (3s) Current status: DONE   
+--------+-----------------+---------------------------+-----------------------+
| rowkey | cf1_column_name | cf1_column_cell_timestamp | cf1_column_cell_value |
+--------+-----------------+---------------------------+-----------------------+
| r1     | c1              |       2019-10-15 18:15:04 | test-value            |
+--------+-----------------+---------------------------+-----------------------+

L'unica cosa che ho fatto diversamente è stato usare un percorso locale come in:

--external_table_definition=big-table-definition.json

Cambiando questo a:

--external_table_definition=gs://$BUCKET/big-table-definition.json

E ho avuto lo stesso errore:

bq query "SELECT * FROM DATASET.datareportingtable2"
Waiting on JOB_ID ... (0s) Current status: DONE   
BigQuery error in query operation: Error processing job 'PROJECT:JOB_ID': Error while reading table: DATASET.datareportingtable2, error message: Error detected while parsing row starting at
position: 2. Error: Data between close double quote (") and field separator.

Interessante, non ho tempo di verificarlo ora, ma grazie per lo sforzo
Kris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.