存储事务时,通常会有一些不同的键来过滤不同用例的查询。例如。卡ID,帐号,客户号,日期
交易可按日期分配为:
jdbcDF.write.format("orc").partitionBy("TX_Date").save("transactions")
现在,我可以快速汇总特定月份的交易,但如果我想基于例如汇总交易,该怎么办?客户没有?
在每个事务行中存储事务ID是否更好,并保留由最常用键分配的单独查找表(链接表)? 例如。以下查找表:
卡ID | TRANSID
客户编号| TRANSID
帐户号码| TransID
TX_Date | TRANSID
这是火花的反模式吗?兽人开发还是有更好的方法来“索引”不同的键? (在我已经使用行索引的orc文件中)
答案 0 :(得分:0)
来自docs:
索引是一种数据结构,包括每列的最小值和最大值以及每列中的行位置
ORC是一种列式文件格式,它没有按照SQL的方式编制索引。
partitionBy
控制数据位置或文件的拆分方式。
通过选择不同的partitionBy键确保行均匀分布在文件中,并运行测试以确认您做出了正确的选择。