本文档包含 Databend 支持的所有 SDK 接入的最佳实践以及在使用过程中可能会出现的问题以及对应的解决方案。希望可以成为用户接入 Databend 的一把金钥匙,打开通向 Databend 的大门。
Databend JDBC
- Github: https://github.com/datafuselabs/databend-jdbc
- 入门示例:https://github.com/datafuselabs/databend-jdbc/blob/main/databend-jdbc/src/main/java/com/databend/jdbc/examples/Examples.java
创建 JDBC Connection
1 | private Connection createConnection() |
建表
1 | Connection c = createConnection(); |
单条插入数据
1 | Connection c = createConnection(); |
单条插入无法发挥 databend 的性能,写入性能较差,只能作为测试使用。推荐使用批量插入(Batch Insert)
批量插入
1 | public void BatchInsert() throws SQLException { |
在实际使用中,推荐增大 Batch size 到 10w~100w 之间
连接参数
https://github.com/datafuselabs/databend-jdbc/blob/main/docs/Connection.md
常见问题
Q: Upload to stream failed
报错
A: 检查 Client 到 OSS 的网络情况
Q: Spring boot 等项目 Slf4j provider not found
A: 这可能是引入的 slf4j 包产生了冲突,检查 pom 中 slf4j 版本是否一致
Q: 如何将 NULL 写入表
A: ps.setNull(index, Types.NULL)
Q: Spring boot JDBCTemplate getParameterType
not implement
A: getParameterType
在 databend JDBC 中目前还没有实现,已在开发计划中
Golang SDK
创建 sql.db client
1 | import ( |
执行 SQL
1 | conn, err := sql.Open("databend", dsn) |
批量插入
1 | func main() { |
请求单行/多行 (Querying Row/s)
1 | func main() { |
Python SDK
databend-py
创建 client
1 | c = Client.from_url("http://user:password@host:port/db?secure=false") |
Databend py DSN 中支持的参数可以参考: https://github.com/datafuselabs/databend-py/blob/main/docs/connection.md
建表&查询
1 | c = Client.from_url(databend_url) |
批量插入
1 | c = Client.from_url(databend_url) |
Upload data to stage
databend py 可以直接将 python slice 数据以 csv 格式导入到 databend stage
1 | from databend_py import Client |
Upload file to stage
Databend py 也可以直接将文件上传到 stage
1 | from databend_py import Client |
Databend sqlalchemy
创建 sqlalchemy connect 并查询
1 | from sqlalchemy import create_engine, text |
databend-sqlalchemy 在版本<v0.4.0 使用[databend-py](https://github.com/datafuselabs/databend-py)时作为内部 Driver,>= v0.4.0 时使用 databend driver python binding作为内部驱动程序。两者之间的唯一区别是,DSN中提供的连接参数不同。使用相应的版本时应该参考相应驱动程序提供的连接参数。
Bendsql
Exec
1 | use databend_driver::Client; |
请求单行数据
1 | let row = conn.query_row("SELECT * FROM books;").await.unwrap(); |
请求多行
1 | let mut rows = conn.query_iter("SELECT * FROM books;").await.unwrap(); |
DSN 参数
参考:https://github.com/datafuselabs/bendsql/blob/main/README.md#dsn