当报告与hive连接时,边肖将与您分享如何逐页查询。希望大家看完这篇文章后有所收获。我们一起讨论一下吧!
Hive提供了类似于Oracle的rownum机制,如下所示(效率较低):
选择* from(选择row _ number())over(按create_time desc排序)作为rownum,u * from user u)mm,其中mm.rownum介于10和15之间;
还有一种方法,如果表中有唯一的标识字段,也可以通过这个字段和限制来实现。例如:
获取第一页数据:
注意:同时需要记录这10项中最大的id为preId,作为下页的条件。
按id从表顺序中选择* ASC限制10;
获取第二页数据:
注意:同时,保存数据中最大的id来替换preId。
从表中选择*其中id preId订单由id asc限制10;
对于数据库分页,这里分析了存在的问题。
我应该如何处理大列表报告?并提出了改进意见,可参考如下:
将获取和呈现作为两个异步线程。取数线程发出SQL后,会不断取出数据,缓存在本地存储中。呈现线程根据页数计算行数,以获得在本地缓存中显示的数据。这样,只要能快速呈现已取的数据,就不会有等待的感觉,未取的数据应该等待,这是正常的,也是可以理解的。但是取数线程只涉及一个SQL语句,就是数据库中的同一个事务,不会出现不一致的情况。这样,两个问题都可以解决。但是需要设计一种可以按行号随机访问记录的存储格式,否则通过遍历统计记录,响应仍然会很慢。
画一幅画,感受一下:
(2)和(3)分别是两个线程,一个负责取缓存,另一个负责读缓存和呈现报表。
看起来有点复杂,但是可以直接和制作的工具一起使用:
海量列表和分组报表的实现
也可以导出Excel进行打印。
看完这篇文章,相信大家对“报表与hive连接时如何逐页查询”有了一定的了解。想了解更多,请关注行业资讯频道,感谢阅读!
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/148500.html