BigQuerySource
クラス内でquery
パラメータを使用する単純なデータフロージョブを作成しようとしています。DataflowからBigQuerySourceへの単純なクエリが例外をスローする
簡単に言えば、BigQuerySource
クラスを使用してBigQueryテーブルにアクセスし、それに対してフィルタリングすることができます。私はBigQuerySource
を使用してBigQueryテーブルに対して直接照会/フィルタリングすることはできません。
ここにいくつかのコードがあります。フィルタリングは、インライン、私のデータフローパイプライン内、正常に動作します:単一行のクエリとその中間のスタンザを交換
import argparse
import apache_beam as beam
parser = argparse.ArgumentParser()
parser.add_argument('--output', required=True)
known_args, pipeline_args = parser.parse_known_args(None)
p = beam.Pipeline(argv=pipeline_args)
source = 'bigquery-public-data:samples.shakespeare'
rows = p | 'read'>>beam.io.Read(beam.io.BigQuerySource(source))
f = rows | 'filter' >> beam.Map(lambda row: 1 if (row['word_count'] > 1) else 0)
f | 'write' >> beam.io.WriteToText(known_args.output)
p.run()
エラーが発生します。
f = p | 'read' >> beam.io.Read(beam.io.BigQuerySource('SELECT 1 FROM ' \
+ 'bigquery-public-data:samples.shakespeare where word_count > 1'))
返されるエラーは、構文エラーのようです。
(a29eabc394a38f62): Workflow failed. Causes:
(a29eabc394a38cfa): S04:read+write/Write/WriteImpl/WriteBundles+write/Write/WriteImpl/Pair+write/Write/WriteImpl/WindowInto(WindowIntoFn)+write/Write/WriteImpl/GroupByKey/Reify+write/Write/WriteImpl/GroupByKey/Write failed.,
(fb6d0643d7f13886): BigQuery execution failed.,
(fb6d0643d7f13b03): Error: Message: Encountered " "-" "- "" at line 1, column 59. Was expecting: <EOF>
BigQueryプロジェクト名で-
文字をエスケープする必要がありますか? BigQueryのレガシーSQLで
を
back-ticks
を使用する必要があり、「テーブル全体の参照」とはプロジェクト、データセット、テーブルそれを試してみると、無効なテーブル、つまり 'メッセージ:無効なテーブル名:\' bigquery-public-data:samples.shakespeare \ '' –- https://cloud.google.com/bigqueryもチェックされています。標準のsqlでは、 ':'を '.'に置き換える必要があります。 –
パーフェクト - ': 'を' .'で置き換えて、これを解決しました。私。ありがとうございました! –