配置单元是否保留Map键顺序?

db2dz4w8  于 2021-07-15  发布在  Hadoop
关注(0)|答案(0)|浏览(222)

我正在使用配置单元Map类型,我想知道配置单元如何处理键值对顺序?
例子:
假设我有下表:

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, 'B', 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,2,3] | ["A","B","C"]
[4,5,6] | ["C","B","A"]

我也在用砖房 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() 遵循同样的惯例?
砖房的顺序是什么 MapFilterKeysUDF 结果?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题