📅  最后修改于: 2020-11-29 08:22:56             🧑  作者: Mango
本章介绍如何将数据从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 |
+------+--------------+-------------+-------------------+--------+