在Google BigQuery中取消嵌套3级依赖

时间:2019-11-27 16:59:36

标签: sql google-bigquery

我正在尝试使用BQ替换现有表中的架构。 BQ中的某些字段具有3-5级架构依赖性。 对于前comsalesorders.comSalesOrdersInfo.storetransactionid此字段嵌套在两个字段下。 由于我使用它来替换现有表,因此无法更改查询中的字段名称。 查询看起来与此类似

SELECT * REPLACE(comsalesorders.comSalesOrdersInfo.storetransactionid AS STRING) FROM CentralizedOrders_streaming.orderStatusUpdated, UNNEST(comsalesorders) AS comsalesorders, UNNEST(comsalesorders.comSalesOrdersInfo) AS comsalesorders.comSalesOrdersInfo

BQ启用了取消嵌套第一个架构字段,但提出了第二个嵌套的问题。 我需要对该查询进行哪些更改,以将UNNEST()用于此类依赖模式?

2 个答案:

答案 0 :(得分:0)

鉴于您没有架构,我将尝试提供一个广义的答案。请尝试了解这两个查询之间的区别。

-- Provide an alias for each unnest (as if each is a separate table)
select c.stuff
from table
left join unnest(table.first_level_nested) a
left join unnest(a.second_level_nested) b
left join unnest(b.third_level_nested) c

-- b and c won't work here because you are 'double unnesting'
select c.stuff
from table
left join unnest(table.first_level_nested) a
left join unnest(first_level_nested.second_level_nested) b
left join unnest(first_level_nested.second_level_nested.third_level_nested) c

答案 1 :(得分:0)

我不确定我是否理解您的问题,但是据我猜测,您想将一种列类型更改为另一种类型,例如STRING。

UNNEST 函数仅用于数组类型的列,例如:

“ comsalesorders”:[“ comSalesOrdersInfo”:{},comSalesOrdersInfo:{},comSalesOrdersInfo:{}]

但不适用于此类列:

“ comSalesOrdersInfo”:{“ storeTransactionID”:“ X1056-943462”,“ ItemsWarrenty”:0,“ currencyCountry”:“ USD”}

因此,如果您没有误解您的问题,我将进行如下查询:

SELECT *, CAST(A.comSalesOrdersInfo.storeTransactionID as STRING) 
FROM `TABLE`, UNNEST(comsalesorders) as A