取消嵌套并选择列的最佳方法(如果表具有重复记录列,而该记录本身包含许多重复记录列

时间:2019-02-14 02:15:06

标签: google-bigquery

比方说,我有一个保存在Bigquery表中的XML数据,因此大查询结构可能是一些普通的原子列,然后是重复记录列,在该记录列内是一些原子列和新的重复记录列,这对于许多人来说列。

现在,我想知道最佳的嵌套方法,主要是当我们需要每个列中的数据并应用聚合时,让重复列中的say(sum)出现。

例如,如果我将查询写为 选择名称,从测试中选择总和(unit.unitprice),unnest(product1)p,Unnest(p.unit)单位-这里的单位是重复产品记录列中的重复记录列。

它可以工作,但是因为我在另一列中有另一种产品(例如),所以如果我写

从测试中选择名称,总和(unit1.unitprice),总和(unit2.tax),unnest(产品1)p1,Unnest(p1.unit)unit1,unnest(产品2)p2,Unnest(p2.unit)unit2 < / p>

这里的问题将开始,因为所有三个笛卡尔积都会给出更多的行,并且总和将是错误的。

这只是一个例子,表中有更多这样的列,我想在其上应用sum和all。

可以使用类似结构的JSON文件数据为:-

{“ SKU”:“ 123456”,“ time”:“ 2018-08-27T16:42:04.000”,“ fan”:[{“ sequence”:1,“ unit”:[{“ sell”: “ 126.89”,“成本”:“ 126.89”},{“出售”:“ 126.89”,“成本”:“ 126.89”}]],“产品”:[{“费用”:“ 40”,“原因”: “ testing”},{“ fee”:“ 400”,“ reason”:“ testing1”}]}}],“ AC”:[{“ sequence”:1,“ unit”:[{“ sell”:“ 1500 “,” cost“:” 1500“}]},{” sequence“:2,” unit“:[{” sell“:” 1500“,” cost“:” 1500“},{” sell“:” 200 “,” cost“:” 250“}]}}}

查询:-此查询给出正确的总和

nonpii_air_ticketed.test中选择any_value(sku),sum(unit.cost),unnest(fan)f,unnest(f.unit)单位

当我们以不必要的单位总和添加另一个组件(产品)时,总和会发生变化并给出错误的值,如果我们有更多类似的列,则同样适用。

nonpii_air_ticketed.test中选择任意值(sku),总和(单位成本),总和(fee.fee),嵌套(fan)f,嵌套(f.unit)单位,嵌套(f.product)费用

Table schema with value

1 个答案:

答案 0 :(得分:1)

以下是用于BigQuery标准SQL

#standardSQL
SELECT 
  ANY_VALUE(sku), 
  SUM((SELECT SUM(cost) FROM f.unit)), 
  SUM((SELECT SUM(fee) FROM f.product)) 
FROM nonpii_air_ticketed.test, 
UNNEST(fan) f