#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
в вашей команде ИМПОРТА.