如何使用嵌套条件从更新表更新重复的嵌套记录?

时间:2019-08-27 04:10:18

标签: sql google-bigquery bigquery-standard-sql

我们在Bigquery中有两个表,一个包含我们的主要数据,另一个将待处理的更新流式传输到其中,这些表将使用计划的查询来应用。 一旦合并到目标表中,有一种方法可以使用DML删除源表中的记录(待更新)。

根据我在网上可以找到的文档,我无法在BQ中导航重复/嵌套的记录。我们的数据是重复记录的4个层次,每个给定层次的每个条目都有一个ID字段。我们必须找到最里面的子记录,并更新其中的一些字段。

我尝试编译发现的示例,但无法弄清楚如何正确地为每个孩子进行子选择。

data_table中的主表条目示例

a.a_id: '123',
a.a_children: [
  b.b_id: '1234',
  b.b_children: [
    c.c_id: '12345',
    c.c_children: [
      event_id: 'abc',
      sold: false,
      cost: 0
    ]
  ]
]

来自updates_table的示例更新条目

a_id: '123', b_id: '1234', c_id: '12345', event_id: 'abc', sold: true, cost: 1.23

每个子级字段可能有多个条目,但是更新记录应唯一地标识c.children中的一个条目并对其进行更新,而不会影响或删除其对等项。

我还尝试了一种UDF,该UDF将接受顶级数组并查找+修改底部字段,但是我无法获得udf签名以完全匹配,并且BigQuery不会打印完整的错误消息(截断长消息)-因此我无法正确定义我的udf签名。

更新查询应仅使用匹配的父项a_id,b_id,c_id和event_id值更新给定的c.children条目,而不会影响其他现有条目或删除存在但我们未更新的其他字段。

0 个答案:

没有答案