微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从 HIVE 表中获取最新的分区

如何解决从 HIVE 表中获取最新的分区

嗨,我对此很陌生。 我有 INTEGER 格式的三列 YEAR、MONTH、DAY。

我想加载脚本并将 YEAR、MONTH、DAY 组合为单列并获取最大值。

我试过了,

Load year,month,date from HIVE.`abc`.`abc1';
SELECT max(cast(year as String) || '_' || cast(month as string) || '_' || cast(day as string)) as result FROM HIVE.`abc`.`abc1';

通过这样做,我将得到 2020_5_21 的结果。但我应该使用分隔符并找到日期的最大值。

发生以下错误:连接器回复错误sql##f - sqlState: S1000,ErrorCode: 35,ErrorMsg: [Cloudera][Hardy] (35) 错误 来自服务器:错误代码:'1' 错误消息:'编译时出错 语句:失败:执行错误,返回代码 1 org.apache.hadoop.hive.ql.exec.tez.TezTask'。

我想在 WHERE 子句中使用结果。但我不知道这个说法。 sql select * from HIVE.abc.`abc1' where ---- ;

请帮忙。

解决方法

如果月和日存储为整数,如果是个位数的月或日,则需要使用 lpad() 加零。例如,月份 5 应该变成 05。没有这个最大值可能无法正常工作。还可以使用破折号作为分隔符以获取兼容格式的日期。

max(concat(year,'-',lpad(month,2,0),lpad(day,0)))

并在 WHERE 中使用它使用 WHERE date in (select max ...):

SELECT * from your_table
WHERE concat(year,0)) in (select max(concat(year,0))) from your_table)

此外,您可能需要在 sql 中的任何地方用反引号引用年、月、日等名称:

max(concat(`year`,lpad(`month`,lpad(`day`,0)))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。