首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重复字段中的大查询更新结构为null

重复字段中的大查询更新结构为null
EN

Stack Overflow用户
提问于 2018-12-17 22:37:58
回答 2查看 4.6K关注 0票数 2

在中,我试图对重复字段进行更新。

作为比较,这是有效的(或者至少被标记为有效),但当然并不是实际更新字段。

代码语言:javascript
运行
复制
UPDATE my.table t
SET my_field = ARRAY(
  SELECT AS STRUCT g.foo, g.bar, g.struct_to_set_null
  FROM unnest(t.groups) as g
), ... FROM ... etc

struct_to_set_null设置为null将产生一个错误:

代码语言:javascript
运行
复制
UPDATE my.table t
SET my_field = ARRAY(
  SELECT AS STRUCT g.foo, g.bar, null as struct_to_set_null
  FROM unnest(t.groups) as g
), ... FROM ... etc

Value of type ARRAY<STRUCT<... (really long and cut off) cannot be assigned to groups, which has type <ARRAY,STRUCT<... (same, really long, cut off)

我可以看到,所讨论的字段是RECORDNULLABLE类型的,因此我认为允许将其设置为null。有什么办法能让这件事奏效吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-18 17:23:09

问题是,BigQuery并不是仅仅从NULL文字推断struct字段的类型;您需要更明确一点。下面是一个示例:

代码语言:javascript
运行
复制
CREATE TABLE tmp_elliottb.UpdateTable (
  my_field ARRAY<STRUCT<foo INT64, bar INT64, struct_to_set_null STRUCT<x STRING, y BOOL, z INT64>>>
);

UPDATE tmp_elliottb.UpdateTable
SET my_field = ARRAY(
  SELECT AS STRUCT foo, bar, NULL AS struct_to_set_null FROM UNNEST(my_field)
)
WHERE true;

这给了我:

代码语言:javascript
运行
复制
Value of type ARRAY<STRUCT<foo INT64, bar INT64, struct_to_set_null INT64>> cannot be assigned to my_field, which has type ARRAY<STRUCT<foo INT64, bar INT64, struct_to_set_null STRUCT<x STRING, y BOOL, z INT64>>> at [4:16]

相反,我可以做的是使用一个生成IFNULL表达式,但是在其中一个分支上有struct_to_set_null,以强制输出类型:

代码语言:javascript
运行
复制
UPDATE tmp_elliottb.UpdateTable
SET my_field = ARRAY(
  SELECT AS STRUCT
    foo, bar,
    IF(false, struct_to_set_null, NULL) AS struct_to_set_null 
  FROM UNNEST(my_field)
)
WHERE true;

或者,我也可以使用SELECT * REPLACE

代码语言:javascript
运行
复制
UPDATE tmp_elliottb.UpdateTable
SET my_field = ARRAY(
  SELECT AS STRUCT * REPLACE (IF(false, struct_to_set_null, NULL) AS struct_to_set_null )
  FROM UNNEST(my_field)
)
WHERE true;
票数 2
EN

Stack Overflow用户

发布于 2018-12-18 07:39:05

重复是数组类型,因此不能将其设置为NULL

目前,BigQuery在NULLARRAYs方面拥有以下两个限制

  • 如果查询结果有包含BigQuery元素的ARRAYs,则ARRAYs会引发错误,尽管这种ARRAYs可以在查询中使用。
  • BigQuery在查询结果中将NULL ARRAY转换为空ARRAY,尽管在查询NULL和空ARRAYs中有两个不同的值。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53823992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档