
# 手动导入IoTDB数据
#### 操作场景
该任务指导用户使用"import-csv.sh"将CSV格式的数据导入到IoTDB。
#### 前提条件
- 已安装客户端，请参见。例如安装目录为"/opt/client"，以下操作的客户端目录只是举例，请根据实际安装目录修改。
- 各组件业务用户由MRS集群管理员根据业务需要创建，具体操作请参见。安全模式下，"机机"用户需要下载keytab文件，具体操作请参见。"人机"用户第一次登录时需修改密码。
 
#### 操作步骤
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
   ```
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/notice_3.0-zh-cn.png)
   在导入数据前，需要注意：
   - MRS 3.3.0之前版本，导入的数据不能包含空格，否则此行数据导入失败并跳过导入，后续操作不受影响。
   
   - MRS 3.3.0及之后版本，导入的数据不能包含空格，否则此次数据导入操作会失败，需要对导入数据类型进行自检。
   
   - 包含**,**的字段需要使用反引号括起来，例如：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/tools"目录下。
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端口*
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
   - IoTDBServer实例节点IP地址可在Manager界面，选择"集群 \> 服务 \> IoTDB \> 实例"查看。
   
   - IoTDBServer RPC端口可在参数"IOTDB_SERVER_RPC_PORT"中自行配置。默认端口如下：
     - 开源端口默认值为：6667
     
     - 定制端口默认值为：22260
     
     
     端口定制/开源区分：创建LTS版本类型集群时，可以选择"组件端口"为"开源"或是"定制"，选择"开源"使用开源端口，选择"定制"使用定制端口。
     
   
   - **root**用户初始密码MRS 3.3.0之前版本为"root"，MRS 3.3.0及之后版本为"Iotdb@123"。
   
   - 修改的用户密码字符长度MRS 3.3.0之前版本至少为4位，MRS 3.3.0及之后版本至少为8位，且不能包含空格。
     
10. 执行以下命令登录客户端
    **./start-cli.sh** **-h** *IoTDBServer实例节点的业务* *i* *p* -**p** *IoTDBServer RPC端口*
    ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
    - IoTDBServer实例节点的业务IP地址可登录FusionInsight Manager后选择"集群 \> 服务 \> IoTDB \> 实例"查看。
    
    - RPC端口可通过"集群 \> 服务 \> IoTDB \> 配置 \> 全部配置"，搜索参数"IOTDB_SERVER_RPC_PORT"获得。
    
    - 集群未启用Kerberos认证（普通模式）使用**root**用户登录。
     
    运行该命令后，根据实际需求指定业务用户名：
    - 指定业务用户名，则输入"yes"，并根据提示输入业务用户名和对应的业务用户密码： ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724747797.png "点击放大")
      
    
    
    
    - 不指定业务用户名，则输入"no"；此时，则使用[7]中的用户执行后续操作：
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676748618.png "点击放大")
      
    
    - 输入其他，则退出登录： ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724867665.png "点击放大")
      
     
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文件导入成功：
    ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724867673.png "点击放大")
    
15. 验证数据一致性。
    1. 执行以下命令，切换到IoTDB客户端运行脚本所在目录。 **cd /opt/client/IoTDB/iotdb/sbin**
       
    
    2. 参考[10]登录IoTDB客户端。执行SQL查询数据并与[1]中数据进行对比。
    
    3. 查看导入的数据与[1]中的数据是否一致，如果一致则表示导入成功。
       例如，执行以下命令查看导入的数据：
       **SELECT \* FROM root.fit.\*\*;**
       ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001676908326.png "点击放大")
       ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/public_sys-resources/note_3.0-zh-cn.png)
       - 为避免安全风险，推荐使用交互式方式导入CSV文件。
       
       - CSV文件导入也可使用"**./import-csv.sh -h** *IoTDBServer实例节点的业务ip* **-p** *IoTDBServer RPC端口* **-u** *业务用户名* **-pw** *业务用户密码* **-f** *example-filename.csv* "命令。
         如下显示表示CSV文件导入成功：
         ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000001724867677.png "点击放大")
         
       
       - 如果服务端IoTDB开启了纳秒（ns）时间精度，客户端导入纳秒时间戳数据时，需要加上**-tp ns**参数。集群是否开启纳秒时间精度可登录FusionInsight Manager，选择"集群 \> 配置 \> 所有非默认值"，搜索"timestamp_precision"查看。
         
     
 
