从 ValueProvider 读取的 Dataflow BigQuery:“StaticValueProvider”对象没有属性“projectId”

Posted

技术标签:

【中文标题】从 ValueProvider 读取的 Dataflow BigQuery:“StaticValueProvider”对象没有属性“projectId”【英文标题】:Dataflow BigQuery read from ValueProvider: 'StaticValueProvider' object has no attribute '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。这可能是一个错误吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

我目前通过向 BigQuery 连接器提供源查询 ValueProvider 来解决此问题。连接器不接受源表名称的 ValueProvider 仍然很奇怪。

以上是关于从 ValueProvider 读取的 Dataflow BigQuery:“StaticValueProvider”对象没有属性“projectId”的主要内容,如果未能解决你的问题,请参考以下文章

从表中读取 BigQuery 数值数据类型

MVC4 Model ValueProvider

使用 TextIO 和 ValueProvider 创建数据流模板时出错

如何在 R studio(闪亮的 App)中的 max() 函数中传递输入?

客快物流大数据项目(四十六):Spark操作Kudu dataFrame操作kudu

如果字典为空,则可编码问题