官网文档说如果Partition列有多个。分区列值会按照顺序依次比较,最终得到对应的分区。
partition列:date(DATE 类型) 和 id(INT 类型)
p201701_1000: [(MIN_VALUE, MIN_VALUE), ("2017-02-01", "1000") )
p201702_2000: [("2017-02-01", "1000"), ("2017-03-01", "2000") )
p201703_all: [("2017-03-01", "2000"), ("2017-04-01", MIN_VALUE))
2017-01-01, 200 --> p201701_1000
2017-01-01, 2000 --> p201701_1000
2017-02-01, 100 --> p201701_1000
2017-02-01, 2000 --> p201702_2000
2017-02-15, 5000 --> p201702_2000
2017-03-01, 2000 --> p201703_all
2017-03-10, 1 --> p201703_all
2017-04-01, 1000 --> 无法导入
2017-05-01, 1000 --> 无法导入
上面说(2017-01-01, 2000)是在p201701_1000分区上。
那按照语句p201701_1000不是应该是date<=2017-0-01 and id<=1000吗?
2000比1000大,那这个分区列加上id(INT 类型) 就没意义啊,只用到date(DATE 类型)。加上id列,对数据的划分更迷惑了。
如果两个条件不是and,那(2017-05-01, 1000)无法导入说明也不是 or 。
搞不懂。
2023-03-28更新
我的问题是为什么不干脆只按照date列分区?上面例子我想到唯一实际有用就是过滤了id为空的数据。
(官网有说NULL 值放在最小值的分区中,是不是只看首列?)
例子中的多列分区的目的是什么?有实际场景应用吗?