我正在尝试使用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()用于此类依赖模式?
答案 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