问题描述
我正在使用 Hive Map Type,我想知道 Hive 如何处理键值对顺序?
示例:
假设我有下表:
CREATE TABLE db.my_table (col MAP<STRING,INT>)
INSERT INTO db.my_table
SELECT map('A',1,'B',2,'C',3)
UNION ALL
SELECT map('C',4,5,'A',6)
每个 SELECT
语句是否会返回相同顺序的键值对(从我的测试来看,它们总是按原始顺序排列)?
SELECT col FROM db.my_table
{"A":1,"B":2,"C":3}
{"C":4,"B":5,"A":6}
map_values()
和 map_keys()
怎么样(它们似乎也保留了原始顺序)?
SELECT map_values(col),map_keys(col) FROM db.my_table
[1,3] | ["A","B","C"]
[4,6] | ["C","A"]
我也在使用 Brickhouse MapFilterKeysUDF
,结果似乎是按键排序的。总是这样吗?
ADD jar hdfs://.../brickhouse-0.6.0.jar;
CREATE TEMPORARY FUNCTION filter_map AS 'brickhouse.udf.collect.MapFilterKeysUDF';
SELECT filter_map(col,array('C','B')) FROM db.my_table
{"B":2,"C":3}
{"B":5,"C":4}
总结:
我有 3 个主要问题(但非常感谢更复杂的解释):
- 是否每个
SELECT
语句都返回 MAP 的原始顺序? -
map_values()
和map_keys()
是否遵循相同的约定? - Brickhouse
MapFilterKeysUDF
结果的顺序是什么?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)