Apache IoTDB开发系统之命令行界面(CLI)
  RWAsyc7aInHM 2023年11月02日 36 0

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 工具连接时正常运行。rootrootstart-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。命令行将显示quitexitquit 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-grantiotdbcurl{}

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 参数需要注意特殊字符的转义。

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  tprTMCWDkFAR   2023年12月06日   23   0   0 用户名APIIP
RWAsyc7aInHM