импорт sqoop в hive

#hive #sqoop

#улей #sqoop

Вопрос:

1-я команда:

 sqoop import 
–connect “jdbc:mysql://quickstart.cloudera:3306/retail_db” 
–username retail_dba 
–password cloudera 
–table departments 
–hive-home /user/hive/warehouse 
–hive-import 
–hive-overwrite 
–hive-table sqoop_import.departments 
–outdir java_files
  

2-я команда:

 sqoop import 
–connect “jdbc:mysql://quickstart.cloudera:3306/retail_db” 
–username retail_dba 
–password cloudera 
–table departments 
–target-dir=/user/hive/warehouse/department_test 
–append
  

В обеих командах мы создаем таблицу в Hive без указания разделителей полей и строк и импортируем с использованием sqoop, тогда почему во втором случае мы получаем Null, а не в первом случае

Комментарии:

1. Прежде всего, 2-я команда не является командой импорта hive, она будет извлекать данные из MySQL в указанные HDFS --target-dir . Во-вторых, получение NULL чего?

2. Нулевые данные при доступе к таблице department_test в hive

3. вы создаете таблицу с /user/hive/warehouse/department_test местоположением во втором случае?

Ответ №1:

Разделитель улья по умолчанию

  • Поле: CTRL A
  • СТРОКА : n

Пример 1: ИМПОРТ HIVE

Импортируйте таблицы в Hive (использует разделители Hive по умолчанию, если они не установлены).

Кроме того, он создает таблицу, упомянутую в --hive-table (если не существует), с разделителем hive по умолчанию.

Пример 2: ИМПОРТ HDFS

В этом случае данные из RDBMS хранятся в виде , разделителя полей и n разделителя строк (по умолчанию), которые не являются разделителями по умолчанию для hive. Вот почему вы получаете нулевые записи в своих данных.

Вы можете решить эту проблему двумя способами:

  • Измените разделитель полей в вашей таблице hive

  • используйте --fields-terminated-by в вашей команде ИМПОРТА.