【问题标题】:Nested rows using STRUCT are not supported in Dataflow SQL (GCP)Dataflow SQL (GCP) 不支持使用 STRUCT 的嵌套行
【发布时间】:2021-07-29 13:36:17
【问题描述】:

使用 Dataflow SQL,我想读取 Pub/Sub 主题、丰富消息并将消息写入 Pub/Sub 主题。

哪个 Dataflow SQL 查询将创建我想要的输出消息?

Pub/Sub 输入消息:{"event_timestamp":1619784049000, "device":{"ID":"some_id"}}

所需的 Pub/Sub 输出消息:{"event_timestamp":1619784049000, "device":{"ID":"some_id", "NAME":"some_name"}}

我得到的是:{"event_timestamp":1619784049000, "device":{"ID":"some_id"}, "NAME":"some_name" }

但我需要在“设备”属性中的名称。

SELECT message_table.device as device, devices.name as NAME 
FROM pubsub.topic.project_id.`topic` as message_table
  JOIN bigquery.table.project_id.dataflow_sql_dataset.devices as devices 
  ON devices.device_id = message_table.device.id

【问题讨论】:

  • 您可以将 BQ 表与您的 Dataflow SQL 管道连接起来吗?实际上就像一个简单的查询。
  • 是的,我可以。喜欢:选择 message_table.device 作为设备,“some_name”作为 NAME FROM pubsub.topic.project_id.topic 作为 message_table 加入 bigquery.table.project_id.dataflow_sql_dataset.devices 作为设备 ON devices.device_id = message_table.device.id跨度>
  • 而且,这是您想要实现的目标吗?否则,我不明白yoru阻塞点
  • 我得到了什么:{"event_timestamp":1619784049000, "device":{"ID":"some_id"}, "NAME":"some_name" }
  • 想要什么:{"event_timestamp":1619784049000, "device":{"ID":"some_id", "NAME":"some_name" }}。

标签: google-cloud-dataflow google-cloud-pubsub google-dataflow


【解决方案1】:

很遗憾,Dataflow SQL 目前不支持 STRUCT/Sub 查询,但我们正在努力解决这个问题。由于有一些 Apache Beam 依赖项阻碍了它的进展(Nested Rows Support、Upgrading Calcite),我们目前无法提供 ETA,但您可以在 issue tracker 上关注它的进展。

【讨论】:

    【解决方案2】:

    你需要在投影中创建一个结构体(SELECT部分​​)

    SELECT STRUCT(message_table.device.ID as ID , devices.name as NAME) as device
    FROM pubsub.topic.project_id.`topic` as message_table
      JOIN bigquery.table.project_id.dataflow_sql_dataset.devices as devices 
      ON devices.device_id = message_table.device.id
    

    【讨论】:

    • 谢谢你,纪尧姆。我试过了,但在创建数据流作业期间它给出了一个错误:“exec.go:64”,“消息”:“SQL 作业启动的参数无效/不受支持:查询使用不支持的 SQL 功能:不支持 expr 节点类型 RESOLVED_MAKE_STRUCT "}
    • 我的错,我确信它会工作,因为它在 SQL 中工作......也许有一天我的答案会有效!但不是今天。我担心这种情况没有解决方案......
    • 感谢您的帮助,不胜感激!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多