繁体   English   中英

从 HIVE 表中获取最新的分区

[英]FETCH the latest partition from HIVE table

嗨,我对此很陌生。 我有 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' 错误消息:'编译时出错语句:失败:执行错误,从 org.apache.hadoop.hive.ql.exec.tez.TezTask'返回代码 1。

我想在 WHERE 子句中使用结果。 但我不知道声明。 SQL select * 来自 HIVE。 abc .`abc1' 其中----;

请帮忙。

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

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

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

SELECT * from your_table
WHERE concat(year,'-',lpad(month, 2,0),'-',lpad(day, 2,0)) in (select max(concat(year,'-',lpad(month, 2,0),'-',lpad(day, 2,0))) from your_table)

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM