Dask的SQL查询层
项目描述
dask-sql
是一个Python的分布式SQL查询引擎。它允许您使用常见的SQL操作和Python代码混合查询和转换数据,并在需要时轻松扩展计算。
- 结合Python和SQL的力量:使用Python加载数据,用SQL转换数据,用Python增强数据,用SQL查询数据——或者反过来。通过
dask-sql
,您可以混合pandas
和Dask
的知名Python DataFrame API以及常见的SQL操作,以最符合您的方式处理数据。 - 无限扩展:利用伟大的
Dask
生态系统,您的计算可以根据需要扩展——从您的笔记本电脑到您的超级集群——无需更改任何SQL代码。从k8s到云部署,从批处理系统到YARN——如果Dask
支持它,那么dask-sql
也会。 - 您的数据,您的查询:在SQL中无需任何性能损失地使用Python用户定义函数(UDF),并使用大量Python库(例如机器学习、不同的复杂输入格式、复杂的统计)扩展您的SQL查询。
- 易于安装和维护:
dask-sql
只需通过pip/conda安装即可(或者如果您喜欢,也可以通过docker run)。 - 在任何地方使用SQL:
dask-sql
与您的jupyter笔记本、常规Python模块集成,或者可以从任何BI工具作为独立SQL服务器使用。它甚至可以原生集成到Apache Hue中。 - GPU支持:
dask-sql
支持通过利用如cuDF
等RAPIDS
库在CUDA启用的GPU上运行SQL查询,从而为SQL提供加速计算。
在文档中了解更多。
示例
在这个例子中,我们使用从磁盘加载的一些数据,并用我们的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)
快速入门
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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6f9092dfc385a4cc9a5b5385e70dd3e6fc0f04b51e4cffbe4b219141f8cff099 |
|
MD5 | 63b611acf3655cf6f8740aed522dca0c |
|
BLAKE2b-256 | 7e845425d2745102cdc6aa1e66a601b0fb937210c0853e113504924577146ec5 |
dask_sql-2024.5.0-cp38-abi3-win_amd64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 504cc113e934a443394ba768d51af6b6eae4ef7ce7c3de5cbe99e744ecd17ba4 |
|
MD5 | 2845aecfae26b2f79e380fae65d32394 |
|
BLAKE2b-256 | ca7ed18488738d93a6cf8f7e712b3987cc72255ab1476dc174ead1df2703a60f |
dask_sql-2024.5.0-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a3a3f8e1dc49b49f270baa1d75c973c3efc9bf7d13761d84e0d79b1b0492980f |
|
MD5 | 8f257f91b128bfe1c155299f8a49d17a |
|
BLAKE2b-256 | c3e95bf3d08e753371aef0656c7380bdbc03fd250c0172504370b7655d86241a |
dask_sql-2024.5.0-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 5f57067c6dbe98897d16d357db51d2d3d77130893478d63896f16a6b2502fcc6 |
|
MD5 | 32a7435fa526eb6c105719d4943036ce |
|
BLAKE2b-256 | b364f8e36bd88dab8aa793239e045ab03725b736746111b041afcb0bc519654e |
dask_sql-2024.5.0-cp38-abi3-macosx_11_0_arm64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | ab234a53ad99878a53b9ff34540f635964bc62cff7f21fff71ed4c9eb739e937 |
|
MD5 | c4acfc2689130a184c061c0434a6e0b7 |
|
BLAKE2b-256 | 0c97083cbb72d3ff44c5027dcc33e0433cd1c394e6e4f7a615b2f44d3ff87565 |
dask_sql-2024.5.0-cp38-abi3-macosx_10_12_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 42f9b0ebe435f6d8a4b7211ee3b2fc26bba89a3817aa3445808e23fe1485ab4a |
|
MD5 | 8506a84f91de4c912fdda55f27fff760 |
|
BLAKE2b-256 | 091cf7e5efa46f003485d3eeb847c87c8cbe111ff32e6aad8fa3eee86e97ec11 |