2017-07-06 131 views
2

我正在尝试执行您认为在BigQuery中的一项简单操作;我试图更新一个BigQuery表中的嵌套字段,这是360导出的结果。更新BigQuery表中的嵌套字段

这里是我的查询:

#standardSQL 
UPDATE `dataset_name`.`ga_sessions_20170705` 
SET hits.eventInfo.eventLabel = 'some string' 
WHERE TRUE 

但我收到此错误信息:

Error: Cannot access field eventInfo on a value with type ARRAY<STRUCT<item STRUCT<transactionId INT64, currencyCode STRING>, isEntrance BOOL, minute INT64, ...>> at [3:10]

如何更新此嵌套领域?

回答

1

hits是一个数组,因此您需要使用数组子查询来分配给它。它看起来像这样:

#standardSQL 
UPDATE `dataset_name`.`ga_sessions_20170705` 
SET hits = 
    ARRAY(
    SELECT AS STRUCT * REPLACE(
     (SELECT AS STRUCT eventInfo.* REPLACE('some string' AS eventLabel)) AS eventInfo) 
    FROM UNNEST(hits) 
) 
WHERE TRUE; 
+0

谢谢你的超级快速回复@Elliot!我在运行查询时遇到此错误:'除非使用SELECT AS STRUCT在[4:3]'构建STRUCT值,否则'ARRAY子查询不能有多个列。不幸的是,这对我来说有点神秘,因为我对BigQuery很陌生。 –

+0

啊,我忘了'SELECT AS STRUCT'。现在这个工作吗? –

+0

嗯,现在错误说错误:错误:类型ARRAY 的值,isEntrance BOOL,分钟INT64,... >>不能分配给匹配,其类型为ARRAY ,isEntrance BOOL,minute INT64,... >> at [4:3]' –