官网文档说如果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-02-01 and id<=1000吗?
2000比1000大,那这个分区列加上id(INT 类型) 就没意义啊,只用到date(DATE 类型)。加上id

文章探讨了一个数据库分区问题,其中分区基于日期和ID两个字段。按照分区定义,数据分配似乎首先基于日期,只有当日期不匹配时才会考虑ID。作者提到,这种分区方法可能导致ID列在某些情况下几乎不起作用,且存在一定的不合理性。经过测试和进一步学习,确认分区判断主要依赖第一列,即日期,如果满足条件则不再检查第二列,除非是区间上限的情况。
最低0.47元/天 解锁文章
1508





