我有一个以yyyyMMdd格式按日期分区的表。如果我这样做一个简单的查询:
SELECT COUNT(*) FROM MyTable WHERE Date >= '20140924'
然后它将扫描3天的数据(今天是第26天)。但是我希望我的查询总是查看最近3天,所以我这样写了
SELECT COUNT(*) FROM MyTable
WHERE date >= from_unixtime(unix_timestamp() - 259200, 'yyyyMMdd')
问题是现在它扫描每个分区。有没有办法让它在大于?
之后预先计算查询部分答案 0 :(得分:1)
不幸的是,Hive不支持这一点。我过去遇到过类似的问题,我的蜂巢表有过去2年的分区。
但是,您可以做的一个解决方法是,您可以在shell脚本中运行此配置单元查询,您将在另一个变量中计算此日期,并将其用作配置单元查询中的变量。示例脚本将是:
#!/bin/bash
date=`date +"%Y%m%d" -d "-3 days"`
hive -e "select count(*) from MyTable where date >= '$date'"
答案 1 :(得分:0)
一种解决方法是创建一个包含单行的表格,您可以从中选择计算的时间。
CREATE TABLE dual (dummy STRING);
INSERT INTO TABLE dual SELECT count(*) FROM dual;
SELECT COUNT(*) FROM MyTable t1
JOIN (
SELECT from_unixtime(unix_timestamp() - 259200, 'yyyyMMdd') myDate
FROM dual LIMIT 1
) t2 ON (t2.myDate = t1.Date)