Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何高效地每小时查询一个大型数据库? 背景:_Python_R_Amazon Redshift_Database Administration - Fatal编程技术网

Python 如何高效地每小时查询一个大型数据库? 背景:

Python 如何高效地每小时查询一个大型数据库? 背景:,python,r,amazon-redshift,database-administration,Python,R,Amazon Redshift,Database Administration,我在红移数据库中为每个城市存储了多个资产表,总共8个城市。这些资产表每小时显示一次状态更新。一年内有8个SQL表和大约5亿行数据。 我还可以访问每分钟更新此数据的服务器 示例:一个市场可以有20k资产,每天显示4800K 20k*24小时状态更新 这些状态更新是原始格式的,需要经历当前在SQL视图中编写的转换过程。最终状态将进入BI工具表,供外部利益相关者查看 问题: 当前处理数据的方式既慢又低效,在Tableau中按小时运行此作业可能不现实。状态转换要求我回顾30天的数据,因此我确实需要在整个

我在红移数据库中为每个城市存储了多个资产表,总共8个城市。这些资产表每小时显示一次状态更新。一年内有8个SQL表和大约5亿行数据。 我还可以访问每分钟更新此数据的服务器

示例:一个市场可以有20k资产,每天显示4800K 20k*24小时状态更新

这些状态更新是原始格式的,需要经历当前在SQL视图中编写的转换过程。最终状态将进入BI工具表,供外部利益相关者查看

问题: 当前处理数据的方式既慢又低效,在Tableau中按小时运行此作业可能不现实。状态转换要求我回顾30天的数据,因此我确实需要在整个查询过程中回顾历史

可能的解决方案: 以下是一些我认为可能有效的解决方案,我希望得到关于在我的情况下什么最有意义的反馈

运行一个python脚本,查看最近的更新,并将大型历史记录表作为cron作业查询30天,然后将结果发送到redshift数据库中的一个表。 具体化SQL视图并每小时运行一次增量刷新 将视图作为数据源放在Tableau中,并每小时运行一次增量刷新
请告诉我你将如何处理这个问题。我的知识是SQL,有限的数据工程经验,Tableau Prep&Desktop和Python或R的脚本编写。

所以首先要做的是——你说数据处理速度慢且效率低,并询问如何高效地查询大型数据库。首先,我来看看如何改进这个过程。您指出该过程基于过去30天的数据-是否对大型表进行了时间排序、吸尘和分析?在处理大型表时,最大限度地利用元数据非常重要。确保where子句在消除事实表块方面有效-不要依赖维度表where子句来选择日期范围

接下来看看您的分发密钥,以及这些密钥如何影响关键查询在网络上移动大量数据的需要。在红移集群中,节点间网络的带宽是最低的,不必要地在其上推送大量数据会使事情变得缓慢和低效。根据您的查询模式,使用均匀分布可能是性能杀手

现在让我来回答您的问题,让我解释一下-使用摘要表、物化视图或外部存储tableau数据源来存储每小时更新的摘要数据是否更好?这三种方法都有效,并且各有利弊

摘要表很好,因为您可以选择数据存储的分布,如果需要将此数据与其他数据库表组合,则可以最有效地完成此操作。但是,需要执行更多的数据管理,以保持此数据与数据同步。 物化视图很好,因为不必担心太多的管理操作—当数据更改时,只需刷新视图即可。数据仍在数据库中,因此很容易与其他数据表组合,但由于您无法控制数据的存储,因此这些操作可能不是最有效的。 外部存储很好,因为数据位于BI工具中,因此如果您需要在数据位于本地的小时内重新蚀刻结果。但是,它没有被锁定在BI工具中,与其他数据库表组合的效率要低得多。 摘要数据通常没有那么大,所以如何存储它不是一个很大的问题,我有点懒,所以我会选择物化视图。正如我在开始时所说,我首先要看一下我每小时运行的缓慢而低效的查询

希望这有帮助