gpt4 book ai didi

hadoop - 在 Hive 中获取 sysdate -1

转载 作者:可可西里 更新时间:2023-11-01 14:17:54 32 4
gpt4 key购买 nike

有什么方法可以让 Hive 中的 current date -1 总是意味着 yesterdays date?并且采用这种格式 - 20120805

我可以像这样运行查询以获取 昨天的日期 的数据,因为今天是 8 月 6 日-

select * from table1 where dt = '20120805';

但是当我尝试使用 date_sub 函数 以这种方式获取昨天的日期时,因为下表在 date(dt) 列上进行了分区。

select * from table1 where dt = date_sub(TO_DATE(FROM_UNIXTIME(UNIX_TIMESTAMP(),
'yyyyMMdd')) , 1) limit 10;

它正在寻找所有分区中的数据?为什么?我在查询中做错了什么?

如何在子查询中进行评估以避免扫描整个表?

最佳答案

尝试这样的事情:

select * from table1 
where dt >= from_unixtime(unix_timestamp()-1*60*60*24, 'yyyyMMdd');

如果您不介意 hive 扫描整个表,则此方法有效。 from_unixtime 不是确定性的,因此 Hive 中的查询规划器不会为您优化。对于许多情况(例如日志文件),不指定确定性分区键会导致启动非常大的 hadoop 作业,因为它将扫描整个表,而不仅仅是具有给定分区键的行。

如果这对您很重要,您可以使用其他选项启动 hive

$ hive -hiveconf date_yesterday=20150331

并在脚本或hive终端使用

select * from table1
where dt >= ${hiveconf:date_yesterday};

变量的名称和值都无关紧要,在这种情况下您可以设置它们以使用 unix 命令获取之前的日期。在 OP 的特定情况下

$ hive -hiveconf date_yesterday=$(date --date yesterday "+%Y%m%d")

关于hadoop - 在 Hive 中获取 sysdate -1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11833701/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com