cqlsh:CQL shell
cqlsh
是一个命令行界面,用于使用 CQL(Cassandra 查询语言)与 Cassandra 交互。它与每个 Cassandra 包一起提供,可以在 bin/ 目录中找到,与 cassandra 可执行文件位于同一目录。cqlsh
使用 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
条件的 INSERT
、UPDATE
和 DELETE
)使用。对于这些操作,串行一致性级别定义串行阶段(或“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>
PAGING
启用分页、禁用分页或设置读取查询的页面大小。启用分页后,一次只获取一页数据,并将出现提示以获取下一页。通常,在交互式会话中启用分页是一个好主意,以避免一次获取和打印大量数据。
用法
:
PAGING ON
PAGING OFF
PAGING <page size in rows>
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 TO
和 COPY FROM
的选项,请参阅 shared-copy-options
。
COPY FROM
将数据从 CSV 文件复制到表。
用法
:
COPY <table name> [(<column>, ...)] FROM <file name> WITH <copy option> [AND <copy option> ...]
如果未指定任何列,则 CSV 文件中的所有列都将复制到表中。要复制的列子集可以通过在表名后添加用括号括起来的逗号分隔的列名列表来指定。
<file name>
应该是一个字符串文字(带单引号),表示源文件的路径。这也可以是特殊值 STDIN
(不带单引号)以从 stdin 读取 CSV 数据。
有关适用于 COPY TO
和 COPY 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 TO
和 COPY 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'}