Sqoop - 导出



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

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

语法

以下是 export 命令的语法。

$ 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://127.0.0.1/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     |
+------+--------------+-------------+-------------------+--------+
广告