如何写这个简单的查询?表有850亿条记录

PasLeChoix 2017-10-24 08:18:01
Cloudera的集群:26个节点,每个节点256GB的内存

当前的查询很简单:
select * from order_detail 
where
cast(trd_date as timestamp) > cast ('2014-10-30' as timestamp) and
cast(trd_date as timestamp) < cast ('2015-01-01' as timestamp) and
cat = 'FUSION' and DEST in ('XCBF','XCBG','XDVF','CBF')



1. 有没有可能把这个
cast(trd_date as timestamp) > cast ('2014-10-30' as timestamp) and
cast(trd_date as timestamp) < cast ('2015-01-01' as timestamp)
时间段的数据先过滤到一个临时表里面,然后从这个小得多的临时的表再继续过滤得出结果?

2. 如果没有建临时表的权限(我只是管理人员,用户是完全分开的,用户一般是只读权限),是不是除了加内存外就没解了?

3. 数据库里还有20多个类似的表,以后肯定还要加入一些join,想想都头疼。不知道有没有可能run得出来?时间都好说,花个几个小时甚至一天都是可以理解的。

4. 我其实刚刚发了我的第一个贴,可是不知道是什么缘故没有显示出来,所以重发一遍,对不起啊。

非常感谢。
...全文
258 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
PasLeChoix 2017-10-25
  • 打赏
  • 举报
回复
谢谢两位,今天发现这个大表已经有partition的,因此修改了where后放在partioned的columns上后就很快run完了。
白菜咸肉 2017-10-24
  • 打赏
  • 举报
回复
在cat和DEST上建索引吧,优先过滤这两个条件,降低数据量,弄个临时表最好 其实只要各有关时间作条件的查询都是很慢的。
luoyoumou 2017-10-24
  • 打赏
  • 举报
回复
表结构是什么样子的?能把建表语句贴出来不?

20,807

社区成员

发帖
与我相关
我的任务
社区描述
Hadoop生态大数据交流社区,致力于有Hadoop,hive,Spark,Hbase,Flink,ClickHouse,Kafka,数据仓库,大数据集群运维技术分享和交流等。致力于收集优质的博客
社区管理员
  • 分布式计算/Hadoop社区
  • 涤生大数据
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧