我有一个hiveconf变量设置为
set DATEHOUR = from_unixtime(unix_timestamp()-3000);
我们的想法是每小时后在50分钟(3000秒)内在Hadoop中提供日志文件,此工作流程将处理它们并将转换后的数据存储到正确的分区中。 DATEHOUR最初用于查询原始日志目录中的分区。
但是在转换过程之后(可能需要不同的时间),我想将结果存储在不同的目录中,但是再次存储在正确的分区中。但是如果我再次使用$ {hiveconf:DATEHOUR},它会抓取当前时间戳,而不是我第一次设置变量时的时间戳。
我尝试创建一个新变量并将其设置为等于DATEHOUR,但它仍然会返回相同的问题。有没有办法可以在某个地方“粘贴”DATEHOUR的值,以便以后保留它以便以后检索?
答案 0 :(得分:0)
您获得该结果是因为 unix_timestamp()给出了当前时间戳。
您需要的是从您设置的日期时间减去3000秒。因此,您需要将该值放入查询中。您的更改将如下所示:
select from_unixtime(unix_timestamp('${hiveconf:datehour}')-3000) from <table>;
当此查询运行时,它将从您设置的最后一个datehour值中获取值。您还需要使用此查询的输出设置datehour值。
希望它有所帮助...... !!!