【发布时间】:2020-06-03 21:47:36
【问题描述】:
我需要了解 Hive 用来散列分区数据的算法。例如,Spark 使用 Murmur Hashing。有什么想法或资源吗?
【问题讨论】:
标签: hash hive partitioning hive-partitions
我需要了解 Hive 用来散列分区数据的算法。例如,Spark 使用 Murmur Hashing。有什么想法或资源吗?
【问题讨论】:
标签: hash hive partitioning hive-partitions
Hive 中的分区是文件夹,每个分区键值一个文件夹,而不是散列(可以是复合键)。 Hive 不支持其他分区类型,例如哈希或范围。
但是您可以在 SQL 中计算哈希并在写入数据时使用动态分区。
像这样,使用反射可以调用静态Java方法:
insert into table partition(mycolumn)
SELECT ...
reflect('org.apache.commons.codec.digest.DigestUtils', 'sha256Hex', mycolumn)
FROM mytable;
Hive 还具有 int hash(a1[, a2...])、sha2(string/binary, int) 和 mask_hash(string|char|varchar) 原生函数。
Hive 使用散列进行分桶。存储桶是文件。见this question about hashing in buckets。
【讨论】: