Sqoop - ОШИБКА tool.ImportTool: сбой импорта: невозможно преобразовать тип SQL 2005 при попытке импорта из SQL Server - PullRequest
0 голосов
/ 05 сентября 2018

Я пытаюсь импортировать таблицу с сервера SQL в Hive с помощью Sqoop. Ниже приведена команда, которую я использую:

sqoop import --connect "jdbc:jtds:sqlserver://xxxxxxxxxx:1433;integratedSecurity=false;databaseName=xxxx;domain=xxxx" --username user -P --table notifications --split-by Id --hive-import --create-hive-table --hive-table testing.notifications --as-parquetfile --verbose

Таблица кустов не существует, и идея состоит в том, чтобы создать ее с помощью моей команды sqoop. Однако, когда я запускаю свою команду, я получаю следующую ошибку:

18/09/05 08:40:21 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM [notifications] AS t WHERE 1=0
18/09/05 08:40:21 DEBUG manager.SqlManager: Found column Id of type [-5, 19, 0]
18/09/05 08:40:21 DEBUG manager.SqlManager: Found column Dt of type [93, 23, 3]
18/09/05 08:40:21 DEBUG manager.SqlManager: Found column path of type [12, 300, 0]
18/09/05 08:40:21 DEBUG manager.SqlManager: Found column type of type [12, 1000, 0]
18/09/05 08:40:21 DEBUG manager.SqlManager: Found column message of type [2005, 2147483647, 0]
18/09/05 08:40:21 DEBUG manager.SqlManager: Found column person of type [12, 100, 0]
18/09/05 08:40:21 DEBUG manager.SqlManager: Found column stage of type [12, 100, 0]
18/09/05 08:40:21 DEBUG manager.SqlManager: Found column lastModified of type [93, 23, 3]
18/09/05 08:40:21 DEBUG util.ClassLoaderStack: Restoring classloader: sun.misc.Launcher$AppClassLoader@64c64813
18/09/05 08:40:21 ERROR tool.ImportTool: Import failed: Cannot convert SQL type 2005

Однако, когда я удаляю аргумент --as-parquetfile из моей команды, он работает нормально. В чем проблема с использованием --as-parquetfile?

Мне нужно, чтобы таблица была в паркете, и я попытался использовать аргумент --query для преобразования Dt и lastModified столбцов, которые находятся в timestamp (я полагаю, что отметка времени представляет собой то, что представляет [93, 23, 3]) в такие строки:

--query "select Id, convert(varchar(25),Dt,120) as Dt, path, type, message, person, stage, convert(varchar(25),lastModified,120) as lastModified from dbo.notifications"

и журналы подтверждают, что типы данных для Dt и lastModified были изменены:

18/09/05 09:30:12 INFO manager.SqlManager: Executing SQL statement: select Id, convert(varchar(25),Dt,120) as Dt, path, type, message, person, stage, convert(varchar(25),lastModified,120) as lastModified from dbo.notifications WHERE  (1 = 0)
18/09/05 09:30:12 DEBUG manager.SqlManager: Found column Id of type [-5, 19, 0]
18/09/05 09:30:12 DEBUG manager.SqlManager: Found column Dt of type [12, 25, 0]
18/09/05 09:30:12 DEBUG manager.SqlManager: Found column path of type [12, 300, 0]
18/09/05 09:30:12 DEBUG manager.SqlManager: Found column type of type [12, 1000, 0]
18/09/05 09:30:12 DEBUG manager.SqlManager: Found column message of type [2005, 2147483647, 0]
18/09/05 09:30:12 DEBUG manager.SqlManager: Found column person of type [12, 100, 0]
18/09/05 09:30:12 DEBUG manager.SqlManager: Found column stage of type [12, 100, 0]
18/09/05 09:30:12 DEBUG manager.SqlManager: Found column lastModified of type [12, 25, 0]

Но все равно не получается с той же ошибкой.

Я не уверен, какой столбец вызывает ошибку. и я также не уверен, что смогу использовать --map-column-hive работает с --as-parquetfile.

любая помощь будет оценена. Спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

Мне удалось выяснить проблему после некоторой отладки. Я понял, что сообщение об ошибке: ERROR tool.ImportTool: Import failed: Cannot convert SQL type 2005 имеет тип данных столбца, который вызывает проблему, то есть 2005 в моем случае, что соответствует столбцу message в моей исходной таблице. Столбец message представляет собой varchar, а max_length = -1 - varchar(max).

Я бросил его на varchar(200), и это решило мою проблему.

Однако я не уверен, почему у меня возникла эта проблема только при использовании аргумента --as-parquetfile в моей команде sqoop. Я хотел бы услышать больше обсуждения по этому вопросу.

Спасибо.

...