【问题标题】:Dynamic bigquery query in dataflow template数据流模板中的动态 bigquery 查询
【发布时间】:2017-10-05 21:35:52
【问题描述】:

我编写了一个 Dataflow 作业,当我手动运行它时效果很好。以下是相关部分(为清楚起见,删除了一些验证代码):

parser.add_argument('--end_datetime',
                    dest='end_datetime')
known_args, pipeline_args = parser.parse_known_args(argv)

query = <redacted SQL String with a placeholder for a date>
query = query.replace('#ENDDATETIME#', known_args.end_datetime)

with beam.Pipeline(options=pipeline_options) as p:
    rows = p | 'read query' >> beam.io.Read(beam.io.BigQuerySource(query=query, use_standard_sql=True))

现在我想创建一个模板并安排它使用动态 ENDDATETIME 定期运行。据我了解,为了做到这一点,我需要根据本文档将 add_argument 更改为 add_value_provider_argument:

https://cloud.google.com/dataflow/docs/templates/creating-templates

不幸的是,当我需要 ValueProvider 值时,它们似乎不可用,它们仅在管道本身内部可用。 (如果我在这里错了,请纠正我......)。所以我有点卡住了。

是否有人对我如何在 Dataflow 模板中的查询中获取动态日期有任何指示?

【问题讨论】:

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


    【解决方案1】:

    Python 目前仅支持 FileBasedSource IO 的 ValueProvider 选项。您可以通过单击您使用的链接上的 Python 选项卡来查看: https://cloud.google.com/dataflow/docs/templates/creating-templates

    在“管道 I/O 和运行时参数”部分下。

    【讨论】:

    • 是的,但是 ValueProvider 可以在其他非 IO 方法中工作。例如,该页面上的“在函数中使用 ValueProvider”示例在 ParDo 中使用 ValueProvider 值。因此,解决此问题的一种方法是修改 DoFn 中的查询变量,但我看不到以可在后续管道步骤中使用的方式将该修改后的变量返回到主程序的方法。
    • 与 Java 中发生的情况不同,Python 中的 BigQuery 不使用自定义源。换句话说,它没有完全在 SDK 中实现,但在后端也包含部分内容。目前,只有本机(不是自定义源)可以使用模板。有计划将 BigQuery 添加为自定义。
    • 我的意思是只有自定义来源可以使用模板。 (其余的都是正确的)。我的意思是指定“本机”与“自定义”相反,因此本机源不能使用模板(Python BigQuery 的当前情况)。以下是将 BigQuery 添加为自定义源的计划:issues.apache.org/jira/browse/BEAM-1440
    • 了解非常有用。谢谢!
    • 您好! @MaríaGarcíaHerrero 对此有何更新?作为最初的问题,我需要模板化参数来使用 Python SDK 格式化 BigQuery 查询
    猜你喜欢
    • 2021-05-23
    • 2018-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多