BigQuery avec une connexion BigTable, ne peut exécuter aucune requête

9

Je veux générer des rapports basés sur les données de BigTable. Pour cela, je voulais créer une requête qui obtiendrait les dernières données du BigTable et les transmettrait au rapport Data Studio. Maintenant, le problème est que lorsque je crée une connexion BigTable dans BigQuery, je ne peux exécuter aucune requête, même sur la table vide. Je crée le type pour BigQuery de la manière suivante:

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

et la commande s'exécute avec succès. Mon big-table-definition.jsonressemble à ceci:

{
    "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'erreur lors d'une select *requête simple ressemble à ceci:

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.

D'abord, je soupçonnais certaines données dans le BigTable mais quand j'ai tout supprimé de là, l'erreur se produit toujours. J'ai découvert que cela devait être quelque chose avec le fichier json lui-même car lorsque je déplace les "sourceFormats" sur quelques lignes, l'erreur change de position signalée. Qu'est-ce que je fais mal ici?

Kris
la source

Réponses:

1

vient de reproduire votre cas et a trouvé la même erreur exacte. Il me semble que lorsque vous exécutez la commande bq mk, elle n’extrait aucune donnée du tout.

En tant que collaborateur, je vous suggère d'exécuter un travail Dataflow pour extraire vos données vers Cloud Storage en tant que fichier .avro, puis d'importer vos données dans un ensemble de données dans Bigquery.

Chris32
la source
Je ne crois pas que les fichiers avro de Bigtable puissent être importés dans BigQuery (même s'il accepte les fichiers avro)
Billy Jacobson
1

Je pense avoir trouvé le problème car j'ai pu le reproduire. Le message d'erreur est déroutant mais, comme indiqué ici :

Vous devez créer le fichier de schéma JSON manuellement et il doit se trouver sur votre ordinateur local. Le référencement d'un fichier de schéma JSON stocké dans Cloud Storage ou dans Google Drive n'est pas pris en charge.

J'ai fait quelques tests avec le Quickstart Bigtable et cela a bien fonctionné pour moi:

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

La seule chose que j'ai fait différemment était d'utiliser un chemin local comme dans:

--external_table_definition=big-table-definition.json

Changer ceci en:

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

Et j'ai la même erreur:

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
la source
Intéressant, je n'ai pas le temps de vérifier cela maintenant mais merci pour l'effort
Kris