【问题标题】:How do I search for an item in an array in Hive?如何在 Hive 的数组中搜索项目?
【发布时间】:2014-04-17 02:26:44
【问题描述】:

使用 Hive,我创建了一个包含以下字段的表:

  • ID BIGINT,
  • MSISDN 字符串,
  • DAY TINYINT,
  • 月小,
  • 国际年,
  • 性别微小,
  • 关系状态 TINYINT,
  • 教育字符串,
  • LIKES_AND_PREFERENCES STRING

这是通过以下 SQL 命令填充数据的:

Insert overwrite table temp_output Select a.ID, a.MSISDN, a.DAY, a.MONTH, a.YEAR, a.GENDER, a.RELATIONSHIPSTATUS, b.NAME,  COLLECT_SET(c.NAME) FROM temp_basic_info a JOIN temp_education b ON (a.ID = b.ID) JOIN likes_and_music c ON (c.ID = b.ID) GROUP BY a.ID, a.MSISDN, a.DAY, a.MONTH, a.YEAR, a.Gender, a.RELATIONSHIPSTATUS, b.NAME;

Likes and Preferences 是一个数组,但我没有足够的远见来指定它(相反,它是一个字符串)。我将如何选择在数组中具有特定项目的记录?

是不是就这么简单:

select * from table_result where LIKES_AND_PREFERENCES = "item"

或者会有一些不可预见的问题?

我尝试了上面的查询,但它确实可以输出数组中只有“项目”的文件。

【问题讨论】:

    标签: arrays hadoop hive


    【解决方案1】:

    也许你应该尝试这样的事情:

    select * from (
    select col1,col2..coln, new_column from table_name lateral view explode(array_column_name) exploded_table as new_column 
    ) t where t.new_column = '<value of items to be searched>'
    

    希望这会有所帮助...!!!

    【讨论】:

    • 它返回以下内容:FAILED: UDFArgumentException explode() takes an array or a map as a parameter。 explode() 中的 LIKES_AND_PREFERENCES。
    • 是的 explode() 函数将数组作为参数。但是您的 LIKES_AND_PREFERENCES 是一个字符串,您可能需要先检查一下。在此处查看数组 a 列的创建:stackoverflow.com/questions/6270084/…
    • 哦,废话。这是正确的。在这方面,我上面的简单选择语句会起作用吗?
    • 它只返回具有该精确值的结果,但我想我可以使用'like'语句。非常感谢。
    • Hive 没有 RDBMS 的 LIKE 等价物,您需要使用 RLIKE 或 REGEXP。您也可以使用 CASE。看看这个:1.)**cwiki.apache.org/confluence/display/Hive/…** 2.)**cwiki.apache.org/confluence/display/Hive/…**
    【解决方案2】:

    按以下方式使用array_contains udf --

     select * 
     from mytable 
     where array_contains(likes_and_preferences,'item') = TRUE 
    

    array_contains 将返回一个您可以断言的布尔值。

    【讨论】:

      【解决方案3】:

      你是对的,你使用的函数只会返回数组只有一个元素的记录:“item”

      你需要使用 :array_contains 函数。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-01
      • 2022-01-21
      • 2016-08-31
      • 2021-01-21
      • 2022-12-18
      • 2020-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多