使用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。
操作步骤
- 登录FusionInsight Manager页面,选择“集群 > 服务 > Doris > 实例”,查看并记录任一Doris实例的业务IP地址。
- 以root用户登录主OMS节点,执行以下命令获取集群安装目录:
su - omm
echo ${BIGDATA_HOME}
例如,集群安装目录为:
/opt/Bigdata
- 使用root或omm用户登录1查看的节点,执行以下命令切换至Doris客户端所在目录:
cd 集群安装目录/FusionInsight_Doris_*/install/FusionInsight-Doris-2.1.7/doris-be/impala_tool
- 执行以下命令对Impala SQL进行转换:
./impala_sql_convert --read=impala --write=doris "select id, name from impala_tbl;"
转换说明
- Impala SQL转Doris SQL时,相同的中文字符串在Impala和Doris侧的执行结果不一致。例如:
- 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位),转换后的数据可能存在精度丢失情况。