Cassandra 文档

版本

您正在查看预发布版本的文档。

cqlsh:CQL shell

cqlsh 是一个命令行界面,用于使用 CQL(Cassandra 查询语言)与 Cassandra 交互。它与每个 Cassandra 包一起提供,可以在 bin/ 目录中找到,与 cassandra 可执行文件位于同一目录。cqlsh 使用 Python 本机协议驱动程序实现,并连接到指定的单个节点。

兼容性

通常,特定版本的 cqlsh 仅保证与它发布的 Cassandra 版本一起使用。在某些情况下,cqlsh 可能与旧版或新版 Cassandra 一起使用,但这不是官方支持的。

可选依赖项

cqlsh 附带所有必要的依赖项。但是,有一些可选的依赖项可以安装以增强 cqlsh 的功能。

pytz

默认情况下,cqlsh 使用 UTC 时区显示所有时间戳。对于 Python 3.9 或更高版本,可以通过修改 cqlshrc 中的 timezone 选项或设置环境变量 TZ 来以不同的时区显示时间戳。但是,Python 3.8 或更低版本还需要安装 pytz 库。

cython

通过安装 cython 可以提高 cqlsh 的 COPY 操作的性能。这将编译对 COPY 性能至关重要的 Python 模块。

cqlshrc

cqlshrc 文件保存 cqlsh 的配置选项。默认情况下,该文件位于用户的主目录下的 ~/.cassandra/cqlshrc,但可以使用 --cqlshrc 选项指定自定义位置。

示例配置值和文档可以在 tarball 安装的 conf/cqlshrc.sample 文件中找到。您也可以查看 cqlshrc 文件的最新版本

cql 历史记录

您执行的所有 CQL 命令都将写入历史记录文件。默认情况下,CQL 历史记录将写入 ~/.cassandra/cql_history。您可以通过设置环境变量 CQL_HISTORY(例如 ~/some/other/path/to/cqlsh_history,其中 cqlsh_history 是一个文件)来更改此默认设置。如果历史记录文件的所有父目录不存在,则将创建它们。如果您不想持久化历史记录,可以通过将 CQL_HISTORY 设置为 /dev/null 来实现。此功能从 Cassandra 4.1 开始支持。

命令行选项

用法:cqlsh.py [选项] [主机 [端口]]

Apache Cassandra 的 CQL Shell

选项

--version

显示程序的版本号并退出

-h --help

显示此帮助消息并退出

-C --color

始终使用彩色输出

--no-color

从不使用彩色输出

--browser=BROWSER

用于显示 CQL 帮助的浏览器,其中 BROWSER 可以是:docs.python.org/3/library/webbrowser.html 中支持的浏览器之一。浏览器路径后跟 %s,例如:/usr/bin/google-chrome-stable %s

--ssl

使用 SSL

-u USERNAME --username=USERNAME

以用户身份进行身份验证。

-p PASSWORD --password=PASSWORD

使用密码进行身份验证。

-k KEYSPACE --keyspace=KEYSPACE

对给定键空间进行身份验证。

-f FILE --file=FILE

从 FILE 执行命令,然后退出

--debug

显示其他调试信息

--coverage

收集覆盖率数据

--encoding=ENCODING

为输出指定非默认编码。(默认:utf-8)

--cqlshrc=CQLSHRC

指定备用 cqlshrc 文件位置。

--credentials=CREDENTIALS

指定备用凭据文件位置。

--cqlversion=CQLVERSION

指定特定的 CQL 版本,默认情况下将使用服务器支持的最高版本。示例:“3.0.3”、“3.1.0”

--protocol-version=PROTOCOL_VERSION

指定特定的协议版本,否则客户端将默认并根据需要降级

-e EXECUTE --execute=EXECUTE

执行语句并退出。

--connect-timeout=CONNECT_TIMEOUT

指定连接超时时间(以秒为单位)(默认:5 秒)。

--request-timeout=REQUEST_TIMEOUT

指定默认请求超时时间(以秒为单位)(默认:10 秒)。

-t, --tty

强制 tty 模式(命令提示符)。

-v --v

打印 cqlsh 的当前版本。

特殊命令

除了支持常规 CQL 语句外,cqlsh 还支持一些不是 CQL 部分的特殊命令。这些命令将在下面详细介绍。

CONSISTENCY

用法CONSISTENCY <一致性级别>

将后续操作的一致性级别设置为。有效参数包括

  • ANY

  • ONE

  • TWO

  • THREE

  • QUORUM

  • ALL

  • LOCAL_QUORUM

  • LOCAL_ONE

  • SERIAL

  • LOCAL_SERIAL

SERIAL CONSISTENCY

用法SERIAL CONSISTENCY <一致性级别>

将后续操作的串行一致性级别设置为。有效参数包括

  • SERIAL

  • LOCAL_SERIAL

串行一致性级别仅由条件更新(带有 IF 条件的 INSERTUPDATEDELETE)使用。对于这些操作,串行一致性级别定义串行阶段(或“paxos”阶段)的一致性级别,而正常一致性级别定义“学习”阶段的一致性,即保证立即看到更新的读取类型。例如,如果条件写入的一致性级别为 QUORUM(并且成功),则保证 QUORUM 读取将看到该写入。但是,如果该写入的常规一致性级别为 ANY,则只有具有 SERIAL 一致性级别的读取才能保证看到它(即使具有 ALL 一致性级别的读取也不能保证足够)。

SHOW VERSION

打印正在使用的 cqlsh、Cassandra、CQL 和本机协议版本。示例

cqlsh> SHOW VERSION
[cqlsh 5.0.1 | Cassandra 3.8 | CQL spec 3.4.2 | Native protocol v4]

SHOW HOST

除了集群名称外,还打印 cqlsh 连接到的 Cassandra 节点的 IP 地址和端口。示例

cqlsh> SHOW HOST
Connected to Prod_Cluster at 192.0.0.1:9042.

SHOW REPLICAS

打印 Cassandra 节点的 IP 地址,这些节点是给定令牌和键空间的副本。此命令从 Cassandra 4.2 开始可用。

用法SHOW REPLICAS <令牌> (<键空间>)

示例用法

cqlsh> SHOW REPLICAS 95
['192.0.0.1', '192.0.0.2']

SHOW SESSION

漂亮地打印特定的跟踪会话。

用法SHOW SESSION <会话 ID>

示例用法

cqlsh> SHOW SESSION 95ac6470-327e-11e6-beca-dfb660d92ad8

Tracing session: 95ac6470-327e-11e6-beca-dfb660d92ad8

 activity                                                  | timestamp                  | source    | source_elapsed | client
-----------------------------------------------------------+----------------------------+-----------+----------------+-----------
                                        Execute CQL3 query | 2016-06-14 17:23:13.979000 | 127.0.0.1 |              0 | 127.0.0.1
 Parsing SELECT * FROM system.local; [SharedPool-Worker-1] | 2016-06-14 17:23:13.982000 | 127.0.0.1 |           3843 | 127.0.0.1
...

SOURCE

读取文件的内容,并将每行作为 CQL 语句或特殊 cqlsh 命令执行。

用法SOURCE <字符串文件名>

示例用法

cqlsh> SOURCE '/home/calvinhobbs/commands.cql'

CAPTURE

开始捕获命令输出并将其追加到指定的文件。在捕获期间,输出不会显示在控制台中。

用法:

CAPTURE '<file>';
CAPTURE OFF;
CAPTURE;

也就是说,要追加到的文件的路径必须放在字符串文字中。该路径相对于当前工作目录进行解释。波浪号速记符号('~/mydir')支持引用 $HOME

仅捕获查询结果输出。错误和仅 cqlsh 命令的输出仍将在 cqlsh 会话中显示。

要停止捕获输出并在 cqlsh 会话中再次显示它,请使用 CAPTURE OFF

要检查当前捕获配置,请使用不带参数的 CAPTURE

HELP

提供有关 cqlsh 命令的信息。要查看可用主题,请输入不带任何参数的 HELP。要查看有关主题的帮助,请使用 HELP <topic>。另请参阅 --browser 参数,以控制用于显示帮助的浏览器。

HISTORY

在屏幕上打印在服务器上执行的最后 n 个 cqlsh 命令。如果未指定,则行数默认为 50。n 设置为当前 CQL 会话,因此如果您将其设置为例如 10,从那时起,最多将返回 10 个最后命令。

用法:

HISTORY <n>

TRACING

启用或禁用查询的跟踪。启用跟踪后,查询完成后,将打印查询期间事件的跟踪。

用法:

TRACING ON
TRACING OFF

PAGING

启用分页、禁用分页或设置读取查询的页面大小。启用分页后,一次只获取一页数据,并将出现提示以获取下一页。通常,在交互式会话中启用分页是一个好主意,以避免一次获取和打印大量数据。

用法:

PAGING ON
PAGING OFF
PAGING <page size in rows>

EXPAND

启用或禁用行的垂直打印。启用 EXPAND 在获取许多列或单个列的内容很大时很有用。

用法:

EXPAND ON
EXPAND OFF

LOGIN

以指定 Cassandra 用户的身份对当前会话进行身份验证。

用法:

LOGIN <username> [<password>]

EXIT

结束当前会话并终止 cqlsh 进程。

用法:

EXIT
QUIT

CLEAR

清除控制台。

用法:

CLEAR
CLS

DESCRIBE

打印架构元素或集群的描述(通常是一系列 DDL 语句)。这对于转储所有或部分架构很有用。

用法:

DESCRIBE CLUSTER
DESCRIBE SCHEMA
DESCRIBE KEYSPACES
DESCRIBE KEYSPACE <keyspace name>
DESCRIBE TABLES
DESCRIBE TABLE <table name>
DESCRIBE INDEX <index name>
DESCRIBE MATERIALIZED VIEW <view name>
DESCRIBE TYPES
DESCRIBE TYPE <type name>
DESCRIBE FUNCTIONS
DESCRIBE FUNCTION <function name>
DESCRIBE AGGREGATES
DESCRIBE AGGREGATE <aggregate function name>

在任何命令中,DESC 都可以代替 DESCRIBE 使用。

DESCRIBE CLUSTER 命令打印集群名称和分区器

cqlsh> DESCRIBE CLUSTER

Cluster: Test Cluster
Partitioner: Murmur3Partitioner

DESCRIBE SCHEMA 命令打印重新创建整个架构所需的 DDL 语句。这对于转储架构以克隆集群或从备份恢复特别有用。

COPY TO

将数据从表复制到 CSV 文件。

用法:

COPY <table name> [(<column>, ...)] TO <file name> WITH <copy option> [AND <copy option> ...]

如果未指定任何列,则表中的所有列都将复制到 CSV 文件。要复制的列子集可以通过在表名后添加用括号括起来的逗号分隔的列名列表来指定。

<file name> 应该是一个字符串文字(带单引号),表示目标文件的路径。这也可以是特殊值 STDOUT(不带单引号)以将 CSV 打印到 stdout。

有关适用于 COPY TOCOPY FROM 的选项,请参阅 shared-copy-options

COPY TO 的选项

MAXREQUESTS

同时获取的最大令牌范围数。默认为 6。

PAGESIZE

在单个页面中获取的行数。默认为 1000。

PAGETIMEOUT

默认情况下,页面超时时间为每 1000 个页面大小条目 10 秒,如果页面大小更小,则为 10 秒。

BEGINTOKENENDTOKEN

要导出的令牌范围。默认为导出整个环。

MAXOUTPUTSIZE

输出文件大小的最大值,以行数衡量;超过此最大值,输出文件将被分成段。-1 表示无限制,也是默认值。

ENCODING

用于字符的编码。默认为 utf8

COPY FROM

将数据从 CSV 文件复制到表。

用法:

COPY <table name> [(<column>, ...)] FROM <file name> WITH <copy option> [AND <copy option> ...]

如果未指定任何列,则 CSV 文件中的所有列都将复制到表中。要复制的列子集可以通过在表名后添加用括号括起来的逗号分隔的列名列表来指定。

<file name> 应该是一个字符串文字(带单引号),表示源文件的路径。这也可以是特殊值 STDIN(不带单引号)以从 stdin 读取 CSV 数据。

有关适用于 COPY TOCOPY FROM 的选项,请参阅 shared-copy-options

COPY FROM 的选项

INGESTRATE

每秒处理的最大行数。默认为 100000。

MAXROWS

要导入的最大行数。-1 表示无限制,也是默认值。

SKIPROWS

要跳过的初始行数。默认为 0。

SKIPCOLS

要忽略的逗号分隔的列名列表。默认情况下,不会跳过任何列。

MAXPARSEERRORS

要忽略的最大全局解析错误数。-1 表示无限制,也是默认值。

MAXINSERTERRORS

要忽略的最大全局插入错误数。-1 表示无限制。默认值为 1000。

ERRFILE =

一个用于存储无法导入的所有行的文件,默认情况下为 import_<ks>_<table>.err,其中 <ks> 是您的键空间,<table> 是您的表名。

MAXBATCHSIZE

在单个批次中插入的最大行数。默认为 20。

MINBATCHSIZE

在单个批次中插入的最小行数。默认为 10。

CHUNKSIZE

一次从主进程传递给子工作进程的行数。默认为 5000。

共享 COPY 选项

适用于 COPY TOCOPY FROM 的选项。

NULLVAL

空值的字符串占位符。默认为 null

HEADER

对于 COPY TO,控制 CSV 输出文件中的第一行是否包含列名。对于 COPY FROM,指定 CSV 输入文件中的第一行是否包含列名。默认为 false

DECIMALSEP

用作小数点分隔符的字符。默认为 .

THOUSANDSSEP

用于分隔千位的字符。默认为空字符串。

BOOLSTYlE

布尔值的字符串文字格式。默认为 True,False

NUMPROCESSES

COPY 任务创建的子工作进程数。对于 COPY 任务,默认为 16。但是,最多将创建 (num_cores - 1) 个进程。

MAXATTEMPTS

在放弃之前,尝试获取数据范围(使用 COPY TO 时)或插入数据块(使用 COPY FROM 时)失败的最大次数。默认为 5。

REPORTFREQUENCY

状态更新以秒为单位的刷新频率。默认为 0.25。

RATEFILE

一个可选文件,用于输出速率统计信息。默认情况下,统计信息不会输出到文件。

转义引号

日期、IP 地址和字符串需要用单引号括起来。要在字符串文字中使用单引号本身,请使用单引号对其进行转义。

获取简单文本数据时,cqlsh 将返回一个未加引号的字符串。但是,从复杂类型(集合、用户定义类型等)获取文本数据时,cqlsh 将返回一个包含转义字符的带引号的字符串。例如

简单数据

cqlsh> CREATE TABLE test.simple_data (id int, data text, PRIMARY KEY (id));
cqlsh> INSERT INTO test.simple_data (id, data) values(1, 'I''m fine');
cqlsh> SELECT data from test.simple_data; data
----------
 I'm fine

复杂数据

cqlsh> CREATE TABLE test.complex_data (id int, data map<int, text>, PRIMARY KEY (id));
cqlsh> INSERT INTO test.complex_data (id, data) values(1, {1:'I''m fine'});
cqlsh> SELECT data from test.complex_data; data
------------------
 {1: 'I''m fine'}