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

15.8. 执行导出

hadoop 花牛 13℃ 0评论

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

将一张表从HDFS导出到数据库时,我们必须在数据库中创建一张用于接收数据的目标表。虽然Sqoop可以推断出哪个Java类型适合存储SQL数据类型,但反过来却是行不通的(例如,有几种SQL列的定义都可以用来存储JavaString类型,如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.ExportJobBase: 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'
|====================|
|  volume  |   zip   |
|====================|
|  28.00   |  10005  |
|--------------------|
|  403.71  |  90210  |
|--------------------|
|  20.00   |  95014  |
|--------------------|

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

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

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

转义序列

描述

\b

退格

\n

换行

\n

回车

\t

制表符

\

单引号

\

双引号

\\

反斜杠

\0

NUL。用于在字段或行之间插入NUL字符或在–enclosed-by–optionally-enclosed-by –escaped-by 参数中使用时表示禁用包围/转义

\0ooo

一个Unicode字符代码点的八进制表示,实际字符由八进制值ooo指定

 

\0xhhh

一个Unicode字符代码点的十六进制表示,采用\0xhhh的形式,其中hhh是十六进制值。例如,–fields-terminated-by '\0x10'指定的是回车符

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

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

表情

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

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