代码之家  ›  专栏  ›  技术社区  ›  Pedro Alves

Sqoop-Boundary query-getLong()的值无效-“Fitness”

  •  1
  • Pedro Alves  · 技术社区  · 6 年前

    我伙计们,

    我正在尝试使用Sqoop通过过滤器只提取数据。为此,我使用了一个绑定查询。我只想筛选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        |
    +---------------+-----------
    

    谢谢!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Jagrut Sharma    6 年前

    边界查询需要稍作修改。默认情况下, Sqoop 将使用以下查询查找创建拆分的边界:

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

    要导入数据的子集,可以使用此边界查询提供上下限:

    SELECT 3,6 FROM departments

    下图提供了更多详细信息:

    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'
    

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