针对多个密钥的Spark orc分区策略

时间:2017-08-03 12:42:28

标签: apache-spark orc

存储事务时,通常会有一些不同的键来过滤不同用例的查询。例如。卡ID,帐号,客户号,日期

交易可按日期分配为:

jdbcDF.write.format("orc").partitionBy("TX_Date").save("transactions")  

现在,我可以快速汇总特定月份的交易,但如果我想基于例如汇总交易,该怎么办?客户没有?

在每个事务行中存储事务ID是否更好,并保留由最常用键分配的单独查找表(链接表)? 例如。以下查找表:

卡ID | TRANSID

客户编号| TRANSID

帐户号码| TransID

TX_Date | TRANSID

这是火花的反模式吗?兽人开发还是有更好的方法来“索引”不同的键? (在我已经使用行索引的orc文件中)

1 个答案:

答案 0 :(得分:0)

来自docs

  

索引是一种数据结构,包括每列的最小值和最大值以及每列中的行位置

ORC是一种列式文件格式,它没有按照SQL的方式编制索引。 partitionBy控制数据位置或文件的拆分方式。

通过选择不同的partitionBy键确保行均匀分布在文件中,并运行测试以确认您做出了正确的选择。