更新时间:2024-11-29 GMT+08:00

IoTDB数据导入

操作场景

该任务指导用户使用“import-csv.sh”将CSV格式的数据导入到IoTDB。

前提条件

  • 已安装客户端,例如安装目录为“/opt/client”,以下操作的客户端目录只是举例,请根据实际安装目录修改。
  • 各组件业务用户由MRS集群管理员根据业务需要创建。安全模式下,“机机”用户需要下载keytab文件,“人机”用户第一次登录时需修改密码。
  • 服务端默认开启了SSL,需参考使用IoTDB客户端章节生成“truststore.jks”证书,并拷贝到“客户端安装目录/IoTDB/iotdb/conf”目录下。

操作步骤

  1. 在本地准备CSV文件,文件名为:example-filename.csv,内容如下:
    Time,root.fit.d1.s1,root.fit.d1.s2,root.fit.d2.s1,root.fit.d2.s3,root.fit.p.s1
    1,100,hello,200,300,400
    2,500,world,600,700,800
    3,900,"hello, \"world\"",1000,1100,1200

    在导入数据前,需要注意:

    • 导入的数据不能包含空格,否则此次数据导入操作会失败,需要对导入数据类型进行自检。
    • 包含,的字段需要使用单引号或者双引号括起来,例如:hello,world修改为"hello,world"。
    • 字段中的"需要被替换成转义字符\",例如:"world"修改为\"world\"。
    • 字段中的'需要被替换成转义字符\',例如:'world' 修改为\'world\'。
    • 若输入的值为时间,格式为“yyyy-MM-dd'T'HH:mm:ss, yyy-MM-dd HH:mm:ss”或者“yyyy-MM-dd'T'HH:mm:ss.SSSZ”,例如:2022-02-28T11:07:00、2022-02-28 11:07:00或者2022-02-28T11:07:00.000Z。
  2. 使用WinSCP工具将CSV文件导入客户端节点,例如“/opt/client/IoTDB/iotdb/sbin”目录下。
  3. 以客户端安装用户,登录安装客户端的节点。
  4. 执行以下命令,切换到客户端安装目录。

    cd /opt/client

  5. 执行以下命令配置环境变量。

    source bigdata_env

  6. 首次登录IoTDB客户端前需执行以下步骤生成SSL客户端证书:
    1. 执行以下命令生成客户端SSL证书:

      keytool -noprompt -import -alias myservercert -file ca.crt -keystore truststore.jks

      执行该命令后需输入一个自定义密码。

    2. 将生成的“truststore.jks”文件拷贝到“客户端安装目录/IoTDB/iotdb/conf”目录下:

      cp truststore.jks 客户端安装目录/IoTDB/iotdb/conf

  7. 若当前集群开启了Kerberos认证,执行以下命令认证当前用户,若集群未开启Kerberos认证请跳过该步骤。

    kinit 组件业务用户

  8. 执行以下命令,切换到IoTDB客户端运行脚本所在目录。

    cd /opt/client/IoTDB/iotdb/sbin

  9. 集群未启用Kerberos认证(普通模式)需先调用“alter-cli-password.sh”脚本修改默认用户root的默认密码:

    sh alter-cli-password.sh IoTDBServer实例节点IP RPC端口

    • IoTDBServer RPC端口默认为22260,也可在参数“IOTDB_SERVER_RPC_PORT”中自行配置。
    • root用户默认密码请联系系统管理员获取
  10. 执行以下命令登录客户端

    ./start-cli.sh -h IoTDBServer实例节点的业务ip -p IoTDBServer RPC端口

    • IoTDBServer实例节点的业务IP地址可登录FusionInsight Manager后选择“集群 > 服务 > IoTDB > 实例”查看。
    • RPC端口默认为22260,可通过“集群 > 服务 > IoTDB > 配置 > 全部配置”,搜索参数“IOTDB_SERVER_RPC_PORT”获得。
    • 集群未启用Kerberos认证(普通模式)使用默认用户root登录IoTDB客户端。

    运行该命令后,根据实际需求指定业务用户名:

    • 指定业务用户名,则输入“yes”,并根据提示输入业务用户名和对应的业务用户密码:

    • 不指定业务用户名,则输入“no”;此时,则使用7中的用户执行后续操作:

    • 输入其它,则退出登录:

  11. (可选)创建元数据。
    IoTDB具有类型推断的能力,因此在数据导入前创建元数据不是必须的。但仍然推荐在使用CSV导入工具导入数据前创建元数据,因为这可以避免不必要的类型转换错误。命令如下:
    SET STORAGE GROUP TO root.fit.d1;
    SET STORAGE GROUP TO root.fit.d2;
    SET STORAGE GROUP TO root.fit.p;
    CREATE TIMESERIES root.fit.d1.s1 WITH DATATYPE=INT32,ENCODING=RLE;
    CREATE TIMESERIES root.fit.d1.s2 WITH DATATYPE=TEXT,ENCODING=PLAIN;
    CREATE TIMESERIES root.fit.d2.s1 WITH DATATYPE=INT32,ENCODING=RLE;
    CREATE TIMESERIES root.fit.d2.s3 WITH DATATYPE=INT32,ENCODING=RLE;
    CREATE TIMESERIES root.fit.p.s1 WITH DATATYPE=INT32,ENCODING=RLE;
  12. 执行以下命令,退出客户端。

    quit;

  13. 执行以下命令,切换到“import-csv.sh”运行脚本所在目录。

    cd /opt/client/IoTDB/iotdb/tools

  14. 执行以下命令运行import-csv.sh,导入“example-filename.csv”文件。

    ./import-csv.sh -h IoTDBServer实例节点的业务ip -p IoTDBServer RPC端口 -f example-filename.csv

    需根据提示交互式输入业务用户名和对应密码,如下显示表示CSV文件导入成功:

  15. 验证数据一致性。
    1. 执行以下命令,切换到IoTDB客户端运行脚本所在目录。

      cd /opt/client/IoTDB/iotdb/sbin

    2. 参考10登录IoTDB客户端。执行SQL查询数据并与1中数据进行对比。
    3. 查看导入的数据与1中的数据是否一致,若一致则表示导入成功。

      例如,执行以下命令查看导入的数据:

      SELECT * FROM root.fit.**;

      • 为避免安全风险,推荐使用交互式方式导入CSV文件。
      • CSV文件导入也可使用“./import-csv.sh -h IoTDBServer实例节点的业务ip -p IoTDBServer RPC端口 -u 业务用户名 -pw 业务用户密码 -f example-filename.csv”命令。

        如下显示表示CSV文件导入成功:

      • 若服务端IoTDB开启了纳秒(ns)时间精度,客户端导入纳秒时间戳数据时,需要加上-tp ns参数。集群是否开启纳秒时间精度可登录FusionInsight Manager,选择“集群 > 配置 > 所有非默认值”,搜索“timestamp_precision”查看。