mysql sqoop 中的特殊字符导入为文本和 Parquet 文件
Special characters in mysql sqoop import as Text and Parquet file
我有 1000 个 table,每个 table 在 mysql 中有超过 100000 条记录。 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 上执行 select * 查询时它显示错误为
此错误输出是示例输出。
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]
然而,当我导入为 parquet 文件时,会创建 table,当我执行 select 查询时,查询会给出预期的结果。甚至 .(dot) 也会自动替换为 _(underscore)
为什么会这样?
这是因为你在列名中有那些特殊字符,它不会在 parquet 中发生,因为 SQOOP 正在将列名转换为有效的 java 标识符(例如,java 不' 允许标识符中有空格)。解决方法是我们将字符 ` 到 select 你的第 1 到 1
列
select
`.(dot)`
from yourtable.
让我知道它是否有效。
以上原因是由于Hive的限制。在配置单元中,他们禁用了在列名称中使用 dot/colon 的配置单元表的创建。
有一个 Jira
我有 1000 个 table,每个 table 在 mysql 中有超过 100000 条记录。 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 上执行 select * 查询时它显示错误为
此错误输出是示例输出。
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]
然而,当我导入为 parquet 文件时,会创建 table,当我执行 select 查询时,查询会给出预期的结果。甚至 .(dot) 也会自动替换为 _(underscore)
为什么会这样?
这是因为你在列名中有那些特殊字符,它不会在 parquet 中发生,因为 SQOOP 正在将列名转换为有效的 java 标识符(例如,java 不' 允许标识符中有空格)。解决方法是我们将字符 ` 到 select 你的第 1 到 1
列select
`.(dot)`
from yourtable.
让我知道它是否有效。
以上原因是由于Hive的限制。在配置单元中,他们禁用了在列名称中使用 dot/colon 的配置单元表的创建。
有一个 Jira