Как передать имена столбцов с пробелами в sqoop --map-column-java - PullRequest
0 голосов
/ 07 марта 2019

Я должен импортировать данные, используя sqoop, в именах моих исходных столбцов между ними есть пробелы, поэтому, пока я добавляю их в параметр --map-column-java, получаю ошибку.

Пример импорта Sqoop:

импорт sqoop --connect jdbc-con --username "user1" --query "select * from table, где \ $ CONDITIONS" --target-dir / target / path / -m 1 --map-column-java данные col1 = строка, данные col2 = строка, данные col3 = строка --as-avrodatafile

Имена столбцов:

data col1,
data col2,
data col3

Ошибка:

19/03/07 07:31:55 DEBUG sqoop.Sqoop: Неверное отображение. Отображение столбца должно иметь вид ключ = значение [, ключ = значение] * java.lang.IllegalArgumentException: искаженное отображение. Отображение столбца должно иметь вид ключ = значение [, ключ = значение] * в org.apache.sqoop.SqoopOptions.parseColumnMapping (SqoopOptions.java:1355) в org.apache.sqoop.SqoopOptions.setMapColumnJava (SqoopOptions.java:1375) в org.apache.sqoop.tool.BaseSqoopTool.applyCodeGenOptions (BaseSqoopTool.java:1363) в org.apache.sqoop.tool.ImportTool.applyOptions (ImportTool.java:1011) в org.apache.sqoop.tool.SqoopTool.parseArguments (SqoopTool.java:435) в org.apache.sqoop.Sqoop.run (Sqoop.java:135) в org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:70) в org.apache.sqoop.Sqoop.runSqoop (Sqoop.java:183) в org.apache.sqoop.Sqoop.runTool (Sqoop.java:234) в org.apache.sqoop.Sqoop.runTool (Sqoop.java:243) в org.apache.sqoop.Sqoop.main (Sqoop.java:252) Неправильное отображение. Отображение столбца должно иметь вид ключ = значение [, ключ = значение] *

1 Ответ

0 голосов
/ 08 марта 2019

Может решить эту проблему:

1. Проблема с пробелами: sqoop import --connect jdbc-con --username "user1" --query "select * from table, где \ $ CONDITIONS" --target-dir / target / path / -m 1 --map-column-java "данные col1 = Строка, данные col2 = строка, данные col3 = строка "--as-avrodatafile

2. ОШИБКА tool.ImportTool: сбой импорта: невозможно преобразовать тип SQL 2005: 3 столбца в источнике имеют 2005, и nvarchar добавил их в --map-column-java, решив эту проблему

3 . org.apache.avro.file.DataFileWriter $ AppendWriteException: org.apache.avro.UnresolvedUnionException: не в объединении ["null", "long"]: 1 ****

Это происходит из-за использования * в запросе выбора, поэтому модифицированный запрос sqoop выглядит так:

sqoop import --connect jdbc-con --username "user1" --query "выбрать [col1, data col2, data col3] из таблицы, где \ $ CONDITIONS" --target-dir / target / path / -m 1 --map-column-java "data col1 = String, data col2 = String, data col3 = String" --as-avrodatafile

...