Imb*_* M. 15 performance parquet apache-drill
我尝试使用apache-drill运行简单的连接聚合查询,速度不是很好.我的测试查询是:
SELECT p.Product_Category, SUM(f.sales)
FROM facts f
JOIN Product p on f.pkey = p.pkey
GROUP BY p.Product_Category
Run Code Online (Sandbox Code Playgroud)
事实有大约422,000行,产品有600行.分组返回4行.
首先,我在SqlServer上测试了这个查询,并在大约150ms内得到了一个结果.
使用钻取我首先尝试直接连接到SqlServer并运行查询,但这很慢(大约5秒).
然后我尝试将表保存到json文件并从中读取,但这甚至更慢,所以我尝试了镶木地板文件.
我在第一次运行中得到了结果,大约3秒钟.下次运行大约900ms,然后稳定在大约500ms.
从阅读来看,这没有任何意义,钻孔应该更快!我试过"REFRESH TABLE METADATA",但速度没有变化.
我通过钻取命令行在Windows上运行它.
如果我需要一些额外的配置或什么的任何想法?
谢谢!
你为什么期望Apache Drill在这里更快?钻是非常快的,但它专为大型分布式查询,可能跨越几个不同的数据来源......但你不使用分布式数据.
SQL Server拥有数十年的代码和优化,使其成为在单个服务器上运行的最快的关系数据库之一.您的数据可以高效存储,缓存在内存中,查询可以在一个进程中运行,因此扫描和连接速度非常快,特别是对于这么少的数据.
相比之下,Apache Drill还有很多工作要做.它必须将您的查询解释为分布式计划,然后将其发送到所有钻取进程,然后查找数据源,使用连接器访问数据,运行查询,将结果返回到第一个节点进行聚合,然后你有最后的输出.根据数据源的不同,Drill可能必须读取所有数据并单独过滤,这会增加更多时间.
JSON文件很慢,因为它们是逐行解析的详细文本文件.Parquet速度更快,因为它是一种二进制压缩的列式存储格式,对扫描非常有效.
任何关系数据库都比单机上的Drill更快.事实上Drill可以让你获得500毫秒的Parquet结果,这实际上令人印象深刻,考虑到它需要做多少工作才能为你提供灵活性.如果你只有几百万行,坚持使用SQL服务器.如果您有数十亿行,则使用SQL Server列存储功能以柱状格式存储数据,并具有出色的压缩和性能.
您执行以下操作时使用Apache Drill:
| 归档时间: |
|
| 查看次数: |
2124 次 |
| 最近记录: |