Чем заменить тип данных datetime на сервере sql при импорте данных в Hadoop через sqoop? - PullRequest
0 голосов
/ 03 апреля 2019

Я пытаюсь импортировать данные из SQL Server в Hadoop, и в таблице, которую я импортирую, есть поле даты и времени.Без подстановки он хранится в каком-то количестве в Hive.Я пытаюсь заменить тип данных через java столбец карты, но он выдает ошибку, я пытался заменить его как String, Timestamp, но он не работает.Какое значение будет иметь тип данных в столбце карты Java?Ниже приведен код, который я выполняю.

sqoop eval -Dmapreduce.job.queuename=X--username X--password X--connect 'jdbc:sqlserver://xxxxxx' --query "select case data_type when 'uniqueidentifier' then COLUMN_NAME + '=String' when 'nvarchar' then COLUMN_NAME + '=String' when 'bigint' then  COLUMN_NAME + '=Double' when 'datetime' then COLUMN_NAME+ '=Date' else '' end as data_type from information_schema.columns where table_name='$TABLE' AND TABLE_CATALOG='X'"  | grep '=' | tr '\r\n' ',' | tr -d '|' | tr -d ' ' | sed  "s/data_field,/--map-column-java /g"  | sed -e '$a\'

Запрос, который выполняется:

select 
    case data_type 
        when 'uniqueidentifier' then COLUMN_NAME + '=String' 
        when 'nvarchar' then COLUMN_NAME + '=String' 
        when 'bigint' then  COLUMN_NAME + '=Double' 
        when 'datetime' then COLUMN_NAME+ '=Date' 
        else '' 
    end as data_type 
from information_schema.columns 
where table_name='$TABLE' AND TABLE_CATALOG='X'

1 Ответ

0 голосов
/ 07 апреля 2019

Вы должны использовать --map-column-hive вместо --map-column-java (например, --map-column-hive registration_date=TIMESTAMP).

...