BigQuery z połączeniem BigTable, nie może wykonać żadnego zapytania

9

Chcę wygenerować kilka raportów na podstawie danych w BigTable. W tym celu chciałem utworzyć zapytanie, które pobierze najnowsze dane z BigTable i przekaże je do raportu studia danych. Problem polega na tym, że kiedy tworzę połączenie BigTable w BigQuery, nie mogę wykonać żadnego zapytania, nawet na pustej tabeli. Typ dla BigQuery tworzę w następujący sposób:

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

a polecenie zostanie wykonane pomyślnie. Moje big-table-definition.jsonwygląda następująco:

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

Błąd podczas wykonywania prostego select *zapytania wygląda następująco:

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.

Najpierw podejrzewałem niektóre dane w BigTable, ale kiedy usunąłem wszystko stamtąd, błąd nadal występuje. Dowiedziałem się, że musi to być coś z samym plikiem json, ponieważ gdy przesuwam „sourceFormats” w dół o kilka wierszy, zgłaszany błąd zmienia pozycję. Co robię tutaj źle?

Kris
źródło

Odpowiedzi:

1

właśnie odtworzyłem skrzynkę i znalazłem dokładnie ten sam błąd. Wydaje mi się, że po uruchomieniu polecenia bq mk wcale nie wyodrębnia żadnych danych.

Jako obejście tego problemu sugeruję uruchomienie zadania Dataflow w celu wyodrębnienia danych do Cloud Storage jako pliku .avro, a następnie zaimportowania danych do zestawu danych w Bigquery.

Chris32
źródło
Nie wierzę, że pliki BigroTable avro można importować do BigQuery (mimo że akceptuje pliki avro)
Billy Jacobson
1

Myślę, że znalazłem problem, ponieważ byłem w stanie go odtworzyć. Komunikat o błędzie jest mylący, ale jak udokumentowano tutaj :

Plik schematu JSON należy utworzyć ręcznie i musi on znajdować się na komputerze lokalnym. Odwoływanie się do pliku schematu JSON przechowywanego w Cloud Storage lub na Dysku Google nie jest obsługiwane.

Zrobiłem kilka testów z szybkim startem Bigtable i działało to dla mnie dobrze:

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

Jedyne, co zrobiłem inaczej, to użycie ścieżki lokalnej jak w:

--external_table_definition=big-table-definition.json

Zmieniając to z powrotem na:

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

I dostałem ten sam błąd:

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
źródło
Co ciekawe, nie mam teraz czasu, aby to sprawdzić, ale dziękuję za wysiłek
Kris,