【问题标题】:Hive check elements in arrayHive 检查数组中的元素
【发布时间】:2015-01-02 15:45:01
【问题描述】:

我有一个由 user_id 和 item_id(用户已购买的项目的 ID)组成的 Hive 表。 我想获取购买了商品 1 但不购买商品 2 和 3 的所有用户的列表。

为此,我编写了简单的查询:

SELECT user_id, collect_set(item_id) itemslist FROM mytable
WHERE item_id in (1, 2)
GROUP BY user_id
HAVING -- what should I put here???

如您所见,我不知道如何检查数组 itemslist 是否包含 1 而不是 2。

你是怎么做到的? 如果有更有效的方法,你能告诉我两种(或更多)方法吗?

【问题讨论】:

    标签: arrays select filter hive


    【解决方案1】:

    Hive 中有一些收集功能 `(参见collection functions 这里:https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF)可以在这里使用。

    您可以使用array_contains(Array<T>, value) 函数检查项目1 是否存在,并使用size(Array<T>) 函数确保长度为1。如果两个条件都满足,您将获得所需的输出。

    【讨论】:

    • 如果我想显示在 select 语句中找到的项目,我该怎么做?
    • array_contains 不适用于正则表达式模式。例如,如果我想检查数组中是否有任何项具有子字符串 foo.*。你有什么建议吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    • 2014-05-21
    • 2023-03-27
    相关资源
    最近更新 更多