我目前正在使用 Hive,它有分区表。假设这是我的数据:
Country City DailySale
USA NY 200.2
USA SF 190.5
CAN TR 390.4
我可以定义我的表
create table SALES_DATA(
Country STRING,
City STRING,
DailySale BIGDECIMAL
) PARTITIONED BY (Country, City)
然后我在 HDFS 上创建目录结构:
SALES_DATA/
Country=USA/
City=NY/
data-file-0001
data-file-0002
... the rest omitted for brevity...
然后分区修剪可以应用于查询,如
SELECT SUM(DailySale) FROM SALES_DATA
WHERE Country='USA' and City='SF'
Hive 引擎将修剪除一个以外的所有分区。超级有效和最佳。
我想在 Postgres 上实现类似的东西。我将拥有包含聚合数据的不可变表,并希望为它们应用类似的东西。我正在尝试通过它 https://www.postgresql.org/docs/13/ddl-partitioning.html 但如果这是我需要的,请不要真正遵循。
在这种情况下,对国家和城市进行索引可能会比分区好得多。
如果你真的打算使用分区,postgres 总是使用 CHECK 约束来修剪分区。解决此问题的一种方法是:
当遵循此过程并在 SalesData 上进行选择时,postgres 将修剪与检查约束不匹配的表。