
# 使用Impala转Doris工具导入数据
Impala转Doris工具用于Doris搬迁Impala数据的场景，使用该工具，可离线转换Impala SQL为Doris SQL。
该章节适用于MRS 3.6.0-LTS及之后版本。
#### 约束限制
- Impala SQL转Doris SQL时，Doris不支持执行函数多层嵌套命令，例如： **select EXTRACT(CAST('2006-05-12 18:27:28.123456789' AS TIMESTAMP), 'MILLISECOND');**
  
- Impala SQL转Doris SQL时，Doris不支持执行**DATE** **'** *xxx* **'** 类型函数命令。例如：
  **select DATE_TRUNC('MILLENNIUM', DATE'2019-08-02');**
  
- 不支持对Impala的**is distinct from** 语法进行转换，例如：
  **select 'x' is distinct from 'x ' as string_with_trailing_spaces, cast('x' as char(5)) is distinct from cast('x ' as char(5)) as char_with_trailing_spaces;**
  
- Impala SQL中存在反引号时需要添加反斜杠进行转义。例如： **./impala_sql_convert --write=doris --read=impala --no-pretty --no-identify "select \* from \\\`** *test1* **\\\`;"**
  
- 当前仅支持转换Impala查询类SQL为Doris SQL。
 
#### 操作步骤
1. 登录FusionInsight Manager页面，选择"集群 \> 服务 \> Doris \> 实例"，查看并记录任一Doris实例的业务IP地址。
2. 以**root** 用户登录主OMS节点，执行以下命令获取集群安装目录：
   
   **su - omm**
   **echo ${BIGDATA_HOME}**
   例如，集群安装目录为：
   ```
   /opt/Bigdata
   ```
   
   
3. 使用**root** 或**omm** 用户登录[1]查看的节点，执行以下命令切换至Doris客户端所在目录：
   
   **cd** *集群安装目录* **/FusionInsight_Doris_\*/install/FusionInsight-Doris-2.1.7/doris-be/impala_tool**
   
   
4. 执行以下命令对Impala SQL进行转换： 
   **./impala_sql_convert --read=impala --write=doris "** *select id, name from impala_tbl;* **"**
   
   
 
#### 转换说明
- Impala SQL转Doris SQL时，相同的中文字符串在Impala和Doris侧的执行结果不一致。例如： **select regexp_like('Hello World', 'world', 'i');**
  
- Impala SQL转Doris SQL时，**get_json_object** 函数的执行结果Doris侧比Impala侧多了双引号。
  图1Impala执行结果   
  ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002235516017.png "点击放大")
  图2Doris执行结果   
  ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002190027298.png "点击放大") 
- 当使用**FROM_UNIXTIME()**等日期函数时，Doris和Impala的默认时区不一样，会导致查询结果相差8小时。
- Impala SQL转Doris SQL时，字符类型的值需将双引号声明方式修改为单引号声明方式，例如： 需将**select \* from table1 where name = "user1";** 命令修改为**select \* from table1 where name = 'user1'** **;**再执行。
  
- Impala SQL转Doris SQL时，由于Impala侧和Doris侧时间类型数据存在精度差异（Impala最高精确为9位，Doris最高精确为6位），转换后的数据可能存在精度丢失情况。
 
