表名作为 Sqoop 中的保留关键字
Tables names as reserved keywords in Sqoop
我有一个 table int
在 MySQL
create table `int` (c1 varchar(20));
insert into `int` values ('some data');
我尝试使用 Sqoop 将其导入到配置单元中:
sqoop import --connect='jdbc:mysql://xxx.xxx.xxx.xxx/classicmodels' --driver com.mysql.jdbc.Driver --username xxx --password xxx --table int --delete-target-dir --target-dir /tmp/test --hive-import --hive-table default.test --hive-drop-import-delims --null-string '\N' --null-non-string '\N' --split-by col_date -m 1 --verbose
在内部,它正在创建 SELECT t.* FROM int AS t WHERE 1=0
错误:
16/08/18 13:43:20 ERROR manager.SqlManager: Error executing statement: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int AS t WHERE 1=0' at line 1
这是预期的。
我试过了,--table "int"
、--table `int`
和 --table "`int`"
。
None 他们成功了。
有没有办法告诉 sqoop 创建查询:
SELECT t.* FROM `int` AS t WHERE 1=0
[ ]
用于绕过SQL服务器中的保留字。
在 SQL 服务器 --table dbo.[int]
为我工作。
提供--table \`int\`
。我记得它是这样工作的。
另一种方式:
使用 Free-form Query Imports
您可以使用 --query
而不是 --table
:
sqoop import \
--query 'SELECT c1 FROM `int` WHERE $CONDITIONS'
...
当您在列中反转关键字时,它特别有用。
我有一个 table int
在 MySQL
create table `int` (c1 varchar(20));
insert into `int` values ('some data');
我尝试使用 Sqoop 将其导入到配置单元中:
sqoop import --connect='jdbc:mysql://xxx.xxx.xxx.xxx/classicmodels' --driver com.mysql.jdbc.Driver --username xxx --password xxx --table int --delete-target-dir --target-dir /tmp/test --hive-import --hive-table default.test --hive-drop-import-delims --null-string '\N' --null-non-string '\N' --split-by col_date -m 1 --verbose
在内部,它正在创建 SELECT t.* FROM int AS t WHERE 1=0
错误:
16/08/18 13:43:20 ERROR manager.SqlManager: Error executing statement: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'int AS t WHERE 1=0' at line 1
这是预期的。
我试过了,--table "int"
、--table `int`
和 --table "`int`"
。
None 他们成功了。
有没有办法告诉 sqoop 创建查询:
SELECT t.* FROM `int` AS t WHERE 1=0
[ ]
用于绕过SQL服务器中的保留字。
在 SQL 服务器 --table dbo.[int]
为我工作。
提供--table \`int\`
。我记得它是这样工作的。
另一种方式: 使用 Free-form Query Imports
您可以使用 --query
而不是 --table
:
sqoop import \
--query 'SELECT c1 FROM `int` WHERE $CONDITIONS'
...
当您在列中反转关键字时,它特别有用。