Python 使用自定义辅助工具\u线束\u容器\u映像从BigQuerySource读取失败,原因是“未找到所需的参数序列化\u源”

Python 使用自定义辅助工具\u线束\u容器\u映像从BigQuerySource读取失败,原因是“未找到所需的参数序列化\u源”,python,google-cloud-dataflow,apache-beam,Python,Google Cloud Dataflow,Apache Beam,我正在使用自定义的worker\u harnese\u container\u image和experience=beam\u fn\u api在数据流上尝试一个非常简单的管道: main.py: Dockerfile只是: 像这样发起: python3.7 -m main \ --runner DataflowRunner \ --project project_id \ --temp_location gs://bucket/tmp/ \ --region europe-west1 \ --

我正在使用自定义的worker\u harnese\u container\u image和experience=beam\u fn\u api在数据流上尝试一个非常简单的管道:

main.py:

Dockerfile只是:

像这样发起:

python3.7 -m main \
--runner DataflowRunner \
--project project_id \
--temp_location gs://bucket/tmp/ \
--region europe-west1 \
--zone europe-north1-c \
--worker_harness_container_image eu.gcr.io/project_id/image:latest \
--experiment=beam_fn_api
这是失败的

Caused by: org.apache.beam.runners.dataflow.util.Structs$ParameterNotFoundException: 
didn’t find required parameter serialized_source in {@type=BigQueryAvroSource, 
bigquery_export_schema={value={“fields”:[{“mode”:“NULLABLE”,“name”:“f0_“,”type”:“INTEGER”}]}, @type=http://schema.org/Text}, 
filename={value=gs://bucket/000000000000.avro, @type=http://schema.org/Text}}
请注意,使用AvroIO读取BigQuery作业输出的临时Avro文件效果很好,即:

    (
        p
        | "Read from Avro" >> beam.io.Read(beam.io.avroio.ReadFromAvro("gs://bucket/000000000000.avro"))
        | "ParDo" >> beam.ParDo(Dummy())
    )

根据我在书中读到的内容,数据流工作者使用的Docker容器目前是私有的,不能修改或定制。这正是worker_Harnese_container_image所做的,选择另一个容器。此外,我无法重现您的问题,也找不到此方法的文档,因此它似乎不受支持。我的建议是在不使用worker\u Harnese\u container\u映像的情况下运行管道,看看它是否能按预期工作。

您使用的是哪个版本的Beam SDK

使用版本时:

阿帕奇波束[gcp]==2.22.0

以下方法似乎较新,在使用自定义工作图像时,在此处可以正常工作:

from apache_beam.io.gcp.bigquery import ReadFromBigQuery, WriteToBigQuery
ReadFromBigQuery(
   table=config.TABLE,
   dataset=config.DATASET,
   project=config.BQ_INPUT_PROJECT))

你能提供更多关于你的环境的信息吗?我想重现错误您的环境是否有特殊的东西使您的query=SELECT 1运行?似乎它缺少了clause@rmesteves-我更新了问题,以提供有关复制机的更多详细信息。SELECT 1只是为了创建一个最小的复制器,它以与实际查询类似的方式失败。@rmesteves您是否能够复制相同的问题?我一直在尝试,但没有成功。如果此解决方案不起作用,我建议使用打开一张罚单,因为似乎需要使用其内部工具检查此问题,这将有助于收集更多正在发生的信息。
    (
        p
        | "Read from Avro" >> beam.io.Read(beam.io.avroio.ReadFromAvro("gs://bucket/000000000000.avro"))
        | "ParDo" >> beam.ParDo(Dummy())
    )
from apache_beam.io.gcp.bigquery import ReadFromBigQuery, WriteToBigQuery
ReadFromBigQuery(
   table=config.TABLE,
   dataset=config.DATASET,
   project=config.BQ_INPUT_PROJECT))