在Google BigQuery创建StandardSQLTypeName.ARRAY类型Field时报NPE如何解决
解决方案
你遇到的NPE问题根因是Legacy SQL类型体系原生不支持ARRAY类型,可通过以下方法创建数组字段:
1. 切换使用Standard SQL模式
Legacy SQL模式本身无ARRAY类型定义,Standard SQL原生支持ARRAY<T>类型体系:
- 临时在查询控制台使用时,在SQL开头加声明
#standardSQL即可切换模式 - 代码调用BQ API时,显式使用Standard SQL类型枚举类,不要引用Legacy Type相关的枚举常量
2. 用DDL语句直接创建含数组字段的表
示例代码:
#standardSQL CREATE TABLE `你的项目ID.你的数据集名.你的表名` ( id INT64, tag_list ARRAY<STRING>, score_list ARRAY<INT64>, user_info ARRAY<STRUCT<user_id INT64, user_name STRING>> )
3. 代码定义Schema时使用REPEATED模式
BQ中ARRAY类型的底层实现就是REPEATED模式的字段,只要设置字段模式为REPEATED同时指定元素类型,即可完成数组字段创建,无需额外声明ARRAY类型。
以Java BigQuery客户端为例:
// 不要使用LegacySQLTypeName枚举 Field stringArrayField = Field.newBuilder("tag_list", StandardSQLTypeName.STRING) .setMode(Field.Mode.REPEATED) .build();
参考截图
内容的提问来源于stack exchange,提问作者Kenzo
相关产品推荐
相关产品推荐


