从 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)))
嗨,我对此很陌生。 我有 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)))