Google cloud dataflow 数据流SQL(GCP)中不支持使用STRUCT的嵌套行

Google cloud dataflow 数据流SQL(GCP)中不支持使用STRUCT的嵌套行,google-cloud-dataflow,google-cloud-pubsub,google-dataflow,Google Cloud Dataflow,Google Cloud Pubsub,Google Dataflow,使用Dataflow SQL,我希望阅读发布/订阅主题,丰富消息内容,并将消息写入发布/订阅主题 哪个数据流SQL查询将创建所需的输出消息 发布/订阅输入消息:{event_timestamp:1619784049000,device:{ID:some_ID} 所需的发布/订阅输出消息:{event_timestamp:1619784049000,device:{“ID:some_ID,”NAME:“some_NAME”} 我得到的是:{event_timestamp:1619784049000

使用Dataflow SQL,我希望阅读发布/订阅主题,丰富消息内容,并将消息写入发布/订阅主题

哪个数据流SQL查询将创建所需的输出消息

发布/订阅输入消息:{event_timestamp:1619784049000,device:{ID:some_ID}

所需的发布/订阅输出消息:{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

您需要在“投影选择零件”中创建结构

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

不幸的是,DataflowSQL目前不支持结构/子查询,但我们正在研究它。由于存在一些Apache Beam依赖项阻止其进展,我们目前无法提供ETA,但您可以跟踪其进展。

您可以将BQ表与数据流SQL管道连接起来吗?事实上,就像一个简单的查询。是的,我可以。比如:选择message\u table.device作为设备,选择pubsub.topic.project\u id.topic作为消息\u table连接bigquery.table.project\u id.dataflow\u sql\u dataset.devices作为设备上的设备。设备\u id=message\u table.device.id,这是您想要实现的吗?否则,我不明白你的封锁点我得到了什么:{event_timestamp:1619784049000,device:{ID:some_ID},NAME:some_NAME}想要什么:{event_timestamp:1619784049000,device:{ID:some_ID,NAME:some_NAME}。谢谢你,纪尧姆。我尝试了它,但在创建数据流作业期间,它给出了一个错误:exec.go:64,消息:SQL作业启动的参数无效/不受支持:查询使用了不受支持的SQL功能:不支持expr节点类型已解析\u MAKE_STRUCT}我的错误,我确信它会工作,因为它在SQL中工作。。。也许有一天我的答案会有效!但今天不行。我担心这个案子没有解决办法…谢谢你的帮助,我很感激!