Sqoop Import 替换 mysql 的特殊字符

Sqoop Import replace special characters of mysql

我有 1000 个 table,每个 table 中有超过 100000 条记录 mysql。 table 有 300-500 列。

某些 table 的列名称中包含特殊字符,例如 .(点)和 space。

现在我想在 HDFS 中执行 sqoop 导入并创建一个配置单元 table,如下所示

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) 

在此之后创建了配置单元 table 但是当我查询 table 它显示错误为

此错误输出是示例输出。

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 导入时将 .(点)替换为 _(下划线)。我想动态地做到这一点。

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

sqoop import --connect ${domain}:${port}/$(database) --username ${username} --password ${password}\ -- query 'Select col1 ,replace(col2 ,'.','_') as col from table.

或者(不推荐) 写一个 shell 脚本来查找和替换“.”到 /user/hive/warehouse/${hivedatabase}.db/$(table)

处的“_”(Grep 命令)