Hive 导入CSV文件


SerDe 介绍

Hive 使用如下FileFormat 类读写 HDFS files:

TextInputFormat/HiveIgnoreKeyTextOutputFormat: 读写普通HDFS文本文件.
SequenceFileInputFormat/SequenceFileOutputFormat: 读写SequenceFile格式的HDFS文件.

Hive 使用如下SerDe 类(反)序列化数据:
MetadataTypedColumnsetSerDe: 读写csv、tsv文件和默认格式文件
ThriftSerDe: 读写Thrift 序列化后的对象.

DynamicSerDe: 读写Thrift序列化后的对象, 不过不需要解读schema中的ddl.


hive通过java写入csv文件:http://blog.csdn.net/zengmingen/article/details/52637483


CSV Serde

CSV格式的文件也称为逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号。在本文中的CSV格式的数据就不是简单的逗号分割的),其文件以纯文本形式存储表格数据(数字和文本)。CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。


默认的分隔符:

DEFAULT_ESCAPE_CHARACTER \
DEFAULT_QUOTE_CHARACTER  "     //如果没有,则不需要指定
DEFAULT_SEPARATOR        ,

建表语句:

CREATE TABLE csv_table(a string, b string) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES (   "separatorChar" = "\t",   "quoteChar"     = "'",   "escapeChar"    = "\\")  STORED AS TEXTFILE;
separatorChar:分隔符
quoteChar:引号符
escapeChar:转意符


实验操作

准备数据

从数据库导出。

文件1:user1.csv



文件2:user2.csv



文件3:user3.csv




创建表

hive (zmgdb)> create table csv_t1(a string,b string,c string)
            > row format serde
            > 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
            > with
            > SERDEPROPERTIES
            > ("separatorChar"=",")  
            > STORED AS TEXTFILE;


引号符“

hive (zmgdb)> create table csv_t2(a string,b string,c string)
            >  row format serde
            > 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
            > with
            > SERDEPROPERTIES
            >  ("separatorChar"=",","quotechar"="\"")
            >  STORED AS TEXTFILE;
OK
Time taken: 0.072 seconds


转义符\

hive (zmgdb)> create table csv_t3(a string,b string,c string)
            >  row format serde
            > 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
            > with
            > SERDEPROPERTIES
            >  ("separatorChar"=",","escapeChar"    = "\\" )
            >  STORED AS TEXTFILE;
OK
Time taken: 0.088 seconds


导入

hive (zmgdb)> load data local inpath '/data/user1.csv' into table csv_t1;
Loading data to table zmgdb.csv_t1
OK
Time taken: 0.536 seconds


hive (zmgdb)> load data local inpath '/data/user2.csv' into table csv_t2;
Loading data to table zmgdb.csv_t2
OK
Time taken: 0.181 seconds


hive (zmgdb)> load data local inpath '/data/user3.csv' into table csv_t3;
Loading data to table zmgdb.csv_t3


查询

hive (zmgdb)> select * from csv_t1;
OK
csv_t1.a        csv_t1.b        csv_t1.c
%       root    Y
hello110        root    Y
127.0.0.1       root    Y
::1     root    Y
localhost       hive    N
%       hive    Y
Time taken: 0.74 seconds, Fetched: 6 row(s)


hive (zmgdb)> select * from csv_t2;
OK
csv_t2.a        csv_t2.b        csv_t2.c
%       root    Y
hello110        root    Y
127.0.0.1       root    Y
::1     root    Y
localhost       hive    N
%       hive    Y
Time taken: 0.068 seconds, Fetched: 6 row(s)


hive (zmgdb)> select * from csv_t3;
OK
csv_t3.a        csv_t3.b        csv_t3.c
%       root    Y
hello110        'root'  Y
127.0.0.1       NULL    NULL

::1     root    Y
localhost       hive    N
%       hive    Y
Time taken: 0.07 seconds, Fetched: 6 row(s)


补充

如果文件内容的引号符,分隔符,转义符,不是默认的,也不是建表语句指定的,则原样导入。

文件user4.csv:引号符是中文单引号



导入csv_t1表

hive (zmgdb)> load data local inpath '/data/user4.csv' into table csv_t1;
Loading data to table zmgdb.csv_t1

OK
Time taken: 0.191 seconds


hive (zmgdb)> select * from csv_t1;
OK
csv_t1.a        csv_t1.b        csv_t1.c
%       root    Y
hello110        root    Y
127.0.0.1       root    Y
::1     root    Y
localhost       hive    N
%       hive    Y
‘111111’        ‘root’  ‘Y’
‘112222’        ‘r2222’ ‘Y’

Time taken: 0.06 seconds, Fetched: 14 row(s)
hive (zmgdb)> 





  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

松门一枝花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值