Sqoop User Guide v1.4.6文档7.2.12. Importing Data Into Hive翻译

Importing Data Into Hive

表格8. Hive参数

参数 描述
--hive-home 覆盖 $HIVE_HOME
--hive-import 导入表格到hive(使用Hive默认定界符如果没有手动设置)
--hive-overwrite 覆盖Hive表中已有的数据
--create-hive-table 目标表已存在则任务会失败,默认为false
--hive-table 设置导入Hive的表名
--hive-drop-import-delims 导入Hive时从字符串字段中丢弃\n \r 和\01
--hive-delims-replacement 导入Hive时用用户定义的字符串替换\n \r 和\01
--hive-partition-key hive分区字段名
--hive-partition-value 字符串值作为当前导入hive任务的分区键
--map-column-hive 覆盖SQL类型到Hive类型的默认映射

7.2.12 导入数据到Hive中

Sqoop的导入工具的主要功能是上传你的数据到HDFS的文件中。如果你有Hive metastore关联到HDFS集群,Sqoop也可以通过生成并执行一个CREATE TABLE声明来定义Hive中数据结构,从而导入数据到Hive中。导入数据到HIve非常简单,在Sqoop命令行中加上*--hive-import选项就行。

如果Hive表已经存在,你可以指定--hive-overwrite选项表明要替换已有的表。在数据已经导入HDFS或者这一步被忽略,Sqoop会生成一个Hive脚本,包括一个CREATE TABLE操作基于Hive类型来定义你的列,以及一个LOAD DATA INPATH声明来移动数据文件到Hive数据仓库目录。

脚本会通过调用运行机器上安装的hive拷贝来执行。如果安装了多个Hive,或者hive不在$PATH中,则要用--hive-home选项手动指定Hive的安装路径。Sqoop会在此用$HIVE_HOME/bin/hive

提示
这个功能与--as-avrodatafile--as-sequencefile不兼容

虽然Hive支持转义字符,但不能处理换行符。并且不支持可能包含定界符的带括号字符串的括号功能。因此建议在处理Hive时选择没有歧义的字段以及不用转义和括号字符来进行记录的定界分隔;这是由于Hive的输入解析能力限制。如果在导入数据到HIve时使用--escaped-by--enclosed by或者--optionally-enclosed-by,Sqoop会打印一个警告信息。

如果你的数据库行中的字符串字段包含Hive的默认行定界符(\n和\r),或者列定界符(\01),Hive会在Sqoop-imported数据时出问题。你可以用-hive-drop-import-delims选项将这些字符丢弃,以符合Hive要求。另外,还可以用*--hive-delims-replacement选项来用用户自定义字符替换这些字符串来解决。这些选项只有当你使用Hive默认定界符时使用,而且不能指定不同的定界符。

Sqoop会将字段和每条记录的定界符传给Hive。如果你没有设置任意定界符并且使用了--hive-import,字段分隔符会设为^A,记录定界符会被设为\n,这与Hive默认设置是一致的。

Sqoop会默认将空值导入为字符串null。Hive则使用\N指代NULL值,因此处理空值的语句(比如IS NULL)不会正常工作。如果你想完美保留空值,你应该在导入任务附带参数--null-string--null-non-string,在导出任务附带--input-null-stringinput-null-non-string。因为sqoop使用在生成的代码中使用这些参数,你应该将\N转义为\N

$ sqoop import ... --null-string '\N' --null-non-string '\N'

Hive中的表名默认和原表一致。你可以用--hive-table选项控制输出的表名。

Hive可以将数据进行分区以进行更高效的查询。你可以通过指定--hive-partition-key --hive-partition-value参数来让Sqoop任务把数据按特定分区导入HIve。分区值必须是字符串。更多分区信息请看Hive文档。

你能使用--compress--compression-codec参数来压缩表并导入Hive。一个缺点是很多编解码器无法处理并行map任务。lzop codec是可以支持splitting的。当用这种方法导入表时,Sqoop会自动索引文件并分割,然后设置新的带有正确InputFormat的Hive表。这个特性目前需要所有的表分区都被lzop codec压缩。

你可能感兴趣的:(Sqoop User Guide v1.4.6文档7.2.12. Importing Data Into Hive翻译)