【问题标题】:Executing query with Hive, Tez and offset使用 Hive、Tez 和 offset 执行查询
【发布时间】:2017-12-27 17:19:43
【问题描述】:

我试图在我试图排除特定记录的配置单元中执行偏移量查询,但总是收到以下错误:

查询:

select * from sample order by id limit 1 OFFSET 1;  

错误:

FAILED: ParseException line 1:41 missing EOF at 'OFFSET' near '1'  

我尝试按照 SO 帖子中的建议删除表并再次创建它,但仍然遇到相同的错误。此外,我已经在 hive 中设置了 TEZ engine 以加快数据处理速度,但上述查询会启动 map reduce 作业。
为什么会这样?当我执行另一个查询时,它会给我直接结果via TEZ engine
谁能解释我这种奇怪的行为以及解决我的问题?

环境:

1) Cloudera 5.12  
2) Hive 1.1.0-cdh5.12.0  

【问题讨论】:

  • Cloudera 没有 Tez。
  • 我不知道早期的 cloudera 版本,但它适用于我提到的版本。试试这个:设置 hive.exec.engine=tez;。它有效
  • 它仍然在 MR 模式下运行。我知道即使在最新的 CDH 中也没有安装或配置 Tez
  • 但是如果你将tez设置为引擎后执行其他查询,它不会启动map reduce作业,为什么会这样?

标签: hadoop hive cloudera-cdh tez


【解决方案1】:

不清楚您为什么标记 MySQL,但 OFFSET 不作为 HiveQL SELECT 语法的一部分存在。

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select

【讨论】:

  • 那么我怎样才能在 hive 中实现这个功能呢?我尝试使用 limit(1,2) 但仍然得到同样的错误
  • 您提到的链接没有提供任何与支持功能相关的信息。相反,他们执行了一个带有限制的查询,我已经执行了但得到了同样的错误。你能给我更清楚一点吗?谢谢
  • 这是我链接的语法。您在问题中的错误是missing EOF at 'OFFSET',因为OFFSET 存在于Mysql 和Postgres 中,而不是HiveQL。如果您只希望第二行 LIMIT 1,1 是正确的,但 在 Hive 2.0 中添加,您没有使用。您的另一个选择是使用 ROW_NUMBER 函数生成行 ID,然后过滤 ID > 1
【解决方案2】:

您可以在 LIMIT 子句中包含 OFFSET 子句以生成分页结果集,例如 11-20。 始终将此子句与 ORDER BY(以便清楚哪个项目应该是第一个、第二个等)和 LIMIT(以便结果集涵盖有界范围,例如项目 0-9、100-199)结合使用,等等)。

【讨论】:

  • 请查询,因为我尝试了许多关于偏移量的查询,但在 hive 中不起作用
猜你喜欢
  • 1970-01-01
  • 2020-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-21
  • 1970-01-01
  • 2017-05-28
  • 1970-01-01
相关资源
最近更新 更多