从 HIVE table 获取最新分区

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 的结果。但我应该使用分隔符并找到日期的最大值。

The following error occurred: Connector reply error: SQL##f - SqlState: S1000, ErrorCode: 35, ErrorMsg: [Cloudera][Hardy] (35) Error from server: error code: '1' error message: 'Error while compiling statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.tez.TezTask'.

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

请帮忙。

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

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)))