我试图在本地调试一个数据流作业,该作业批量上传到BigQuery,但当使用DirectRunning在本地运行时,BatchFileLoads会弹出
"code": 400,
"message": "Project id is missing",
"errors": [
{
"message": "Project id is missing",
"domain": "global",
"reason": "invalid"
}
],
我已经尝试过对项目idoptions.view_as(beam.options.pipeline_options.GoogleCloudOptions).project = PROJECT_ID
进行编码
并使用cli标志python mycode.py --dataset mydataset --project myprojectid
但没有运气。
据我所知,BigQueryBatchFileLoads正在从运行时值提供程序获取项目ID,我曾尝试在DoFn中调试值提供程序中的值,但无法解析任何值。
我是Dataflow/ApacheBeam的新手,所以我希望答案是良性的,因为这一定是一个非常常见的用例。
如有任何建议,我们将不胜感激。
假设您使用的是WriteToBigQuery,您是否尝试过传递包含项目名称的表名?
此外,您使用的Beam版本是什么?
我最近在使用DirectRunner时也遇到了这个问题。花了很多时间进行故障排除并找到了一些解决方法!
在WriteToBigQuery步骤中,
-
Workaround 1(将使用模板(
使用
project=[PROJECT]
参数或table=[PROJECT]:[DATASET].[TABLE]
参数直接指示项目。 -
变通办法2(模板时不起作用(
如果在CLI中运行代码时指示了不带项目的表参数,即
table=[DATASET].[TABLE]
和已解析的--project [PROJECT]
参数,请使用以下语法table="{}".format("[DATASET].[TABLE]")
。我不知道为什么会这样,但我猜这是Apache Beam的一个错误。
2.30.0测试。
希望它能有所帮助!