2017-01-31 20 views
1

У меня есть 1000 таблиц с более чем 100000 записей в каждой таблице в mysql. Таблицы имеют 300-500 столбцов. В некоторых таблицах есть столбцы со специальными символами типа (точка) и пробел в именах столбцов.Специальные символы в mysql sqoop import в виде файла Text и Parquet

Теперь я хочу сделать импорт sqoop и создать улую таблицу в HDFS в одном запросе выстрела, как показано ниже, как Textfile

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) 

После этого создается улая таблица, но когда я делаю выберите * запросаны таблица показывает ошибку как

Этот выход ошибки является образцом вывода.

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] 

Однако, когда я делаю импорт в качестве паркета файл таблица создается и когда я делаю запрос на выборку запрос дает мне ожидаемых результатов. Даже. (Точка) автоматически заменяются на _ (подчеркивание)

Почему это происходит?

+0

попробуйте использовать бесплатную форму запроса и дать все столбцы имя вам требуется Мое предположение может быть sqoop является разбор вашего .DOT и пространство на отдельные поля –

+0

@Rijulsahu Я попытался --Выбор параметров, а также он по-прежнему не удалось – User12345

ответ

1

Причина для вышеуказанного связана с ограничением в Улье. В улье они отключили создание таблиц улей с точкой/двоеточием в именах столбцов.

Они имеют Jira для этого в https://issues.apache.org/jira/browse/HIVE-10120

0

Это потому, что у вас есть эти специальные символы в именах столбцов, это не происходит в паркетах, потому что SQOOP преобразует имена столбцов в действительные индексы java (например, java не допускает пробелов в идентификаторах). мы используем символ `для выбора ваших колонок 1 до 1

select 
`.(dot)` 
from yourtable. 

дайте мне знать, если это сработает.

+0

Вы имеете в виду выбрать emp.id как emp_id .... Из таблицы. Если да, то для таблицы mith более 50 столбцов будет сложно указать псевдонимы для каждого столбца. Я хотел бы сделать это динамически – User12345

+0

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL#LanguageManualDDL-ShowColumns может работать? Я не пробовал, но если он дает вам только имена, это может помочь. – hlagos