Hive教程之DML数据导入导出

文章基本目录结构:

  • 数据导入
    • 导入本地文件
    • 导入hdfs文件
  • 数据导出
    • 导出到新表
    • 导出到本地文件
    • 导出到hdfs文件

本文的测试基于Hadoop 2.2.0 + hive 0.12.0

[一]、数据导入

LOAD的基本语法:

1、准备测试数据

准备本地数据,创建:/Users/micmiu/no_sync/testdata/hadoop/myword_local.txt 即可,内容如下:

ps: 字段之间用制表符(’\t’) 分割

准备 hdfs上的文本数据,先创建一个本地 /Users/micmiu/no_sync/testdata/hadoop/myword_local.txt 如下:

ps: 字段之间用制表符(’\t’) 分割

hdfs上创建测试用的目录:

hdfs dfs -mkdir -p /user/micmiu/test/input

然后把本地文件上传到hdfs系统中:

hdfs dfs -put /Users/micmiu/no_sync/testdata/hadoop/myword_hdfs.txt /user/micmiu/test/input

到此测试用的数据已经准备ok。

2、导入本地数据

Hive中创建测试表

命令:
LOAD DATA LOCAL INPATH '/Users/micmiu/no_sync/testdata/hadoop/myword_local.txt' OVERWRITE INTO TABLE myword;

执行导入并验证查询如下:

对比本地文件myword_local.txt 内容一致,导入成功。

3、导入hdfs上的数据

按照上一步【2】中方法重新创建表,或者 清空数据:TRUNCATE TABLE myword

查看下导入数据之前hdfs中文件结构:

准备导入hdfs中文件:

LOAD DATA INPATH '/user/micmiu/test/input/myword_hdfs.txt' OVERWRITE INTO TABLE myword;

导入过程如下:

验证查询导入的数据:

对比之前准备的文本myword_hdfs.txt 内容一致。

查看下hdfs中得文件结构变化:

ps:在操作中发现从hdfs中导入数据有两个问题:

  1. overwrite 参数在从hdfs导入数据时无效
  2. 如果hdfs重复导入同名的文件,hive会有错误,据说0.11版本修复了改bug,不过我在0.12.0中还是有这个问题(https://issues.apache.org/jira/browse/HIVE-3300

[二]、数据导出

把上面两个文本数据都导入到表 myword 中,结果如下:

1、导出查询数据到新表

首先创建新的目标表 myword_stat

HQL:

执行过程如下:

2、导出查询数据到本地文件

如果要自定义导出的分隔符(‘\t’)

3、导出查询数据到hdfs中

ps:导出到hdfs中自定义分隔符有错误。

—————–  EOF @Michael Sun —————–

原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[ http://www.micmiu.com/ ]

本文链接地址: http://www.micmiu.com/bigdata/hive/hive-dml-load-insert/

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">