龙空技术网

SQLBoy的福音:duckdb,一个拥有极高性能的SQL执行引擎

天一境 4641

前言:

今天大家对“sql解析引擎”大致比较关注,你们都需要了解一些“sql解析引擎”的相关知识。那么小编也在网摘上网罗了一些关于“sql解析引擎””的相关内容,希望兄弟们能喜欢,各位老铁们快快来了解一下吧!

小编在2010年就开始玩hadoop了(记得当时有俩比较经典的版本是0.19、0.21),当时以为自己已经掌握了技术潮流,拥抱了宽广的未来。毕竟这种数据量大的情况下单机肯定是搞不定的,计算集群化是未来的一个主流方向。然后到了Spark时代,小编的内心简直就要膨胀了好吧,再加上Spark给我们提供的MLLib和mlib这种高精尖的机器学习工具,简直爽的不要不要的。直到有一天,我看到我们那会的一个大佬通过将数据导本地的Mysql实例进行数据分析。小编才恍然觉悟,这世界上没有那么多的大数据,更多的是长尾的小数据,而且小数据的价值不一定比大数据低,自那儿之后小编就开始沉下心来,让自己的视界更加宽广,洞察更加深远。工具也没有高贵低贱之分,只有适合程度之差。

Hadoop

数据开发的工具和产品如今已经琳琅满目,比如DataFrame鼻祖:pandas,后起之秀:polars,以及小编今天要讲的duckdb,还有hadoop生态中的Spark。在存储格式上也百花齐放,像常规的csv、json,极致压缩比和性能的parquet等。文件存储上有阵列、NFS以及hadoop的基于冗余保证高可用性的hdfs。还有各种云厂商提供的类似s3,odps等产品也是遍地开花。如今早已是一个技术储备过剩的时代

大数据

不管这个技术生态如何发展,我们始终要保持一份清醒:只有适合我们的业务的技术栈才是最好的。比如一个小规模业务场景的ETL就非常适合用duckdb,而不是一味地堆砌各种集群,以下是小编基于notebook搞的几个duckdb的例子。

duckdb

读取CSV文件数据

 from pathlib import Pathimport duckdbfrom polars import colimport polars as plimport pandas as pd%load_ext sql%sql duckdb:// --alias testdb
%%sqlselect * from './data/iris.csv'

csv文件读取结果

读取parquet文件

parquet是当前大数据领域存储的事实标准,这个文件格式基于列式存储,对于数据分析有极大的优化提升。

%%sqlwith iris as (select * from './data/iris.parquet')select * from iris limit 10;
数据分析这里就不展开讲了,我相信大家对于SQL分析中用到的语法应该已经滚瓜烂熟了,小哥就讲一个group by的例子。
%%sqlwith iris as (select * from './data/iris.parquet')select s_len,count(*) cnt from iris group by s_lenorder by cnt desc;
duckdb在notebook中和python变量进行交互python变量直接在sql中直接使用
# 定义iris的python变量(基于polars的lazy api)iris = pl.scan_parquet('./data/iris.parquet')
%%sqlselect * from iris limit 10;

这种方便你敢信??在sql中直接使用python的一个DataFrame变量。

sql中定义python变量

%sql test << select * from iris limit 10;
print(test)

结果打印

写在最后duckdb是一个进程内的基于SQL的数据分析引擎。本文其实并没有展现duckdb的真正实力,比如它极致的高性能。如果小伙伴们对这个感兴趣,多多点赞收藏,小编讲持续对数据分析和大数据进行分享。

标签: #sql解析引擎 #sql和db