BigQuery con conexión BigTable, no puede ejecutar ninguna consulta

9

Quiero generar algunos informes basados ​​en los datos en BigTable. Para eso quería crear una consulta que obtenga los últimos datos de BigTable y los pase al informe del estudio de datos. Ahora el problema es que cuando creo una conexión BigTable en BigQuery no puedo ejecutar ninguna consulta, incluso en la tabla vacía. Creo el tipo para BigQuery de la siguiente manera:

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

y el comando se ejecuta con éxito. Mi big-table-definition.jsonaspecto es el siguiente:

{
    "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
                ]
            }
        ]
    }
}

El error al hacer una select *consulta simple se parece a lo siguiente:

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.

Primero sospechaba algunos datos en BigTable, pero cuando eliminé todo desde allí, el error aún ocurre. He descubierto que debe ser algo con el archivo json en sí, ya que cuando muevo los "sourceFormats" unas pocas líneas, el error cambia la posición informada. ¿Qué estoy haciendo mal aquí?

Kris
fuente

Respuestas:

1

Acabo de reproducir su caso y encontré exactamente el mismo error. Me parece que cuando ejecuta el comando bq mk no extrae ningún dato en absoluto.

Como workarroud, le sugiero que ejecute un trabajo de Dataflow para extraer sus datos a Cloud Storage como un archivo .avro y luego importar sus datos a un conjunto de datos en Bigquery.

Chris32
fuente
No creo que los archivos avro de Bigtable puedan importarse a BigQuery (aunque acepte archivos avro)
Billy Jacobson
1

Creo que encontré el problema porque pude reproducirlo. El mensaje de error es confuso pero, como se documenta aquí :

Debe crear el archivo de esquema JSON manualmente, y debe estar en su máquina local. No se admite hacer referencia a un archivo de esquema JSON almacenado en Cloud Storage o en Google Drive.

Hice algunas pruebas con el inicio rápido de Bigtable y funcionó bien para mí:

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            |
+--------+-----------------+---------------------------+-----------------------+

Lo único que hice diferente fue usar una ruta local como en:

--external_table_definition=big-table-definition.json

Cambiando esto de nuevo a:

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

Y obtuve el mismo error:

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.
Guillem Xercavins
fuente
Interesante, no tengo tiempo para comprobar eso ahora, pero gracias por el esfuerzo
Kris