⌘+k ctrl+k
1.1.3 (stable)
Search Shortcut cmd + k | ctrl + k
Dot Commands

点命令在DuckDB CLI客户端中可用。要使用这些命令之一,请在行首输入一个句点(.),紧接着输入您希望执行的命令名称。命令的附加参数在命令后以空格分隔输入。如果参数必须包含空格,可以使用单引号或双引号包裹该参数。点命令必须在一行内输入,句点前不能有空格。行末不需要分号。要查看可用命令,请使用.help命令。

点命令

命令 描述
.bail on|off 遇到错误后停止。默认值:off
.binary on|off 开启或关闭二进制输出。默认值:off
.cd DIRECTORY 将工作目录更改为 DIRECTORY
.changes on|off 显示SQL更改的行数
.check GLOB 如果自 .testcase 以来的输出不匹配,则失败
.columns 查询结果的列式渲染
.constant ?COLOR? 设置用于常量值的语法高亮颜色
.constantcode ?CODE? 设置用于常量值的语法高亮终端代码
.databases 列出附加数据库的名称和文件
.echo on|off 打开或关闭命令回显
.excel 在电子表格中显示下一个命令的输出
.exit ?CODE? 使用返回码 CODE 退出此程序
.explain ?on|off|auto? 更改 EXPLAIN 格式化模式。默认值:auto
.fullschema ?--indent? 显示模式和sqlite_stat表的内容
.headers on|off 开启或关闭标题显示
.help ?-all? ?PATTERN? 显示 PATTERN 的帮助文本
.highlight [on|off] 在 shell 中切换语法高亮 on/off
.import FILE TABLE FILE导入数据到TABLE
.indexes ?TABLE? 显示索引的名称
.keyword ?COLOR? 设置用于关键字的语法高亮颜色
.keywordcode ?CODE? 设置用于关键字的语法高亮终端代码
.lint OPTIONS 报告潜在的模式问题。
.log FILE|off 开启或关闭日志记录。FILE 可以是 stderr/stdout
.maxrows COUNT 设置显示的最大行数。仅适用于 duckbox 模式
.maxwidth COUNT 设置最大宽度(以字符为单位)。0 默认为终端宽度。仅适用于 duckbox 模式
.mode MODE ?TABLE? 设置 输出模式
.multiline 设置多行模式(默认)
.nullvalue STRING 使用 STRING 代替 NULL
.once ?OPTIONS? ?FILE? 仅将下一个SQL命令的输出发送到FILE
.open ?OPTIONS? ?FILE? 关闭现有数据库并重新打开 FILE
.output ?FILE? 将输出发送到 FILEstdout(如果省略 FILE
.parameter CMD ... 管理SQL参数绑定
.print STRING... 打印字面量 STRING
.prompt MAIN CONTINUE 替换标准提示
.quit 退出此程序
.read FILE FILE读取输入
.rows 查询结果的逐行渲染(默认)
.schema ?PATTERN? 显示与PATTERN匹配的CREATE语句
.separator COL ?ROW? 更改列和行的分隔符
.sha3sum ... 计算数据库内容的SHA3哈希值
.shell CMD ARGS... 在系统 shell 中运行 CMD ARGS...
.show 显示各种设置的当前值
.singleline 设置单行模式
.system CMD ARGS... 在系统 shell 中运行 CMD ARGS...
.tables ?TABLE? 列出与LIKE模式匹配的表名 TABLE
.testcase NAME 开始将输出重定向到 NAME
.timer on|off 打开或关闭SQL计时器。由;分隔但通过换行分隔的SQL语句将一起测量。
.width NUM1 NUM2 ... 设置列输出的最小列宽

使用 .help 命令

.help 文本可以通过传入一个文本字符串作为第二个参数来过滤。

.help m
.maxrows COUNT      Sets the maximum number of rows for display (default: 40). Only for duckbox mode.
.maxwidth COUNT     Sets the maximum width in characters. 0 defaults to terminal width. Only for duckbox mode.
.mode MODE ?TABLE?  Set output mode

.output: 将结果写入文件

默认情况下,DuckDB CLI 将结果发送到终端的标准输出。但是,可以使用 .output.once 命令来修改此行为。将所需的输出文件位置作为参数传递。.once 命令只会输出下一组结果,然后恢复到标准输出,但 .output 会将所有后续输出重定向到该文件位置。请注意,每个结果都会覆盖目标位置的整个文件。要恢复到标准输出,请输入不带文件参数的 .output

在这个例子中,输出格式被更改为markdown,目标被识别为一个Markdown文件,然后DuckDB将SQL语句的输出写入该文件。然后使用不带参数的.output将输出恢复为标准输出。

.mode markdown
.output my_results.md
SELECT 'taking flight' AS output_column;
.output
SELECT 'back to the terminal' AS displayed_column;

文件 my_results.md 将包含:

| output_column |
|---------------|
| taking flight |

终端将显示:

|   displayed_column   |
|----------------------|
| back to the terminal |

常见的输出格式是CSV,即逗号分隔值。DuckDB支持SQL语法将数据导出为CSV或Parquet,但如果需要,也可以使用CLI特定的命令来写入CSV。

.mode csv
.once my_output_file.csv
SELECT 1 AS col_1, 2 AS col_2
UNION ALL
SELECT 10 AS col1, 20 AS col_2;

文件 my_output_file.csv 将包含:

col_1,col_2
1,2
10,20

通过向.once命令传递特殊选项(标志),查询结果也可以发送到临时文件并自动在用户的默认程序中打开。使用-e标志生成文本文件(在默认文本编辑器中打开),或使用-x标志生成CSV文件(在默认电子表格编辑器中打开)。这对于更详细地检查查询结果非常有用,特别是在结果集相对较大的情况下。.excel命令等同于.once -x

.once -e
SELECT 'quack' AS hello;

结果随后在系统的默认文本文件编辑器中打开,例如:

cli_docs_output_to_text_editor

查询数据库模式

所有DuckDB客户端都支持使用SQL查询数据库模式,但CLI有额外的点命令,可以使理解数据库内容变得更加容易。 .tables命令将返回数据库中的表列表。它有一个可选参数,可以根据LIKE模式过滤结果。

CREATE TABLE swimmers AS SELECT 'duck' AS animal;
CREATE TABLE fliers AS SELECT 'duck' AS animal;
CREATE TABLE walkers AS SELECT 'duck' AS animal;
.tables
fliers    swimmers  walkers

例如,要过滤仅包含l的表,请使用LIKE模式%l%

.tables %l%
fliers   walkers

.schema 命令将显示用于定义数据库模式的所有SQL语句。

.schema
CREATE TABLE fliers (animal VARCHAR);
CREATE TABLE swimmers (animal VARCHAR);
CREATE TABLE walkers (animal VARCHAR);

配置语法高亮器

默认情况下,shell 支持语法高亮显示。 可以使用以下命令配置 CLI 的语法高亮器。

关闭高亮显示:

.highlight off

打开高亮显示:

.highlight on

配置用于突出显示常量的颜色:

.constant [red|green|yellow|blue|magenta|cyan|white|brightblack|brightred|brightgreen|brightyellow|brightblue|brightmagenta|brightcyan|brightwhite]
.constantcode [terminal_code]

配置用于突出显示关键字的颜色:

.keyword [red|green|yellow|blue|magenta|cyan|white|brightblack|brightred|brightgreen|brightyellow|brightblue|brightmagenta|brightcyan|brightwhite]
.keywordcode [terminal_code]

从CSV导入数据

已弃用 此功能仅出于兼容性原因包含在内,未来可能会被移除。 使用 read_csv 函数或 COPY 语句 来加载 CSV 文件。

DuckDB 支持 SQL 语法直接查询或导入 CSV 文件,但如果需要,也可以使用 CLI 特定的命令来导入 CSV。.import 命令接受两个参数,并且还支持多个选项。第一个参数是 CSV 文件的路径,第二个是要创建的 DuckDB 表的名称。由于 DuckDB 需要比 SQLite(DuckDB CLI 基于 SQLite)更严格的类型,因此在使用 .import 命令之前必须创建目标表。要自动检测模式并从 CSV 创建表,请参阅 导入文档中的 read_csv 示例

在这个例子中,通过切换到CSV模式并设置输出文件位置来生成CSV文件:

.mode csv
.output import_example.csv
SELECT 1 AS col_1, 2 AS col_2 UNION ALL SELECT 10 AS col1, 20 AS col_2;

现在CSV文件已经写入,可以使用所需的模式创建表并导入CSV。输出被重置到终端,以避免继续编辑上面指定的输出文件。--skip N选项用于忽略数据的第一行,因为它是标题行,并且表已经用正确的列名创建。

.mode csv
.output
CREATE TABLE test_table (col_1 INTEGER, col_2 INTEGER);
.import import_example.csv test_table --skip 1

请注意,.import 命令在识别要导入的数据结构时,会使用当前的 .mode.separator 设置。可以使用 --csv 选项来覆盖该行为。

.import import_example.csv test_table --skip 1 --csv