BigQuery mit BigTable-Verbindung kann keine Abfrage ausführen


9

Ich möchte einige Berichte basierend auf den Daten in BigTable erstellen. Dafür wollte ich eine Abfrage erstellen, die die neuesten Daten aus der BigTable abruft und an den Data Studio-Bericht weiterleitet. Das Problem ist nun, dass ich beim Erstellen einer BigTable-Verbindung in BigQuery keine Abfrage ausführen kann, auch nicht für die leere Tabelle. Ich erstelle den Typ für BigQuery folgendermaßen:

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

und der Befehl wird erfolgreich ausgeführt. Mein big-table-definition.jsonsieht wie folgt aus:

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

Der Fehler bei der einfachen select *Abfrage sieht folgendermaßen aus:

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.

Zuerst habe ich einige Daten in der BigTable vermutet, aber als ich alles von dort gelöscht habe, tritt der Fehler immer noch auf. Ich habe herausgefunden, dass es etwas mit der JSON-Datei selbst sein muss, denn wenn ich die "sourceFormats" ein paar Zeilen nach unten verschiebe, ändert der Fehler die gemeldete Position. Was mache ich hier falsch?

Antworten:


1

habe gerade deinen Fall reproduziert und genau den gleichen Fehler gefunden. Wenn Sie den Befehl bq mk ausführen, sieht es für mich so aus, als würden überhaupt keine Daten extrahiert.

Als Workarroud würde ich Ihnen empfehlen, einen Datenflussjob auszuführen , um Ihre Daten als .avro-Datei in den Cloud-Speicher zu extrahieren und Ihre Daten dann in ein Dataset in Bigquery zu importieren.


Ich glaube nicht, dass Bigtable Avro-Dateien in BigQuery importiert werden können (obwohl es Avro-Dateien akzeptiert)
Billy Jacobson

1

Ich glaube, ich habe das Problem gefunden, als ich es reproduzieren konnte. Die Fehlermeldung ist verwirrend, aber wie hier dokumentiert :

Sie müssen die JSON-Schemadatei manuell erstellen und sie muss sich auf Ihrem lokalen Computer befinden. Das Verweisen auf eine im Cloud-Speicher oder in Google Drive gespeicherte JSON-Schemadatei wird nicht unterstützt.

Ich habe einige Tests mit dem Bigtable-Schnellstart durchgeführt und es hat bei mir gut funktioniert:

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

Das einzige, was ich anders gemacht habe, war die Verwendung eines lokalen Pfads wie in:

--external_table_definition=big-table-definition.json

Ändern Sie dies zurück zu:

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

Und ich habe den gleichen Fehler bekommen:

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.

Interessant, ich habe jetzt keine Zeit, das zu überprüfen, aber danke für die Mühe
Kris
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.