【发布时间】:2021-09-23 11:45:02
【问题描述】:
我正在尝试将 BigQuery 表名作为 apache 梁管道模板的值提供程序传递。根据their documentation 和这个StackOverflow answer,可以将值提供者传递给apache_beam.io.gcp.bigquery.ReadFromBigQuery。
这就是我的管道代码
class UserOptions(PipelineOptions):
"""Define runtime argument"""
@classmethod
def _add_argparse_args(cls, parser):
parser.add_value_provider_argument('--input', type=str)
parser.add_value_provider_argument('--output', type=str)
pipeline_options = PipelineOptions()
p = beam.Pipeline(options=pipeline_options)
user_options = pipeline_options.view_as(UserOptions)
(p | 'Read from BQ Table' >> beam.io.gcp.bigquery.ReadFromBigQuery(
user_options.input
)
当我在本地运行代码时,命令行传递的user_options.input 的值为--input projectid.dataset_id.table
但是,我遇到了错误:
ValueError: A BigQuery table or a query must be specified
我试过了:
-
通过
projectid:dataset_id.table -
使用
bigquery.TableReference-> 不可能 -
使用
f'{user_options.input}' -
传递查询 -> 在本地运行时有效,但在 GCP 上调用模板时无效。错误说明:
在请求中未设置默认数据集时缺少数据集。", "errors": [ { "message": "Table name "RuntimeValueProvider(option: input, type: str, default_value: None)" 缺少数据集而没有请求中设置了默认数据集。", "domain": "global", "reason": "invalid" } ], "status": "INVALID_ARGUMENT" } } >
我错过了什么?
【问题讨论】:
标签: python google-cloud-platform google-bigquery apache-beam dataflow