【问题标题】:How can I select certain rows that the key starts with a prefix in Hive?如何在 Hive 中选择键以前缀开头的某些行?
【发布时间】:2017-08-14 22:52:28
【问题描述】:

一个很简单的问题:

我想在 Hive 中选择其键具有特定前缀的所有行,但不知何故它不起作用。

我尝试过的查询:

select * from solr_json_history where dt='20170814' and hour='2147' and substr(`_root_`,1,9)='P10004232' limit 100;

SELECT * FROM solr_json_history where dt='20170814' and hour='2147' and `_root_` like 'P19746284%' limit 100; 

我的 Hue 编辑器只是挂在那里,没有返回任何东西。

我已经通过这个查询检查了这个时间范围内我的表中有数据:

select * from solr_json_history where dt='20170814' and hour='2147' limit 15;

它按预期返回 15 条记录。

有什么帮助吗?

非常感谢!

【问题讨论】:

  • 能否提供一些示例数据
  • 如果您能提供数据样本以及您如何创建表格,那就太好了
  • 也许没有 100 行具有该前缀,在这种情况下,hive 会遍历所有可能很慢的分区/表。尝试限制 1
  • 查询是从 hive 还是 beeline cli 返回数据?
  • @MusafirSafwan,当然,我刚刚做了,谢谢。

标签: mysql hadoop hive hiveql hue


【解决方案1】:

根据@musafir-safwan 的要求,我已将其添加为此处的答案。

更新: 我无法提供样本数据。但我的问题得到了解决。

感谢评论员的关注。

我的表确实有数据,不用担心。感谢您的检查。

问题是由于一个糟糕的 Hue UI 设计,当我发出上述两个查询时,它需要太长时间(比 UI 上设置的超时时间)才能得到响应,所以简单地说,UI 没有回复任何内容,或给出超时提醒。它只是挂在那里。

另外,这两个查询实际上进行了两次 RPC 调用,因此它们超时了。 然后我改用下面的查询:

select `_root_`,json, count(*) from solr_json_history where dt='20170814' and hour='2147' and substr(`_root_`,1,9)='P19746284' group by `_root_`,json;

不同之处在于我添加了一个count(*),它将这个查询变成了一个map-reduce作业,因此没有超时限制,然后它返回了我想要的结果。

YMMV.

谢谢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-06-01
    • 1970-01-01
    • 2015-10-11
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2013-01-11
    • 2022-07-13
    相关资源
    最近更新 更多