Я создал процесс sqoop, который импортирует данные из MS SQL в Hive, но у меня проблема с полями типа 'char'. Код импорта Sqoop:
sqoop import \
--create-hcatalog-table \
--connect "connection_parameters" \
--username USER \
--driver net.sourceforge.jtds.jdbc.Driver \
--null-string '' \
--null-non-string '' \
--class-name TABLE_X \
--hcatalog-table TABLE_X_TEST \
--hcatalog-database default \
--hcatalog-storage-stanza "stored as orc tblproperties ('orc.compress'='SNAPPY')" \
--map-column-hive "column_1=char(10),column_2=char(35)" \
--num-mappers 1 \
--query "select top 10 "column_1", "column_2" from TABLE_X where \$CONDITIONS" \
--outdir "/tmp"
column_1
типа char(10)
должно быть NULL, если нет данных. Но улей заполняет поле 10 пробелами.
column_2
типа char(35)
тоже должно быть NULL, но есть 35 пробелов.
Это огромная проблема, потому что я не могу выполнить запрос следующим образом:
select count(*) from TABLE_X_TEST where column_1 is NULL and column_2 is NULL;
Но я должен использовать это:
select count(*) from TABLE_X_TEST where column_1 = ' ' and column_2 = ' ';
Я попытался изменить параметр запроса и использовать функцию обрезки:
--query "select top 10 rtrim(ltrim("column_1")), rtrim(ltrim("column_2")) from TABLE_X where \$CONDITIONS"
но это не работает, поэтому я полагаю, что это не проблема с источником, а с Hive.
Как я могу запретить Hive вставлять пробелы в пустые поля?