sqoop - Sqoop - 边界查询 - getLong() 的值无效 - 'Fitness'
问题描述
我伙计们,
我正在尝试使用 Sqoop 仅使用过滤器提取数据。为此,我正在使用 Bondary 查询。我只想过滤 3 到 6 之间的部门 ID。我有以下命令:
[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 |
+---------------+-----------
谢谢!
解决方案
边界查询需要稍作修改。默认情况下,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
推荐阅读
- javascript - JavaScript:如何获得没有时区的简单日期
- elasticsearch - ElasticSearch High Level Rest Client 搜索具有多个值的单个字段
- acumatica - 使用 IEnumerable 函数向数据视图添加过滤器
- python - spark/pyspark 与 HBase 的集成
- javascript - 根据滑块滑翔机js中的活动li值更改css值
- jquery - Fullcalendar v2.6.0 能否在 jQuery-3.3.1 和 MVC 5 上运行?
- r - 无法使用 R 抓取 Fitch Ratings 的网站
- java - 没有为 SQL 参数提供值,添加了“]”
- excel - 如果列 E 更改,则尝试从列 F 复制单元格,仅当列 F > 0
- python - NoReverseMatch at / Reverse for 'dashboard' 未找到。“仪表板”不是有效的视图函数或模式名称