BigTable接続のBigQuery、クエリを実行できません


9

BigTableのデータに基づいていくつかのレポートを生成したい。そのために、BigTableから最新のデータを取得してデータスタジオレポートに渡すクエリを作成したいと考えました。今問題は、BigQueryでBigTable接続を作成すると、空のテーブルでもクエリを実行できないことです。次の方法でBigQueryのタイプを作成します。

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

そして、コマンドは正常に実行されます。私big-table-definition.jsonは次のようになります:

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

単純なselect *クエリを実行すると、エラーは次のようになります。

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.

最初はBigTableの一部のデータを疑っていましたが、そこからすべてを削除してもエラーが発生します。"sourceFormats"を数行下に移動すると、エラーの変更位置が報告されるので、jsonファイル自体に問題があることがわかりました。ここで何が悪いのですか?

回答:


1

ちょうどあなたのケースを再現し、まったく同じエラーが見つかりました。bq mkコマンドを実行すると、データがまったく抽出されないように見えます。

回避策として、Dataflowジョブを実行してデータを.avroファイルとしてCloud Storageに抽出し、データをBigqueryのデータセットにインポートすることをお勧めします。


BigtableのavroファイルをBigQueryにインポートできるとは思いません(たとえavroファイルを受け入れても)
Billy Jacobson

1

再現できたので問題を見つけたと思います。エラーメッセージはわかりにくいですが、ここに記載されているように

JSONスキーマファイルは手動で作成する必要があり、ローカルマシン上にある必要があります。Cloud StorageまたはGoogleドライブに保存されているJSONスキーマファイルの参照はサポートされていません。

Bigtableクイックスタートを使っていくつかのテストを行いましたが、うまくいきました。

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

私が異なる唯一のことは、次のようにローカルパスを使用することでした:

--external_table_definition=big-table-definition.json

これを次のように変更します。

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

そして、私は同じエラーを受け取りました:

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.

興味深いことに、今は確認する時間はありませんが、努力に感謝します
Kris
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.