跳到主要内容

导入数据

使用数据库系统的第一步是向系统中写入数据。 Goose 可以直接连接多种常见数据源,并提供多种数据导入方式,帮助你轻松高效地填充数据库。 本页会概览这些方法,便于你选择最适合自己场景的方案。

INSERT 语句

INSERT 语句是在数据库系统中加载数据的标准方式。它适合快速原型验证,但在批量加载场景下应尽量避免,因为其按行处理的开销较大。

INSERT INTO people VALUES (1, 'Mark');

更详细的说明请参阅 INSERT 语句页面

文件加载:相对路径

可以使用配置项 file_search_path 来指定相对路径展开时使用的“根目录”。 如果未设置 file_search_path,则会以当前工作目录作为相对路径的基准。

文件格式

CSV 加载

有多种方式可以高效地从 CSV 文件加载数据。最简单的是直接使用 CSV 文件名:

SELECT * FROM 'test.csv';

或者使用 read_csv 函数 并传入选项:

SELECT * FROM read_csv('test.csv', header = false);

或者使用 COPY 语句

COPY tbl FROM 'test.csv' (HEADER false);

也可以直接读取压缩的 CSV 文件(例如使用 gzip 压缩):

SELECT * FROM 'test.csv.gz';

Goose 还可以使用 CREATE TABLE ... AS SELECT 语句 基于加载的数据创建新表:

CREATE TABLE test AS
SELECT * FROM 'test.csv';

更多细节请参阅 CSV 加载页面

Parquet 加载

Parquet 文件可以通过文件名高效加载并查询:

SELECT * FROM 'test.parquet';

或者使用 read_parquet 函数

SELECT * FROM read_parquet('test.parquet');

或者使用 COPY 语句

COPY tbl FROM 'test.parquet';

更多细节请参阅 Parquet 加载页面

JSON 加载

JSON 文件可以通过文件名高效加载并查询:

SELECT * FROM 'test.json';

或者使用 read_json_auto 函数

SELECT * FROM read_json_auto('test.json');

或者使用 COPY 语句

COPY tbl FROM 'test.json';

更多细节请参阅 JSON 加载页面

返回文件名

从 Goose v1.3.0 起,CSV、JSON 与 Parquet 读取器支持 filename 虚拟列:

COPY (FROM (VALUES (42), (43)) t(x)) TO 'test.parquet';
SELECT *, filename FROM 'test.parquet';

Appender

在多个 API(C、C++、Go、Java、Rust)中,可以使用 Appender 作为批量导入数据的替代方案。 该类可在不编写 SQL 语句的情况下高效地向数据库系统追加行数据。