整套大数据学习资料(视频+笔记)百度网盘无门槛下载:http://www.edu360.cn/news/content?id=3377

15.8执行导出

在Sqoop中,“导入”(import)是指将数据从数据库系统移动到HDFS。与 之相反,“导出”(export)是将*HDFS作为数据源,而将一个远程数据库作 为目标。在前面的几个小节中,我们导入了一些数据并且使用Hive对数据 进行了分析。我们可以将分析的结果导出到一个数据库中,供其他工具 使用。

将一张表从HDFS导出到数据库时,我们必须在数据库中创建一张用于接 收数据的目标表。虽然Sqoop可以推断出哪个Java类型适合存储SQL数据 类型,但反过来却是行不通的(例如,有几种SQL列的定义都可以用来存储 Java的String类型,如CHAR(64)、VARCHAR(200)或其他一些类似定 义)。因此,必须由用户来确定哪些类型是最合适的。

我们打算从Hive中导出zip_profits表。首先需要在MySQL中创建一个 具有相同列顺序及合适SQL类型的目标表:

% mysql hadoopguide
mysql> CREATE TABLE sales_by一zip (volume DECIMAL(8,2), zip INTEGER);
Query OK^ 0 rows affected (0.01 sec)

接着我们运行导出命令:

% sqoop export --connect jdbc:mysql://localhost/hadoopguide -m 1 \
>  --table sales一by一zip --export-dir /user/hive/warehouse/zip_profits \
>  --input-fields-terminated-by '\0001'
10/07/02 16:16:50 INFO maprerfuce.ExportDobBase: Transferred 41 bytes in 10.8947
seconds (3.7633 bytes/sec)                            •
10/07/02 16:16:50 INFO mapreduce.ExportDobBase: Exported 3 records.

最后,我们可以通过检査MySQL来确认导出成功:

% mysql hadoopguide -e 'SELECT * FROM sales_by_zip'

image.png 

 

Hive中创建zip_profits表时,我们没有指定任何分隔符。因此Hive 使用了自己的默认分隔符:字段之间使用Ctrl-A字符(Unicode编码0x0001) 分隔,每条记录末尾使用一个换行符分隔。当我们使用Hive来访问这张表 的内容时(SELECT语句),Hive将数据转换为制表符分隔的形式,用于在控 制台上显示。但是直接从文件中读取这张表时,我们要将所使用的分隔符 告知SqoopSqoop默认记录是以换行符作为分隔符,但还需要将字段分隔 符 Ctrl-A 告之 Sqoop。可以在 sqoop export 命令中使用–input-fields- terminated-by参数来指定字段分隔符。Sqoop在指定分隔符时支持几种 转义序列(以字符'\'开始)。

在示例语法中,所用的转义序列被包围在'单引号'中,以确保shell会按字 面意义处理它。如果不使用引号,前导的反斜杠就需要转义处理(例如,– inputfieldsterminated-by \\0001)。表 15-1 列出了 Sqoop 所支持的

转义序列。



表15-1.转义序列可以用于指定非打印字符作为Sqoop中字段和记录的分隔符

image.png

 

转载请注明:全栈大数据 » 15.8执行导出

喜欢 (1)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址