SQL迁移工具

SQL迁移工具帮助用户将SQL语法转换为ANSI 2003 的SQL语法。目前仅支持Hive 和 Impala SQL语法。

使用SQL迁移工具

下载hetu-sql-migration-cli-{version number}-executable.jar, 并重命名为 openlk-sql-migration-cli, 可以运行该命令chmod +x让它变成可执行的, 然后运行它。

交互模式

该工具支持交互模式运行。例如:

  1. ./openlk-sql-migration-cli --type hive
  1. lk:HIVE>
  2. lk:HIVE> INSERT INTO TABLE table1 VALUES(10, "NAME");
  3. ==========converted result==========
  4. INSERT INTO table1
  5. VALUES
  6. ROW (10, 'NAME')
  7. =================Success=============
参数名称描述
—type or -t输入SQL语句的类型,如hiveimpala。可选参数,默认值为hive

下面是一些常用的命令:

命令描述
!chtype value修改当前会话的源sql类型
exitquit退出交互模式
history获得前面的输入语句
help替换帮助信息

批处理模式

该工具还可以获取参数并以批处理模式运行。该模式有五个参数,分别是“file”、“sourceType”、“execute”、“output”和“config”。 各参数的含义如下:

参数名称描述
—file or -f包含SQL语句的文件,以“;”分隔。文件中的所有SQL都可以进行批量转换。
—type or -t输入SQL语句的类型,如hiveimpala。可选参数,默认值为hive
—output or -o转换后SQL结果的存放目录。
—config or -cSQL迁移工具的配置文件。
—debug or -d需要打印debug到控制界面时,设置值为true。

提示:

如果用户有大量的SQL语句需要转换,建议是将所有语句合并到一个文件中,并使用批处理模式

批处理模式使用示例:

  1. ./openlk-sql-migration-cli --file /home/Query01.sql --output ./
  2. May 26, 2020 5:27:10 PM io.airlift.log.Logger info
  3. INFO: Migration Completed.
  4. May 26, 2020 5:27:10 PM io.airlift.log.Logger info
  5. INFO: Result is saved to .//Query01_1590485230193.html

当指定file时,必须提供参数output。转换后的结果会保存在output目录下的html文件中,用户可以使用任意浏览器打开该html文件查看详细转化结果。

执行模式

可以使用命令直接执行查询,并在转换完成后退出工具。使用execute的示例:

  1. ./openlk-sql-migration-cli --execute "INSERT INTO TABLE T1 VALUES(10, 'openLooKeng')" --type hive
  2. ==========converted result==========
  3. INSERT INTO t1
  4. VALUES
  5. ROW (10, 'openLooKeng')
  6. =================Success=============

如果用户只指定了参数execute,则转换后的结果会打印到屏幕上。用户可自行指定output参数,将结果保存到目标文件中。

用户还可以提供config参数来控制转换行为。config示例:

文件名为“config.properties”,内容如下:

  1. convertDecimalLiteralsAsDouble=true
  2. ./openlk-sql-migration-cli --execute "INSERT INTO TABLE T1 select 2.0 * 3" --config config.properties
  3. ==========converted result==========
  4. INSERT INTO t1
  5. SELECT (DECIMAL '2.0' * 3)
  6. =================Success=============

配置文件目前只支持一个属性convertDecimalLiteralsAsDouble。该属性意思是是否将十进制文本转换为double默认值为false,意味着将十进制文字转换为“decimal”类型。

Hive语句检查列表:

以下Hive语句完全支持:

SQL
USE DATABASE/SCHEMA
SHOW TABLES
DROP VIEW
DESCRIBE view_name
CREATE ROLE
GRANT ROLE
REVOKE ROLE
DROP ROLE
SHOW ROLES
SHOW CURRENT ROLES
SET ROLE
GRANT
REVOKE
DELETE
EXPLAIN ANALYZE
SHOW
SHOW FUCNTIONS

以下Hive语句部分支持,即不支持某些关键字或属性:

SQL描述openLooKeng语法参考
CREATE DATABASE/SCHEMA不支持带“COMMENT”、“WITH DBPROPERTIES”的语句CREATE SCHEMA
DROP DATABASE/SCHEMA不支持带“CASCADE”的语句DROP SCHEMA
SHOW DATABASE/SCHEMA不支持带“like”的语句SHOW SCHEMA
CREATE TABLE不支持带“SKEWED BY”、“ROW FORMAT”的语句CREATE TABLE
DROP TABLE不支持带“PURGE”的语句DROP TABLE
ALTER TABLE只支持“重命名表”和“添加单列”ALTER TABLE
SHOW CREATE TABLE对Hive而言,SHOW TABLE可用于表和视图。但在openLooKeng中,这只能应用于表。SHOW CREATE TABLE
DESCRIBE支持带列名的语句DESCRIBE
CREATE VIEW不支持带“COMMENT”、“WITH DBPROPERTIES”的语句CREATE VIEW
SHOW COLUMNS不支持带“like”的语句SHOW COLUMNS
SHOW GRANT不支持指定用户或角色的语句SHOW GRANT
INSERT不支持带“partition”的语句INSERT
SELECT不支持带“cluster by”、“offset”的语句SELECT

由于特性差异,如下Hive语句暂不支持:

SQL
ALTER DATABASE/SCHEMA
DESCRIBE DATABASE/SCHEMA
SHOW TABLE EXTENDED
SHOW TBLPROPERTIES
TRUNCATE TABLE
MSCK REPAIR TABLE
ALTER PARTITION
ALTER COLUMN
ALTER VIEW
SHOW VIEWS
CREATE MATERIALIZED VIEW
DROP MATERIALIZED VIEW
ALTER MATERIALIZED VIEW
SHOW MATERIALIZED VIEWS
CREATE FUNCTION
DROP FUNCTION
RELOAD FUNCTION
CREATE INDEX
DROP INDEX
ALTER INDEX
SHOW INDEX(ES)
SHOW PARTITIONS
Describe partition
CREATE MACRO
DROP MACRO
SHOW ROLE GRANT
SHOW PRINCIPALS
SHOW LOCKS
SHOW CONF
SHOW TRANSACTIONS
SHOW COMPACTIONS
ABORT TRANSACTIONS
LOAD
UPDATE
MERGE
EXPORT
IMPORT
EXPLAIN
SET
RESET

Impala 语句检查列表:

以下Impala语句完全支持:

SQL
CREATE SCHEMA
RENAME TABLE
DROP VIEW
CREATE ROLE
SHOW CREATE TABLE
SHOW CREATE VIEW
SHOW ROLES
EXPLAIN

以下Impala语句部分支持,即不支持某些关键字或属性:

SQLDescriptionopenLooKeng Syntax Reference
DROP SCHEMA不支持带 “CASCADE”的语句DROP SCHEMA
CREATE TABLE不支持带 “ROW FORMAT”, “WITH SERDEPROPERTIES”, “CACHED IN” 的语句CREATE TABLE
CREATE TABLE LIKE不支持带 “PARQUET” 的语句CREATE TABLE
DROP TABLE不支持带 “PURGE” 的语句DROP TABLE
CREATE VIEW不支持带 “IF NOT EXISTS”, “ALIAS” 的语句CREATE VIEW
ALTER VIEW不支持别名. “ALTER VIEW” 会被转化为 “CREATE OR REPLACE VIEW”ALTER TABLE
DESCRIBE仅仅支持DESCRIBE表, 其他都不支持DESCRIBE
GRANT ROLE不支持将角色赋予组(GROUP)GRANT ROLES
GRANT仅支持”SELECT”,“INSERT” 权限, 且仅支持赋予给角色GRANT
REVOKE ROLE不支持将角色从组(GROUP) 中收回REVOKE ROLES
REVOKE仅支持”SELECT”,“INSERT” 权限, 且仅支持从角色收中收回REVOKE
INSERT INTO不支持带 “WITH”, “HINT”, “PARTITION” 的语句INSERT INTO
DELETE不支持带 “JOIN” 的语句DELETE
SHOW SCHEMAS不支持带多个通配符的语句DELETE
SHOW TABLES不支持带多个通配符的语句DELETE
ADD COMMENTS不支持给数据库和列添加评论COMMENT
SET SESSION仅支持 “SET” 和 “SET ALL”SET SESSION
ADD COLUMNS不支持在一条语句添加多列,也不支持设置kudu属性ALTER TABLE
SHOW FUNCTIONS仅支持显示全部的函数或带“LIKE”的语句SHOW FUNCTIONS

由于特性差异,如下Impala语句暂不支持:

SQL
ALTER SCHEMA
CREATE KUDU TABLE
REPLACE COLUMNS
DROP SINGLE COLUMN
ALTER TABLE OWNER
ALTER KUDU TABLE
TRUNCATE TABLE
RENAME VIEW
ALTER VIEW OWNER
COMPUTE STATS
DROP STATS
CREATE FUNCTION
REFRESH FUNCTION
UPDATE TABLE
UPSERT
SHOW TABLE/COLUMN STATS
SHOW PARTITIONS
SHOW FILES
SHOW ROLE GRANT
DROP SINGLE COLUMN
SHUTDOWN
INVALIDATE META
LOAD DATA
REFRESH META
REFRESH AUTH

限制

不支持对SQL语句中的UDF和函数进行转换。