【问题标题】:ARRAY_CONTAINS muliple values in hive配置单元中的 ARRAY_CONTAINS 多个值
【发布时间】:2014-09-03 13:23:28
【问题描述】:

有没有一种方便的方法可以在 hive 中使用 ARRAY_CONTAINS 函数来搜索数组列中的多个条目,而不仅仅是一个?所以而不是:

WHERE ARRAY_CONTAINS(array, val1) OR ARRAY_CONTAINS(array, val2)

我想写:

WHERE ARRAY_CONTAINS(array, val1, val2)

完整的问题是,当我运行脚本时,我需要从命令行参数动态读取val1val2,而且我通常不知道会以多少个值为条件。所以你可以认为vals 是一个逗号分隔的列表(或数组),包含值val1val2...,我想写

WHERE ARRAY_CONTAINS(array, vals)

提前致谢!

【问题讨论】:

    标签: sql hive


    【解决方案1】:

    有一个 UDF here 可以让您获取两个数组的交集。假设你的价值观有结构

    values_array = [val1, val2, ..., valn]
    

    你可以这样做

    where array_intersection(array, values_array)[0] is not null
    

    如果它们没有任何共同的元素,将返回[],因此[][0] 将是null

    【讨论】:

    • 我和发电机在同一条船上,这仍然是最好的解决方案吗?
    • 是的,我认为这是你最好的选择。
    【解决方案2】:
    Create table tmp_cars AS  Select make,COLLECT_LIST(TRIM(model))
    model_List from default.cars GROUP  BY make;
    
    Select array_contains(model_List,CAST('Rainier' as varchar(40)))
    FROM Default.tmp_cars t
    where make = 'Buick';
    

    数据

    ["Rainier","Rendezvous CX","Century Custom 4dr","LeSabre Custom 4dr","Regal LS 4dr","Regal GS 4dr","LeSabre Limited 4dr","Park Avenue 4dr","公园大道超 4dr"]

    返回 是的

    【讨论】:

      【解决方案3】:

      选择 * 从表 侧视图 explode(array) a as arr 在哪里 (vals) ;

      【讨论】:

        猜你喜欢
        • 2017-05-23
        • 2017-07-29
        • 2022-08-21
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 2020-05-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多