【问题标题】:Dataflow BigQuery read from ValueProvider: 'StaticValueProvider' object has no attribute 'projectId'从 ValueProvider 读取的 Dataflow BigQuery:“StaticValueProvider”对象没有属性“projectId”
【发布时间】:2021-05-04 09:02:21
【问题描述】:

我将 Python SDK 用于 Apache Beam。我试图通过 ValueProvider 从 BigQuery 读取数据(因为 documentation 声明这些是允许的)。

def run(bq_source_table: ValueProvider,
        pipeline_options=None):

    pipeline_options.view_as(SetupOptions).setup_file = "./setup.py"

    with beam.Pipeline(options=pipeline_options) as pipeline:
        (
            pipeline
            | "Read from BigQuery" >> ReadFromBigQuery(table=bq_source_table)
        )

选项声明如下:

class CPipelineOptions(PipelineOptions):

    @classmethod
    def _add_argparse_args(cls, parser):
        parser.add_value_provider_argument(
            "--bq_source_table",
            help="The BigQuery source table name..\n"
                 '"<project>:<dataset>.<table>".'
        )

执行管道会产生以下错误:

AttributeError: 'StaticValueProvider' 对象没有属性 'projectId' [在运行'从 BigQuery/Read/SDFBoundedSourceReader/ParDo(SDFBoundedSourceDoFn)/SplitAndSizeRestriction' 读取时]

关于如何解决此问题的任何建议?我确实想使用 Flex 模板。


编辑:值得一提的是query 参数确实支持ValueProvider。这可能是一个错误吗?

【问题讨论】:

    标签: google-bigquery google-cloud-dataflow apache-beam


    【解决方案1】:

    我唯一的建议是使用 Flex 模板。

    【讨论】:

    • 我目前通过向 BigQuery 连接器提供源查询 ValueProvider 来解决此问题。连接器不接受源表名称的 ValueProvider 仍然很奇怪。
    猜你喜欢
    • 1970-01-01
    • 2019-04-30
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多