10 KiB
SQL迁移工具
SQL迁移工具帮助用户将SQL语法转换为ANSI 2003 的SQL语法。目前仅支持Hive 和 Impala SQL语法。
使用SQL迁移工具
下载hetu-sql-migration-cli-{version number}-executable.jar, 并重命名为 openlk-sql-migration-cli, 可以运行该命令chmod +x让它变成可执行的, 然后运行它。
交互模式
该工具支持交互模式运行。例如:
./openlk-sql-migration-cli --type hive
lk:HIVE>
lk:HIVE> INSERT INTO TABLE table1 VALUES(10, "NAME");
==========converted result==========
INSERT INTO table1
VALUES
ROW (10, 'NAME')
=================Success=============
| 参数名称 | 描述 |
|---|---|
--type or -t |
输入SQL语句的类型,如hive、impala。可选参数,默认值为hive。 |
下面是一些常用的命令:
| 命令 | 描述 |
|---|---|
!chtype value |
修改当前会话的源sql类型 |
exit或quit |
退出交互模式 |
history |
获得前面的输入语句 |
help |
替换帮助信息 |
批处理模式
该工具还可以获取参数并以批处理模式运行。该模式有五个参数,分别是“file”、“sourceType”、“execute”、“output”和“config”。 各参数的含义如下:
| 参数名称 | 描述 |
|---|---|
--file or -f |
包含SQL语句的文件,以“;”分隔。文件中的所有SQL都可以进行批量转换。 |
--type or -t |
输入SQL语句的类型,如hive、impala。可选参数,默认值为hive。 |
--output or -o |
转换后SQL结果的存放目录。 |
--config or -c |
SQL迁移工具的配置文件。 |
--debug or -d |
需要打印debug到控制界面时,设置值为true。 |
提示:
如果用户有大量的SQL语句需要转换,建议是将所有语句合并到一个文件中,并使用批处理模式
批处理模式使用示例:
./openlk-sql-migration-cli --file /home/Query01.sql --output ./
May 26, 2020 5:27:10 PM io.airlift.log.Logger info
INFO: Migration Completed.
May 26, 2020 5:27:10 PM io.airlift.log.Logger info
INFO: Result is saved to .//Query01_1590485230193.html
当指定file时,必须提供参数output。转换后的结果会保存在output目录下的html文件中,用户可以使用任意浏览器打开该html文件查看详细转化结果。
执行模式
可以使用命令直接执行查询,并在转换完成后退出工具。使用execute的示例:
./openlk-sql-migration-cli --execute "INSERT INTO TABLE T1 VALUES(10, 'openLooKeng')" --type hive
==========converted result==========
INSERT INTO t1
VALUES
ROW (10, 'openLooKeng')
=================Success=============
如果用户只指定了参数execute,则转换后的结果会打印到屏幕上。用户可自行指定output参数,将结果保存到目标文件中。
用户还可以提供config参数来控制转换行为。config示例:
文件名为“config.properties”,内容如下:
convertDecimalLiteralsAsDouble=true
./openlk-sql-migration-cli --execute "INSERT INTO TABLE T1 select 2.0 * 3" --config config.properties
==========converted result==========
INSERT INTO t1
SELECT (DECIMAL '2.0' * 3)
=================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 |
以下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 |
Impala 语句检查列表:
以下Impala语句完全支持:
| SQL |
|---|
| CREATE SCHEMA |
| RENAME TABLE |
| DROP VIEW |
| CREATE ROLE |
| SHOW CREATE TABLE |
| SHOW CREATE VIEW |
| SHOW ROLES |
| EXPLAIN |
以下Impala语句部分支持,即不支持某些关键字或属性:
| SQL | Description | openLooKeng 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 | 仅支持显示全部的函数 | 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和函数进行转换。