暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Superset 官方正式添加了DuckDB的支持

alitrack 2022-03-26
3757

基于我对 Superset[1]duckdb_engine[2] 贡献的代码,在 rwhaling[3],zhaoyongjie[4]villebro[5] 的共同努力下,DuckDB 正式成为官方支持的数据库。

Why DuckDB

  • 嵌入式,像使用 SQLite 一样方便

  • 跨平台

  • 可以把它当作redshift的单机版

  • 进程内 OLAP 数据库引擎,更快

  • 支持直接访问 csv 和 parquet 格式,可以方便地把 csv 和 parquet 注册为虚拟表(virtual datasets)

  • DuckDB 支持几乎所有 PostgreSQL 的语法, 并且大小写无关,这个对于数据分析来说非常有用

  • DuckDB 是多线程的,因此您可以利用所有 CPU 内核而无需额外设置工作 - 无需对数据或任何东西进行分区!

更多关于 DuckDB 的介绍和优点,可以看我的公众号相关文章。

安装

  • 安装 duckdb_engine , pip install duckdb-engine
  • DuckDB 选项出现在数据库下拉框里
  • 设置数据库连接, duckdb:////Users/whoever/path/to/duck.db
    或者 duckdb:///:memory:
    (内存数据库)
  • 在 SQL Lab 里, 可以像使用其它数据库一样使用它了
  • 在 SQL Lab 里, 可以直接查询磁盘上的 parquet 或者 CSV: SELECT * from 'test.parquet'

目前支持 DuckDB 的 Superset 还没有新的版本 release,如果想体验的,需要安装 master 版本。

DuckDB 直接读取 CSV 与 Parquet

  • Parquet
SELECT  count(*) from '/Users/steven/data/yellow_taxi/*/*.parquet'

返回 1173057927,用时 1.01s(11 亿数据秒出有没有?),还支持通配符(下图为我把 NYC Yellow Taxi 的数据按年拆分)

  • CSV
SELECT  count(*) from '/Users/steven/data/sales_5m.csv.gz'

csv.gz, 500 万,这个要比 Parquet 慢多了。

DuckDB 与 Jinja 模板,解锁更多功能

之前的文章已经介绍过 Superset 支持 Jinja 模板, 今天顺便介绍下 DuckDB 与 Jinja 模板相结合的例子。

因为 DuckDB 可以和 Pandas DataFrame、CSV、Parquet 无缝衔接,我们可以充分利用这个特点来定义一些宏,读取(处理)一些 Superset 不支持的格式。

今天就介绍一个读取 Excel 的例子,

定义宏

# activate Jinja templatingFEATURE_FLAGS = {   # . . . . .  "ENABLE_TEMPLATE_PROCESSING"True}import pandas as pdimport tempfiledef read_excel(file_path, sheet_name=0,header=0):    """    可以参照pandas的read_excel方法来丰富参数    把Excel转为Parquet格式,方便DuckDB访问    """    df = pd.read_excel(file_path,sheet_name=sheet_name,header=header)    fp = tempfile.NamedTemporaryFile(delete=False)    df.to_parquet(f"{fp.name}.parquet",index=False)    return f"{fp.name}.parquet"# 定义自己的宏JINJA_CONTEXT_ADDONS = {    'read_excel': read_excel,}

使用宏,

SELECT * from  '{{read_excel("/Users/steven/data/titanic.xlsx")}}';


可以根据需要完善 read_excel
函数。同样的我们还可以用于机器学习之中。

DuckDB 有没有给你带来惊艳的感觉?

参考资料

[1]

Superset: https://github.com/apache/superset

[2]

duckdb_engine: https://github.com/Mause/duckdb_engine

[3]

rwhaling: https://github.com/rwhaling

[4]

zhaoyongjie: https://github.com/zhaoyongjie

[5]

villebro: https://github.com/villebro


欢迎关注公众号

有兴趣加群讨论数据挖掘和分析的朋友可以加我微信(witwall),暗号:入群

也欢迎投稿!



文章转载自alitrack,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论