Sqoop - Граничный запрос - Неверное значение для getLong () - 'Fitness' - PullRequest
0 голосов
/ 06 декабря 2018

Ребята,

Я пытаюсь извлечь только данные с помощью фильтра с помощью Sqoop.Для этого я использую запрос Бондари.Я только хочу отфильтровать департаменты_id между 3 и 6. У меня есть следующая команда:

[cloudera@quickstart ~]$ sqoop import --connect jdbc:mysql://localhost:3306/retail_db --username retail_dba --password cloudera --table departments --target-dir=wareouse/departments_v1 --boundary-query "SELECT department_id, department_name FROM departments WHERE department_id BETWEEN 3 AND 6"

Но я получаю следующую ошибку:

18/12/05 12:48:27 ERROR tool.ImportTool: Import failed: java.io.IOException: java.sql.SQLException: Invalid value for getLong() - 'Fitness'

Знаете ли вы, что яя ошибаюсь в моей команде?

Исходные данные похожи на:

  department_id | department_name |
+---------------+-----------------+
|             2 | Fitness         |
|             3 | Footwear        |
|             4 | Apparel         |
|             5 | Golf            |
|             6 | Outdoors        |
|             7 | Fan Shop        |
+---------------+-----------

Спасибо!

1 Ответ

0 голосов
/ 06 декабря 2018

Граничный запрос нуждается в незначительной модификации.По умолчанию Sqoop будет использовать следующий запрос, чтобы найти границы для создания разбиений:

SELECT MIN(department_id), MAX(department_id) FROM departments

Чтобы импортировать подмножество данных, вы можете использовать этот запрос границы, чтобынижняя и верхняя границы:

SELECT 3,6 FROM departments

На следующем рисунке приведена более подробная информация:

1) Создание таблицы и заполнение данными

mysql> create database retail_db;
mysql> use retail_db;
mysql> create table departments (department_id int primary key, department_name varchar(255));
mysql> insert into departments values(2, 'Fitness');
mysql> insert into departments values(3, 'Footwear');
mysql> insert into departments values(4, 'Apparel');
mysql> insert into departments values(5, 'Golf');
mysql> insert into departments values(6, 'Outdoors');
mysql> insert into departments values(7, 'Fan Shop');

2) Проверить данные

mysql> select * from departments;
+---------------+-----------------+
| department_id | department_name |
+---------------+-----------------+
|             2 | Fitness         |
|             3 | Footwear        |
|             4 | Apparel         |
|             5 | Golf            |
|             6 | Outdoors        |
|             7 | Fan Shop        |
+---------------+-----------------+
6 rows in set (0.00 sec)

3) Выполнить задание Sqoop

$ sqoop import --connect jdbc:mysql://localhost:3306/retail_db --username user --password password --table departments --target-dir /test/run --boundary-query 'SELECT 3,6 FROM departments'

4) Результат проверки

$ hadoop fs -cat /test/run/part-*
3,Footwear
4,Apparel
5,Golf
6,Outdoors
...