搜索快捷键 cmd + k | ctrl + k
- 安装
- 文档
- 入门
- 连接
- 数据导入
- 概览
- 数据源
- CSV 文件
- JSON 文件
- 多个文件
- Parquet 文件
- 分区
- Appender(追加器)
- INSERT 语句
- 客户端 API
- 概览
- ADBC
- C
- C++
- CLI
- Dart
- Go
- Java (JDBC)
- Julia
- Node.js (已弃用)
- Node.js (Neo)
- ODBC
- PHP
- Python
- R
- Rust
- Swift
- Wasm
- SQL
- 介绍
- 语句
- 概览
- ANALYZE(分析)
- ALTER TABLE(修改表)
- ALTER VIEW(修改视图)
- ATTACH 和 DETACH
- CALL(调用)
- CHECKPOINT(检查点)
- COMMENT ON(注释)
- COPY(复制)
- CREATE INDEX(创建索引)
- CREATE MACRO(创建宏)
- CREATE SCHEMA(创建模式)
- CREATE SECRET(创建密钥)
- CREATE SEQUENCE(创建序列)
- CREATE TABLE(创建表)
- CREATE VIEW(创建视图)
- CREATE TYPE(创建类型)
- DELETE(删除)
- DESCRIBE(描述)
- DROP(删除)
- EXPORT 和 IMPORT DATABASE
- INSERT(插入)
- LOAD / INSTALL(加载 / 安装)
- PIVOT(透视)
- 性能分析
- SELECT(选择)
- SET / RESET(设置 / 重置)
- SET VARIABLE(设置变量)
- SUMMARIZE(汇总)
- 事务管理
- UNPIVOT(逆透视)
- UPDATE(更新)
- USE(使用)
- VACUUM(清理)
- 查询语法
- SELECT(选择)
- FROM 和 JOIN
- WHERE(在...处)
- GROUP BY(按...分组)
- GROUPING SETS(分组集)
- HAVING(拥有)
- ORDER BY(按...排序)
- LIMIT 和 OFFSET
- SAMPLE(抽样)
- 展开嵌套
- WITH(使用)
- WINDOW(窗口)
- QUALIFY(限定)
- VALUES(值)
- FILTER(过滤)
- 集合操作
- 预处理语句
- 数据类型
- 表达式
- 函数
- 概览
- 聚合函数
- 数组函数
- 位字符串函数
- Blob 函数
- 日期格式化函数
- 日期函数
- 日期部分函数
- 枚举函数
- 间隔函数
- Lambda 函数
- 列表函数
- 映射函数
- 嵌套函数
- 数值函数
- 模式匹配
- 正则表达式
- 结构体函数
- 文本函数
- 时间函数
- 时间戳函数
- 带时区时间戳函数
- 联合函数
- 实用函数
- 窗口函数
- 约束
- 索引
- 元查询
- DuckDB 的 SQL 方言
- 示例
- 配置
- 扩展
- 核心扩展
- 概览
- 自动补全
- Avro
- AWS
- Azure
- Delta
- DuckLake
- 编码
- Excel
- 全文搜索
- httpfs (HTTP 和 S3)
- Iceberg
- ICU
- inet
- jemalloc
- MySQL
- PostgreSQL
- 空间
- SQLite
- TPC-DS
- TPC-H
- UI(用户界面)
- VSS
- 指南
- 概览
- 数据查看器
- 数据库集成
- 文件格式
- 概览
- CSV 导入
- CSV 导出
- 直接读取文件
- Excel 导入
- Excel 导出
- JSON 导入
- JSON 导出
- Parquet 导入
- Parquet 导出
- 查询 Parquet 文件
- 使用 file: 协议访问文件
- 网络和云存储
- 概览
- HTTP Parquet 导入
- S3 Parquet 导入
- S3 Parquet 导出
- S3 Iceberg 导入
- S3 Express One
- GCS 导入
- Cloudflare R2 导入
- 通过 HTTPS / S3 使用 DuckDB
- Fastly 对象存储导入
- 元查询
- ODBC
- 性能
- Python
- 安装
- 执行 SQL
- Jupyter Notebooks
- marimo Notebooks
- Pandas 上的 SQL
- 从 Pandas 导入
- 导出到 Pandas
- 从 Numpy 导入
- 导出到 Numpy
- Arrow 上的 SQL
- 从 Arrow 导入
- 导出到 Arrow
- Pandas 上的关系型 API
- 多个 Python 线程
- 与 Ibis 集成
- 与 Polars 集成
- 使用 fsspec 文件系统
- SQL 编辑器
- SQL 功能
- 代码片段
- 故障排除
- 术语表
- 离线浏览
- 操作手册
- 开发
- 内部结构
- 为什么选择 DuckDB
- 行为准则
- 发布日历
- 路线图
- 站点地图
- 在线演示
文档 / 客户端 API
Go 客户端
DuckDB Go 客户端的最新版本是 1.3.2。
DuckDB Go 驱动程序 go-duckdb
允许通过 database/sql
接口使用 DuckDB。有关如何使用此接口的示例,请参阅官方文档和教程。
托管在 https://github.com/marcboeker/go-duckdb 的
go-duckdb
项目是官方的 DuckDB Go 客户端。
安装
要安装 go-duckdb
客户端,请运行
go get github.com/marcboeker/go-duckdb
导入
要导入 DuckDB Go 包,请将以下条目添加到您的导入中
import (
"database/sql"
_ "github.com/marcboeker/go-duckdb"
)
Appender(追加器)
DuckDB Go 客户端支持 DuckDB Appender API 进行批量插入。您可以通过向 NewAppenderFromConn()
提供 DuckDB 连接来获取一个新的 Appender。例如
connector, err := duckdb.NewConnector("test.db", nil)
if err != nil {
...
}
conn, err := connector.Connect(context.Background())
if err != nil {
...
}
defer conn.Close()
// Retrieve appender from connection (note that you have to create the table 'test' beforehand).
appender, err := NewAppenderFromConn(conn, "", "test")
if err != nil {
...
}
defer appender.Close()
err = appender.AppendRow(...)
if err != nil {
...
}
// Optional, if you want to access the appended rows immediately.
err = appender.Flush()
if err != nil {
...
}
示例
简单示例
使用 Go API 的示例如下
package main
import (
"database/sql"
"errors"
"fmt"
"log"
_ "github.com/marcboeker/go-duckdb"
)
func main() {
db, err := sql.Open("duckdb", "")
if err != nil {
log.Fatal(err)
}
defer db.Close()
_, err = db.Exec(`CREATE TABLE people (id INTEGER, name VARCHAR)`)
if err != nil {
log.Fatal(err)
}
_, err = db.Exec(`INSERT INTO people VALUES (42, 'John')`)
if err != nil {
log.Fatal(err)
}
var (
id int
name string
)
row := db.QueryRow(`SELECT id, name FROM people`)
err = row.Scan(&id, &name)
if errors.Is(err, sql.ErrNoRows) {
log.Println("no rows")
} else if err != nil {
log.Fatal(err)
}
fmt.Printf("id: %d, name: %s\n", id, name)
}
更多示例
有关更多示例,请参阅 duckdb-go
仓库中的示例。