跳转到主要内容

Dask的SQL查询层

项目描述

Conda PyPI GitHub Workflow Status Read the Docs Codecov GitHub Binder

SQL + Python

dask-sql是一个Python的分布式SQL查询引擎。它允许您使用常见的SQL操作和Python代码混合查询和转换数据,并在需要时轻松扩展计算。

  • 结合Python和SQL的力量:使用Python加载数据,用SQL转换数据,用Python增强数据,用SQL查询数据——或者反过来。通过dask-sql,您可以混合pandasDask的知名Python DataFrame API以及常见的SQL操作,以最符合您的方式处理数据。
  • 无限扩展:利用伟大的Dask生态系统,您的计算可以根据需要扩展——从您的笔记本电脑到您的超级集群——无需更改任何SQL代码。从k8s到云部署,从批处理系统到YARN——如果Dask 支持它,那么dask-sql也会。
  • 您的数据,您的查询:在SQL中无需任何性能损失地使用Python用户定义函数(UDF),并使用大量Python库(例如机器学习、不同的复杂输入格式、复杂的统计)扩展您的SQL查询。
  • 易于安装和维护dask-sql只需通过pip/conda安装即可(或者如果您喜欢,也可以通过docker run)。
  • 在任何地方使用SQLdask-sql与您的jupyter笔记本、常规Python模块集成,或者可以从任何BI工具作为独立SQL服务器使用。它甚至可以原生集成到Apache Hue中。
  • GPU支持dask-sql支持通过利用如cuDFRAPIDS库在CUDA启用的GPU上运行SQL查询,从而为SQL提供加速计算。

文档中了解更多。

dask-sql GIF

示例

在这个例子中,我们使用从磁盘加载的一些数据,并用我们的Python代码中的SQL命令查询它们。任何pandas或dask dataframe都可以用作输入,dask-sql理解大量格式(csv、parquet、json等)和位置(s3、hdfs、gcs等)。

import dask.dataframe as dd
from dask_sql import Context

# Create a context to hold the registered tables
c = Context()

# Load the data and register it in the context
# This will give the table a name, that we can use in queries
df = dd.read_csv("...")
c.create_table("my_data", df)

# Now execute a SQL query. The result is again dask dataframe.
result = c.sql("""
    SELECT
        my_data.name,
        SUM(my_data.x)
    FROM
        my_data
    GROUP BY
        my_data.name
""", return_futures=False)

# Show the result
print(result)

快速入门

请查阅文档或从binder开始示例笔记本。

dask-sql目前正在开发中,迄今为止并不理解所有SQL命令(但大部分都理解)。我们积极寻求反馈、改进和贡献者!

安装

dask-sql可以通过conda(推荐)或pip安装——或者在一个开发环境中。

使用conda

创建新的conda环境或使用您已经存在的环境

conda create -n dask-sql
conda activate dask-sql

conda-forge频道安装包

conda install dask-sql -c conda-forge

使用pip

您可以使用以下命令安装包

pip install dask-sql

开发中

如果您想使用最新(尚未发布)的dask-sql版本,或者如果您计划在dask-sql上进行开发,您也可以从源安装包。

git clone https://github.com/dask-contrib/dask-sql.git

创建新的conda环境并安装开发环境

conda env create -f continuous_integration/environment-3.9.yaml

不建议在环境设置中使用pip而不是conda

之后,您可以在开发模式下安装包

pip install -e ".[dev]"

Rust DataFusion绑定作为pip install的一部分构建。注意,如果对src/中的Rust源进行了更改,则必须重新运行构建以重新编译绑定。此存储库使用pre-commit钩子。要安装它们,请调用

pre-commit install

测试

您可以使用以下命令运行测试(安装后)

pytest tests

GPU特定的测试需要额外依赖项,这些依赖项在continuous_integration/gpuci/environment.yaml中指定。这些可以通过运行添加到开发环境

conda env update -n dask-sql -f continuous_integration/gpuci/environment.yaml

并且可以使用以下命令运行GPU特定的测试

pytest tests -m gpu --rungpu

SQL服务器

dask-sql附带了一个小型SQL服务器的测试实现。我们不是重新构建完整的ODBC驱动程序,而是重新使用presto wire protocol。到目前为止,这只是一个开发的开始,缺少一些重要的概念,例如身份验证。

您可以通过安装后运行来测试sql presto服务器。

dask-sql-server

或者使用创建的docker镜像

docker run --rm -it -p 8080:8080 nbraun/dask-sql

在一个终端中。这将在默认端口8080上启动一个服务器,对于任何presto客户端来说,它看起来就像一个普通的presto数据库。

您可以用默认的presto客户端来测试这个。

presto --server localhost:8080

现在您可以发起简单的SQL查询(默认情况下没有加载数据)

=> SELECT 1 + 1;
 EXPR$0
--------
    2
(1 row)

更多信息请参阅文档

CLI

您还可以运行CLI dask-sql来快速测试SQL命令

dask-sql --load-test-data --startup

(dask-sql) > SELECT * FROM timeseries LIMIT 10;

它是如何工作的?

在核心上,dask-sql做两件事

  • 使用DataFusion将SQL查询转换为关系代数,这以逻辑查询计划的形式表示 - 类似于许多其他SQL引擎(Hive、Flink、...)
  • 将查询的描述转换为dask API调用(并执行它们) - 返回一个dask数据框。

对于第一步,Arrow DataFusion需要了解dask数据框的列和类型,因此定义了一些Rust代码来为dask数据框存储这些信息,这些代码在dask_planner中。在将关系代数转换完成后(使用DaskSQLContext.logical_relational_algebra),定义在dask_sql.physical中的python方法通过逐个转换关系代数的每一部分,将其转换为物理的dask执行计划。

项目详情


下载文件

下载您平台上的文件。如果您不确定选择哪一个,请了解更多关于安装包的信息。

源代码分布

dask_sql-2024.5.0.tar.gz (195.5 kB 查看哈希)

上传时间

构建版本

dask_sql-2024.5.0-cp38-abi3-win_amd64.whl (16.6 MB 查看哈希值)

上传时间 CPython 3.8+ Windows x86-64

dask_sql-2024.5.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (18.4 MB 查看哈希值)

上传时间 CPython 3.8+ manylinux: glibc 2.17+ x86-64

dask_sql-2024.5.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (18.5 MB 查看哈希值)

上传时间 CPython 3.8+ manylinux: glibc 2.17+ ARM64

dask_sql-2024.5.0-cp38-abi3-macosx_11_0_arm64.whl (15.6 MB 查看哈希值)

上传时间 CPython 3.8+ macOS 11.0+ ARM64

dask_sql-2024.5.0-cp38-abi3-macosx_10_12_x86_64.whl (17.1 MB 查看哈希值)

上传时间 CPython 3.8+ macOS 10.12+ x86-64

由以下赞助商支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面