更新时间:2025-12-10 GMT+08:00
分享

使用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. 使用rootomm用户登录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侧多了双引号。
    图1 Impala执行结果
    图2 Doris执行结果
  • 当使用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位),转换后的数据可能存在精度丢失情况。

相关文档