SQL迁移工具

SQL迁移工具帮助用户将SQL语法转换为openLooKeng兼容的SQL语法。目前仅支持Hive SQL语法。

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

以下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 FUCNTIONS不支持带“like”的语句SHOW FUCNTIONS
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

使用SQL迁移工具

交互模式

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

  1. java -jar hetu-sql-migration-tool-010.jar
  2. presto:HIVE>
  3. presto:HIVE> INSERT INTO TABLE table1 VALUES(10, "NAME");
  4. ==========converted result==========
  5. INSERT INTO table1
  6. VALUES
  7. ROW (10, 'NAME')
  8. =================Success=============

下面是一些常用的命令:

命令描述
exitquit退出交互模式
history获得前面的输入语句
help替换帮助信息

批处理模式

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

参数名称描述
file包含SQL语句的文件,以“;”分隔。 文件中的所有SQL都可以进行批量转换。
sourceType输入SQL语句的类型,如hiveimpala。可选参数,默认值为hive
output转换后SQL结果的存放目录。
configSQL迁移工具的配置文件。

提示:

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

批处理模式使用示例:

  1. java -jar hetu-sql-migration-tool-010.jar --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.sql
  6. May 26, 2020 5:27:10 PM io.airlift.log.Logger info
  7. INFO: Result is saved to .//Query01_1590485230193.csv

当指定file时,必须提供参数output。转换后的结果会保存为output目录下的两个文件:

  1. “.sql”文件保存转换成功的SQL语句。

  2. “.csv”文件保存所有转换的中间结果,包括原始SQL、转换后的SQL、源SQL类型、状态和消息。

执行模式

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

  1. java -jar hetu-sql-migration-tool-010.jar --execute "INSERT INTO TABLE T1 VALUES(10, 'presto')" --sourceType hive
  2. ==========converted result==========
  3. INSERT INTO t1
  4. VALUES
  5. ROW (10, 'presto')
  6. =================Success=============

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

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

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

  1. convertDecimalLiteralsAsDouble=true
  2. java -jar hetu-sql-migration-tool-010.jar --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”类型。

限制

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