Apache IoTDB开发系统之命令行界面(CLI)
IoTDB 提供 Cli/shell 工具,供用户在命令行中与 IoTDB 服务器进行交互。本文档介绍了 Cli/shell 工具的工作原理及其参数的含义。
注意:在本文档中,$IOTDB_HOME 表示 IoTDB 安装目录的路径。
安装
在 iotdb 的根路径下:
> mvn clean package -pl cli -am -DskipTests
构建完成后,IoTDB cli 将位于文件夹 “cli/target/iotdb-cli-{project.version}” 中。
运行
运行命令行界面
安装后,IoTDB:中有一个默认用户,默认密码为。用户可以使用此用户名试用IoTDB Cli/Shell工具。cli 启动脚本是 $IOTDB_HOME/bin 文件夹下的文件。启动脚本时,需要指定 IP 和端口。(确保 IoTDB 服务器在使用 Cli/Shell 工具连接时正常运行。root
root
start-cli
下面是服务器在本地启动且用户未更改正在运行的端口的示例。默认 rpc 端口为 6667
如果需要连接到远程服务器或更改正在运行的服务器的 rpc 端口号,请将特定的 IP 和 RPC PORT 设置为 -h 和 -p.
您也可以在启动脚本的前面设置自己的环境变量(linux 为 “/sbin/start-cli.sh”,Windows 为 “/sbin/start-cli.bat”)
Linux 和 MacOS 系统启动命令如下:
Shell > sbin/start-cli.sh -h 127.0.0.1 -p 6667 -u root -pw root
Windows 系统启动命令如下:
Shell > sbin\start-cli.bat -h 127.0.0.1 -p 6667 -u root -pw root
使用这些命令后,CLI 可以成功启动。成功状态如下:
_____ _________ ______ ______
|_ _| | _ _ ||_ _ `.|_ _ \
| | .--.|_/ | | \_| | | `. \ | |_) |
| | / .'`\ \ | | | | | | | __'.
_| |_| \__. | _| |_ _| |_.' /_| |__) |
|_____|'.__.' |_____| |______.'|_______/ version <version>
IoTDB> login successfully
IoTDB>
进入或可以退出 Cli。命令行将显示quit
exit
quit normally
命令行界面参数
Parameter name | Parameter type | Required | Description | Example |
---|---|---|---|---|
-disableISO8601 | No parameters | No | If this parameter is set, IoTDB will print the timestamp in digital form | -disableISO8601 |
-h <host > |
string, no quotation marks | Yes | The IP address of the IoTDB server | -h 10.129.187.21 |
-help | No parameters | No | Print help information for IoTDB | -help |
-p <rpcPort > |
int | Yes | The rpc port number of the IoTDB server. IoTDB runs on rpc port 6667 by default | -p 6667 |
-pw <password > |
string, no quotation marks | No | The password used for IoTDB to connect to the server. If no password is entered, IoTDB will ask for password in Cli command | -pw root |
-u <username > |
string, no quotation marks | Yes | User name used for IoTDB to connect the server | -u root |
-maxPRC <maxPrintRowCount > |
int | No | Set the maximum number of rows that IoTDB returns | -maxPRC 10 |
-e <execute > |
string | No | manipulate IoTDB in batches without entering cli input mode | -e “show storage group” |
-c | empty | No | If the server enables , then cli must use rpc_thrift_compression_enable=true -c |
-c |
下面是一个cli命令,它将主机与IP 10.129.187.21,rpc端口6667,用户名“root”,密码“root”连接起来,并以数字形式打印时间戳。IoTDB 命令行上显示的最大行数为 10 行。
Linux 和 MacOS 系统启动命令如下:
Shell > sbin/start-cli.sh -h 10.129.187.21 -p 6667 -u root -pw root -disableISO8601 -maxPRC 10
Windows 系统启动命令如下:
Shell > sbin\start-cli.bat -h 10.129.187.21 -p 6667 -u root -pw root -disableISO8601 -maxPRC 10
有关在服务器端启用 OpenID 连接身份验证的 CLI 的使用说明
如果在服务器端启用了 OIDC,则不需要用户名/密码,但需要来自 OIDC 提供商的有效访问令牌。因此,作为用户名,您使用令牌并且密码必须为空,例如
Shell > sbin/start-cli.sh -h 10.129.187.21 -p 6667 -u {my-access-token} -pw ""
如何获取令牌取决于您的 OpenID Connect 设置,此处未介绍。在最简单的情况下,您可以通过命令行使用 .例如,如果您使用 keycloack 作为 OIDC,并且您有一个将客户端定义为公共的领域,则可以使用以下命令获取令牌(将 all 替换为适当的值)。passwort-grant
iotdb
curl
{}
curl -X POST "https://{your-keycloack-server}/auth/realms/{your-realm}/protocol/openid-connect/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "username={username}" \
-d "password={password}" \
-d 'grant_type=password' \
-d "client_id=iotdb"
响应看起来像
{"access_token":"eyJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJxMS1XbTBvelE1TzBtUUg4LVNKYXAyWmNONE1tdWNXd25RV0tZeFpKNG93In0.eyJleHAiOjE1OTAzOTgwNzEsImlhdCI6MTU5MDM5Nzc3MSwianRpIjoiNjA0ZmYxMDctN2NiNy00NTRmLWIwYmQtY2M2ZDQwMjFiNGU4IiwiaXNzIjoiaHR0cDovL2F1dGguZGVtby5wcmFnbWF0aWNpbmR1c3RyaWVzLmRlL2F1dGgvcmVhbG1zL0lvVERCIiwiYXVkIjoiYWNjb3VudCIsInN1YiI6ImJhMzJlNDcxLWM3NzItNGIzMy04ZGE2LTZmZThhY2RhMDA3MyIsInR5cCI6IkJlYXJlciIsImF6cCI6ImlvdGRiIiwic2Vzc2lvbl9zdGF0ZSI6IjA2MGQyODYyLTE0ZWQtNDJmZS1iYWY3LThkMWY3ODQ2NTdmMSIsImFjciI6IjEiLCJhbGxvd2VkLW9yaWdpbnMiOlsibG9jYWxob3N0OjgwODAiXSwicmVhbG1fYWNjZXNzIjp7InJvbGVzIjpbIm9mZmxpbmVfYWNjZXNzIiwidW1hX2F1dGhvcml6YXRpb24iLCJpb3RkYl9hZG1pbiJdfSwicmVzb3VyY2VfYWNjZXNzIjp7ImFjY291bnQiOnsicm9sZXMiOlsibWFuYWdlLWFjY291bnQiLCJtYW5hZ2UtYWNjb3VudC1saW5rcyIsInZpZXctcHJvZmlsZSJdfX0sInNjb3BlIjoiZW1haWwgcHJvZmlsZSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJ1c2VyIn0.nwbrJkWdCNjzFrTDwKNuV5h9dDMg5ytRKGOXmFIajpfsbOutJytjWTCB2WpA8E1YI3KM6gU6Jx7cd7u0oPo5syHhfCz119n_wBiDnyTZkFOAPsx0M2z20kvBLN9k36_VfuCMFUeddJjO31MeLTmxB0UKg2VkxdczmzMH3pnalhxqpnWWk3GnrRrhAf2sZog0foH4Ae3Ks0lYtYzaWK_Yo7E4Px42-gJpohy3JevOC44aJ4auzJR1RBj9LUbgcRinkBy0JLi6XXiYznSC2V485CSBHW3sseXn7pSXQADhnmGQrLfFGO5ZljmPO18eFJaimdjvgSChsrlSEmTDDsoo5Q","expires_in":300,"refresh_expires_in":1800,"refresh_token":"eyJhbGciOiJIUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJhMzZlMGU0NC02MWNmLTQ5NmMtOGRlZi03NTkwNjQ5MzQzMjEifQ.eyJleHAiOjE1OTAzOTk1NzEsImlhdCI6MTU5MDM5Nzc3MSwianRpIjoiNmMxNTBiY2EtYmE5NC00NTgxLWEwODEtYjI2YzhhMmI5YmZmIiwiaXNzIjoiaHR0cDovL2F1dGguZGVtby5wcmFnbWF0aWNpbmR1c3RyaWVzLmRlL2F1dGgvcmVhbG1zL0lvVERCIiwiYXVkIjoiaHR0cDovL2F1dGguZGVtby5wcmFnbWF0aWNpbmR1c3RyaWVzLmRlL2F1dGgvcmVhbG1zL0lvVERCIiwic3ViIjoiYmEzMmU0NzEtYzc3Mi00YjMzLThkYTYtNmZlOGFjZGEwMDczIiwidHlwIjoiUmVmcmVzaCIsImF6cCI6ImlvdGRiIiwic2Vzc2lvbl9zdGF0ZSI6IjA2MGQyODYyLTE0ZWQtNDJmZS1iYWY3LThkMWY3ODQ2NTdmMSIsInNjb3BlIjoiZW1haWwgcHJvZmlsZSJ9.ayNpXdNX28qahodX1zowrMGiUCw2AodlHBQFqr8Ui7c","token_type":"bearer","not-before-policy":0,"session_state":"060d2862-14ed-42fe-baf7-8d1f784657f1","scope":"email profile"}
这里有趣的部分是 带有密钥的访问令牌 .这必须作为用户名(带参数)和空密码传递给 CLI。access_token
-u
CLI 的批量操作
-e 参数是为 Cli/shell 工具设计的,适用于您希望通过脚本批量操作 IoTDB 的情况。通过使用 -e 参数,您可以在不进入 cli 输入模式的情况下操作 IoTDB。
为了避免语句和其他参数的混淆,目前的情况只支持 -e 参数作为最后一个参数。
-e 参数对 Cli/shell 的用法如下:
Linux 和 MacOS 系统命令:
Shell > sbin/start-cli.sh -h {host} -p {rpcPort} -u {user} -pw {password} -e {sql for iotdb}
视窗系统命令:
Shell > sbin\start-cli.bat -h {host} -p {rpcPort} -u {user} -pw {password} -e {sql for iotdb}
在 Windows 环境中,需要使用 -e 参数的 SQL 语句来替换``
" "
为了更好地解释 -e 参数的使用,以下面为例(在 linux 系统上)。
假设您要为新启动的 IoTDB 创建一个存储组 root.demo,创建一个时间序列 root.demo.s1 并在其中插入三个数据点。使用 -e 参数,您可以编写如下的 shell:
# !/bin/bash
host=127.0.0.1
rpcPort=6667
user=root
pass=root
./sbin/start-cli.sh -h ${host} -p ${rpcPort} -u ${user} -pw ${pass} -e "set storage group to root.demo"
./sbin/start-cli.sh -h ${host} -p ${rpcPort} -u ${user} -pw ${pass} -e "create timeseries root.demo.s1 WITH DATATYPE=INT32, ENCODING=RLE"
./sbin/start-cli.sh -h ${host} -p ${rpcPort} -u ${user} -pw ${pass} -e "insert into root.demo(timestamp,s1) values(1,10)"
./sbin/start-cli.sh -h ${host} -p ${rpcPort} -u ${user} -pw ${pass} -e "insert into root.demo(timestamp,s1) values(2,11)"
./sbin/start-cli.sh -h ${host} -p ${rpcPort} -u ${user} -pw ${pass} -e "insert into root.demo(timestamp,s1) values(3,12)"
./sbin/start-cli.sh -h ${host} -p ${rpcPort} -u ${user} -pw ${pass} -e "select s1 from root.demo"
打印结果如图所示,与 cli 和 jdbc 操作一致。
Shell > ./shell.sh
+-----------------------------+------------+
| Time|root.demo.s1|
+-----------------------------+------------+
|1970-01-01T08:00:00.001+08:00| 10|
|1970-01-01T08:00:00.002+08:00| 11|
|1970-01-01T08:00:00.003+08:00| 12|
+-----------------------------+------------+
Total line number = 3
It costs 0.267s
需要注意的是,在 shell 脚本中使用 -e 参数需要注意特殊字符的转义。
- 点赞
- 收藏
- 关注作者
评论(0)