我正在尝试使用BQ替换现有表中的模式。BQ中的某些字段具有3-5级架构依赖关系。对于Ex.comsalesorders.comSalesOrdersInfo.storetransactionid此字段嵌套在两个字段下。因为我使用它来替换现有的表,所以我不能在查询中更改字段名。该查询如下所示
SELECT * REPLACE(comsalesorders.comSalesOrdersInfo.storetransactionid AS STRING) FROM CentralizedOrders_streaming.orderStatusUpdated, UNNEST(comsalesorders) AS comsalesorders, UNNEST(comsalesorders.comSalesOrdersInfo) AS comsalesorders.comSalesOrdersInfoBQ允许取消嵌套第一个模式字段,但在第二个嵌套时出现问题。为了将UNNEST()用于此类禁用模式,我需要对此查询进行哪些更改?
发布于 2019-11-28 01:04:24
鉴于您没有模式,我将尝试提供一个通用的答案。请尝试理解这两个查询之间的区别。
-- 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发布于 2019-11-29 00:30:37
我不确定我是否理解了您的问题,但正如我可以猜测的那样,您希望将一种列类型更改为另一种类型,例如字符串。
UNNEST函数仅用于数组类型的列,例如:
"comsalesorders":"comSalesOrdersInfo":{},comSalesOrdersInfo:{},comSalesOrdersInfo:{}
但不是这样的列:
"comSalesOrdersInfo":{"storeTransactionID":"X1056-943462","ItemsWarrenty":0,"currencyCountry":"USD"}
因此,如果a没有误解你的问题,我会这样查询:
SELECT *, CAST(A.comSalesOrdersInfo.storeTransactionID as STRING)
FROM `TABLE`, UNNEST(comsalesorders) as Ahttps://stackoverflow.com/questions/59075121
复制相似问题