Bigquery中使用GENERATE_ARRAY为声明数组赋值报错如何解决
问题原因
报错本质是声明的数组类型与赋值表达式返回的数组类型不匹配,同时代码中多余的SELECT嵌套、声明语法的空格问题都会干扰BigQuery的类型推断,触发类型转换失败。
解决方案
方案1:保留INT64数组类型(推荐)
如果你需要的是整数类型数组,修正声明语法+去掉多余的SELECT嵌套即可,修正后代码如下:
DECLARE arr ARRAY<INT64>; SET arr = GENERATE_ARRAY(0,100,10);
说明:GENERATE_ARRAY输入参数全为整数时默认返回ARRAY<INT64>类型,本身就是数组结构,不需要额外套SELECT查询。
方案2:匹配FLOAT64数组类型
如果你确实需要浮点数类型的数组,直接修改声明的数组类型即可:
DECLARE arr ARRAY<FLOAT64>; SET arr = GENERATE_ARRAY(0,100,10);
特殊场景:必须嵌套SELECT的情况
如果你的实际业务逻辑需要从查询语句中生成数组,需要确保查询返回的数组类型和声明类型一致,仍报错时可以手动指定类型转换:
DECLARE arr ARRAY<INT64>; SET arr = (SELECT ARRAY(SELECT CAST(num AS INT64) FROM UNNEST(GENERATE_ARRAY(0,100,10)) num));
内容的提问来源于stack exchange,提问作者gcp
相关产品推荐
相关产品推荐

