1

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で

答えて

3

- あなたが標準SQLについて[]
で全体のテーブル参照をエスケープする必要があります。また、同じ理由

参照してくださいEscaping reserved keywords and invalid identifiers

+0

back-ticksを使用する必要があり、「テーブル全体の参照」とはプロジェクト、データセット、テーブルそれを試してみると、無効なテーブル、つまり 'メッセージ:無効なテーブル名:\' bigquery-public-data:samples.shakespeare \ '' –

+1

- https://cloud.google.com/bigqueryもチェックされています。標準のsqlでは、 ':'を '.'に置き換える必要があります。 –

+0

パーフェクト - ': 'を' .'で置き換えて、これを解決しました。私。ありがとうございました! –

関連する問題