我有一个按日期划分的表,格式为yyyymmdd。如果我做这样一个简单的查询:
SELECT COUNT(*) FROM MyTable WHERE Date >= '20140924'
然后扫描3天的数据(今天是26号)。然而,我希望我的查询总是看过去3天,所以我这样写
SELECT COUNT(*) FROM MyTable
WHERE date >= from_unixtime(unix_timestamp() - 259200, 'yyyyMMdd')
问题是现在它扫描每个分区。有没有办法让它在大于之后预先计算查询的部分?
2条答案
按热度按时间r1zhe5dt1#
一种解决方法是创建一个包含单行的表,您可以从中选择计算的时间。
jq6vz3qz2#
不幸的是,Hive不支持这一点。我过去也遇到过类似的问题,我的配置单元表在过去两年中都有分区。
不过,您可以做的一个变通方法是,您可以在shell脚本中运行此配置单元查询,在shell脚本中,您将在另一个变量中计算此日期,并将其用作配置单元查询中的变量。示例脚本如下: