ValueError: A BigQuery table or a query must be specified with beam.io.gcp.bigquery.ReadFromBigQuery(ValueError:必须使用beam.io.gcp.bigquery.ReadFromBigQuery指定BigQuery表或查询)
问题描述
我正在尝试传递一个BigQuery表名作为一个ApacheBEAM管道模板的值提供者。根据their documentation和StackOverflow answer,可以将值提供程序传递给apache_beam.io.gcp.bigquery.ReadFromBigQuery
。
这就是我的管道代码
当我本地运行代码时,命令行传递user_options.input
is--input projectid.dataset_id.table
但是,我遇到错误:
我已尝试:
传递
projectid:dataset_id.table
使用
bigquery.TableReference
-&>不可能使用
f'
{user_options.input}'
传递查询-&>在本地运行时有效,但在GCP上调用模板时无效。错误语句:
缺少数据集,但请求中未设置默认数据集。错误:[{";Message";:";Table name";RounmeValueProvider(Option:Input,type:Str,Default_Value:None)],";请求中未设置默认数据集。";,";域";:";全局";,";原因";:";无效";},";状态";:&QOOT;INVALID_ARGUMENT&QOOT;}}>;
我错过了什么?
推荐答案
table
参数必须按名称传递给ReadFromBigQuery
。
BigQuerySource
(已弃用)接受table
作为第一个参数,因此您可以按位置(docs)传递一个。但ReadFromBigQuery
预期gcs_location
作为第一个参数(docs)。因此,如果您正在将代码从使用BigQuerySource
移植到使用ReadFromBigQuery
,并且您没有显式地按名称传入表,那么它将失败,并显示您收到的错误。
这里有两个工作示例和一个不工作的示例:
这篇关于ValueError:必须使用beam.io.gcp.bigquery.ReadFromBigQuery指定BigQuery表或查询的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!