【发布时间】:2016-11-24 08:36:21
【问题描述】:
我的输入是一个字符串,可以包含从 A 到 Z 的任何字符(没有重复,因此最多可以有 26 个字符)。
例如:-
set Input='ATK';
字符串中的字符可以按任意顺序出现。
现在我想创建一个地图对象,它具有从 A 到 Z 的 固定 键>。如果对应的字符出现在输入字符串中,则键的值为 1。所以在这个例子(ATK)的情况下,地图对象应该看起来像:-
那么最好的方法是什么?
所以代码应该是这样的:-
set Input='ATK';
select <some logic>;
它应该返回一个包含 26 个键值对的映射对象 (Map<string,int>)。最好的方法是什么,而不在 Hive 中创建任何用户定义的函数。我知道有一个很容易想到的函数 str_to_map。但它只有在源字符串中存在键值对时才有效,而且它只会考虑输入中指定的键值对。
【问题讨论】:
-
将它们存储为
{1:[A, K, T], 0:[B, C, ..., Z]}似乎更合乎逻辑 -
没关系。问题是关于最佳地确定输入字符串中的每个字符是否存在于较大的字符串(A,B,C,...,Z)中。实际的输入字符串将来自列值。您能否使用示例查询展示您想到的逻辑?
标签: hive apache-hive