Sqoop - 导出


本章介绍如何将数据从 HDFS 导出回 RDBMS 数据库。目标表必须存在于目标数据库中。作为 Sqoop 输入的文件包含记录,这些记录称为表中的行。这些被读取并解析为一组记录,并使用用户指定的分隔符进行分隔。

默认操作是使用 INSERT 语句将输入文件中的所有记录插入到数据库表中。在更新模式下,Sqoop 生成 UPDATE 语句,将现有记录替换到数据库中。

句法

以下是导出命令的语法。

$ sqoop export (generic-args) (export-args) 
$ sqoop-export (generic-args) (export-args)

例子

让我们以 HDFS 文件中的员工数据为例。员工数据位于HDFS 'emp/' 目录中的emp_data文件中。emp_data如下。

1201, gopal,     manager, 50000, TP
1202, manisha,   preader, 50000, TP
1203, kalil,     php dev, 30000, AC
1204, prasanth,  php dev, 30000, AC
1205, kranthi,   admin,   20000, TP
1206, satish p,  grp des, 20000, GR

必须手动创建要导出的表,并且该表必须存在于必须导出的数据库中。

以下查询用于在 mysql 命令行中创建表“employee”。

$ mysql
mysql> USE db;
mysql> CREATE TABLE employee ( 
   id INT NOT NULL PRIMARY KEY, 
   name VARCHAR(20), 
   deg VARCHAR(20),
   salary INT,
   dept VARCHAR(10));

以下命令用于将表数据(HDFS上的emp_data文件)导出到Mysql数据库服务器的db数据库中的employee表。

$ sqoop export \
--connect jdbc:mysql://localhost/db \
--username root \
--table employee \ 
--export-dir /emp/emp_data

以下命令用于在 mysql 命令行中验证表。

mysql>select * from employee;

如果给定的数据存储成功,那么您可以找到下表给定的员工数据。

+------+--------------+-------------+-------------------+--------+
| Id   | Name         | Designation | Salary            | Dept   |
+------+--------------+-------------+-------------------+--------+
| 1201 | gopal        | manager     | 50000             | TP     |
| 1202 | manisha      | preader     | 50000             | TP     |
| 1203 | kalil        | php dev     | 30000             | AC     |
| 1204 | prasanth     | php dev     | 30000             | AC     |
| 1205 | kranthi      | admin       | 20000             | TP     |
| 1206 | satish p     | grp des     | 20000             | GR     |
+------+--------------+-------------+-------------------+--------+