前两天分享了 Superset 如何通过 DuckDB 访问 S3 上的数据集, 有网友反映,每次都要同时执行一长串的参数设置以及加载插件,非常麻烦,和 duckdb-engine 作者沟通后, 从 duckdb-engine 0.6.1 开始可以把设置(包括 httpfs 插件的自动加载)放到 Engine Parameters 中了,如果你有多个 S3 数据源,可以设置多个 DuckDB 数据库连接,每个连接配置一个 S3 的设置。
有兴趣看下视频版的,可以访问 B 站:https://www.bilibili.com/video/av557441848/
本地 minio 的参数设置
{ "connect_args": { "preload_extensions": [ "httpfs" ], "config": { "s3_endpoint": "127.0.0.1:9900", "s3_access_key_id": "minioadmin", "s3_secret_access_key": "minioadmin", "s3_url_style": "path", "s3_use_ssl": false } }}
Minio Play 的参数设置
{ "connect_args": { "preload_extensions": [ "httpfs" ], "config": { "s3_endpoint": "play.min.io:9000", "s3_access_key_id": "Q3AM3UQ867SPQQA43P2F", "s3_secret_access_key": "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG", "s3_url_style": "path", "s3_use_ssl": true, "s3_region":"us-east-1" } }}
duckdb-engine 0.6.1 版本支持 "s3_use_ssl": false, 0.6.0 版本需要 "s3_use_ssl": "false"
另附上Python代码版本的使用方法,
from sqlalchemy import create_engineimport pandas as pdconnect_args={ "preload_extensions": ["httpfs"], "config": { "s3_endpoint":"127.0.0.1:9900", "s3_access_key_id":"minioadmin", "s3_secret_access_key":"minioadmin", "s3_url_style":"path", "s3_use_ssl":False }}engine = create_engine("duckdb:///" ,connect_args=connect_args)def test_s3(): sql = "select count(*) from 's3://ontime/*.parquet'" df = pd.read_sql(sql, engine) print(df)test_s3()
有兴趣看下视频版的,可以访问 B 站:https://www.bilibili.com/video/av557441848/
欢迎关注公众号
有兴趣加群讨论数据挖掘和分析的朋友可以加我微信(witwall),暗号:入群
也欢迎投稿!