Sqoop Import替换mysql的特殊字符

时间:2017-01-27 20:21:18

标签: mysql hive special-characters sqoop

我有1000个表,mysql中的每个表都有超过100000条记录。这些表有300-500列。

某些表的列具有特殊字符,如。(点)和列名称中的空格。

现在我想进行sqoop导入,并在单个镜头查询中创建一个HDFS中的hive表,如下所示

sqoop import --connect ${domain}:${port}/$(database) --username ${username} --password ${password}\
--table $(table) -m 1 --hive-import --hive-database ${hivedatabase} --hive-table $(table) --create-hive-table\
--target-dir  /user/hive/warehouse/${hivedatabase}.db/$(table) 

在此之后创建了hive表,但是当我查询表时,它将错误显示为

此错误输出是示例输出。

Error while compiling statement: FAILED: RuntimeException java.lang.RuntimeException: cannot find field emp from [0:emp.id, 1:emp.name, 2:emp.salary, 3:emp.dno]

在执行sqoop导入时,如何用_(下划线)替换。(点)。我想动态地这样做。

1 个答案:

答案 0 :(得分:2)

使用sqoop import \与 - 查询选项而不是--table并在查询中使用replace函数。

sqoop import --connect $ {domain}:$ {port} / $(database) - username $ {username} --password $ {password} \ - 查询'选择col1,将(col2,'。','_')替换为表格中的col。

或(不推荐)编写一个可以查找和替换“。”的shell脚本。到/ user / hive / warehouse / $ {hivedatabase}的“_”(Grep命令).db / $(table)