如何通过BigQuery查询对现有表过滤后创建分区表?
解决BigQuery按整数列创建分区表的问题
问题原因
BigQuery不支持直接将普通整数列作为分区键,必须使用RANGE_BUCKET()函数配合GENERATE_ARRAY()来定义整数分区的范围区间,这也是你收到报错的核心原因。
正确实现语句
针对你的场景,要过滤col2 < 5的数据,同时按part_col创建分区表,可使用以下SQL:
CREATE OR REPLACE TABLE tmp.part_example PARTITION BY RANGE_BUCKET(part_col, GENERATE_ARRAY(1, 2, 1)) AS SELECT * FROM tmp.toy WHERE col2 < 5;
关键说明
GENERATE_ARRAY(1, 2, 1):生成从1到2、步长为1的数组,对应你的part_col取值(1和2),会创建两个分区:包含part_col=1的分区和包含part_col=2的分区。- 如果后续
part_col会有更大的取值,比如可能到10,可调整数组参数为GENERATE_ARRAY(1, 10, 1),这样会自动覆盖所有1到10之间的整数分区。 RANGE_BUCKET()函数会将part_col的值映射到对应的数组区间,从而实现按整数列分区的效果。
验证结果
执行上述语句后,你可以通过查看表的分区信息,确认分区已按part_col的取值正确创建,且数据已过滤掉col2 >=5的行。
内容的提问来源于stack exchange,提问作者Ottpocket
相关产品推荐
相关产品推荐

