模板化数据流中的 Pub/Sub 输入完全忽略 NestedValueProvider

Posted

技术标签:

【中文标题】模板化数据流中的 Pub/Sub 输入完全忽略 NestedValueProvider【英文标题】:Pub/Sub input in templated Dataflow is completely ignoring NestedValueProvider 【发布时间】:2020-09-13 05:18:23 【问题描述】:

我已经为从 Pub/Sub 读取消息的 Dataflow 创建了模板 问题是 NestedValueProvider 无法修改通过选项值发送的内容,我不知道为什么 - 在某些屏幕下方

传递的参数:

代码:

结果:

如果有人问我为什么需要嵌套它 - 我只想添加订阅 ID 并在路径的其余部分添加前缀..


编辑

我的步骤:

1.Created 管道从 Pub/Sub 订阅中读取,订阅名称使用 NestedValueProvider 创建订阅名称

pipeline.apply(
                            "Read PubSub messages",
                            PubsubIO.readStrings().fromSubscription(
                                    NestedValueProvider.of(
                                            options.getSubscriptionID(),
                                            input -> "projects/ozone-analytics-dev/subscriptions/" + input)
                            )
                    )

2.创建模板

3. 使用有效且现有的订阅 ID 运行模板

4.创建数据流作业时出现错误(我认为该作业甚至没有启动,并且此错误是通过一些预验证导致的,因为我可以在本地或通常使用 DataflowRunner 但不能通过模板运行此流)

【问题讨论】:

您可以尝试以这种格式传递您的订阅吗?项目//subscriptions/ 例如,如果您的项目 id 为 1234,订阅名称为 bbb,则为 projects/1234/subscriptions/bbb 是的,这会起作用 - 但我的问题是我想通过 NestedValueProvider (projects/1234/subscriptions/bbb) 用全名包装我的订阅 ID,如 bbb。但是当我启动模板时(如果这个包装在运行后确实有效)谷歌甚至不想创建工作模板。发生某种无效验证或某事。正如我所说,我可以通过 Dataflow 上的控制台运行它 - 只有模板创建会执行一些奇怪的操作 我了解到您只想使用订阅名称。你能分享你按什么顺序做的步骤吗?我想更好地了解正在发生的事情 【参考方案1】:

分析后 - 这是一个仅与模板创建验证相关的 Google Dataflow 错误(因为 Dataflow 运行的所有其他方式都表现正确)

我为此创建了问题 https://issuetracker.google.com/u/1/issues/157584222

现在它就是这个问题的答案

【讨论】:

我全心全意地希望我能在几天前​​找到这个,而不是浪费大约 3 天的时间来拔掉我的头发。感谢您发布此内容,您使我免于完全发疯

以上是关于模板化数据流中的 Pub/Sub 输入完全忽略 NestedValueProvider的主要内容,如果未能解决你的问题,请参考以下文章

数据流作业 GCS 到 Pub/sub 最大批量大小

数据流模板 Cloud Pub/Sub 主题与订阅 BigQuery

Gcloud pub/sub 忽略配置?

有没有办法让 Pub/Sub -> Dataflow -> BigQuery 模板处理每条消息的多个记录?

Google Cloud Dataflow Pub/Sub to BigQuery 模板 WriteSuccessfulRecords wall time

Google Cloud Pub/Sub 中的积压工作