【问题标题】:How to use Dask to read data from SQL <connection string>?如何使用 Dask 从 SQL <连接字符串> 中读取数据?
【发布时间】:2019-07-04 21:16:27
【问题描述】:

关于如何从 sqlAlchemy 读取数据到 dask 数据帧的文档中没有足够的示例。

我看到的一些例子是:

   df = dd.read_sql_table(table='my_table_name', uri=my_sqlalchemy_con_url, index_col='id')

但我的查询不是一次获取整个表,而只获取 (select * from ....table A where .....) 类型的查询作为参数传递.. 另外,如何传递没有提到连接参数。

如何从 sqlAlchemy 连接引擎传递连接参数并传递自定义查询而不是获取整个表。

我知道这是基本的,但在 docs/web 中找不到关于此的参考

编辑:

     d100 = 'mysql+mysqlconnector://{0}:{1}@{2}:{3}/{4}'.format("xx", "xx", "xxxxx.com", "3306", "xxxx") 
     df = dd.read_sql_table(table='select * from ps_g9 limit 10;', uri=d100, index_col='uuid') 

我得到表不存在错误

【问题讨论】:

    标签: python pandas dask


    【解决方案1】:

    数字索引的默认分区大小为 256 MB,除非您指定 npartitions。 对于字符串索引,您可以使用divisions 参数,例如

    ... division = sorted(['red', 'green', 'blue', 'yellow']) ...
    

    如果你有一个带有颜色名称的索引。

    另见https://github.com/dask/dask/issues/2604

    sqlalchemy 的其他参数可以使用engine_kwargs 关键字传递。另请参阅read_sql_table docs

    Here 是 Mannings Data Science at Scale with Python and Dask 一书相关章节的预览。

    【讨论】:

    • 问题是关于如何使用 sqlalchemy 从 db 获取数据到 dask 数据帧。官方文档中的示例讨论了使用 read_sql 获取整个表,但是没有给出获取数据子集的示例(select * from.... where....),因此要求提供此类示例。为了清楚起见,也更新了问题
    • 除了表名之外,您还可以在 table 参数中指定 sqlalchemy 表达式,因此 select.where() 应该可以工作(尽管未经测试)。您是否阅读了我在回答中提供的 github 链接,特别是 6th comment
    • 关于您的编辑:错误是因为当然没有名称为'select * from ps_g9 limit 10;' 的表。有关 sqlalchemie 表达式,请参阅 docs.sqlalchemy.org/en/13/core/tutorial.html。另请参阅 this SO question
    【解决方案2】:

    这是文档:https://docs.dask.org/en/stable/dataframe-api.html#dask.dataframe.read_sql_table

    它列出了以下内容:

    • “table”参数确实可以是表名或任何 SQL 表达式,由 sqlalchemy 实例构造(即,不是文本)
    • 字典engine_kwargs,如果给定,将在创建数据库查询引擎时传递给sqlalchemy

    【讨论】:

    • 把你想在引擎创建中放入的所有东西放入engine_kwargs,包括用户名/密码。您可能需要的具体内容取决于具体的引擎。
    • 也试过这个:d100 = 'mysql+mysqlconnector://{0}:{1}@{2}:{3}/{4}'.format("xx", "xx ", "xxxxx.com", "3306", "xxxx") df = dd.read_sql_table(table='select * from ps_g9 limit 10;', uri=d100, index_col='uuid') 我得到的表不存在
    • 编辑了问题以显示确切的错误,@mdurant
    • " 由 sqlalchemy 实例构造(即,不是文本)" - 请参阅 docs.sqlalchemy.org/en/13/core/tutorial.html
    • 是的,我正在尝试构建复杂查询的 sqlalecmy 版本并尝试.,.. 到目前为止没有工作...但是感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-20
    • 2011-09-02
    • 2012-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    相关资源
    最近更新 更多