建表

hive中建表一般分为两种情况

1、普通内部表

建表语句:create  table tablename(name string,num int);

创建内部表的时候,内部表直接存储在默认的hdfs路径,不带有数据;删除内部表的时候,内部表会将数据和元数据全部删除。

2、外部表

建表语句:create external table tablename(name string,num int)
         row format delimited
         fields terminated by ','
         location '/test';

比在创建内部表的时候增加一个关键字:external
同时还有有数据分割语句 row format delimited fileds terminated by ','
最后再写上外部表的建表路径 location ‘xxxx’

创建外部表的时候,需要自己指定路径,同时在删除表时,只删除元数据,数据并不删除

导入数据

可以通过2种方式将数据导入到hive中

1、从本地文件系统中导入数据到hive表

基本语句:
load data local inpath '/usr/local/data/demo1.txt'
overwrite into table tablename;

从本地文件系统中将数据导入到Hive表的过程中,其实是先将数据临时复制到HDFS的一个目录下,然后再将数据从那个临时目录下移动(注意是移动!!不是复制)到对应的Hive表的数据目录里面。既然如此,那么Hive肯定支持将数据直接从HDFS上的一个目录移动到相应Hive表的数据目录下,

2、从HDFS上导入数据到Hive表

基本语法:
load data inpath '/user/root/data/demo2.txt'
overwrite into table tablename;

使用OpenCSVSerde

相信大家在使用hive进行数据存储分析过程中,会经常碰到需要上传CSV文件格式的数据。由于CSV文件在hive中是自动按 " , " 进行分割的,而我们经常会发现数据中就已经带有 " , " 这就会导致我们将数据导入到hive中已经创建好的表时,出现一个数据占据好几个字段,出现数据混乱的问题。
为了解决这个问题,hive为我们提供了用于专门处理CSV的OpenCSVSerde

OpenCSVSerde具有一下字符串数据特性:

  1. 使用双引号 (") 作为默认引号字符,还允许您指定分隔符、引号和转义符
  2. \t 或 \n 无法直接转义。要对它们进行转义,请使用 "escapeChar" = "\\"
  3. 不支持 CSV 文件中的嵌入换行符

以下是具体使用示例:

hive> create external table ods_job_message(
    > crawl_datetime timestamp,
    > url string,
    > company_name string,
    > company_size string,
    > company_type string,
    > job_type string,
    > job_name string,
    > edu string,
    > )
    > row format serde 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
    > with serdeproperties
    > (
    > 'separatorChar' = ',',
    > 'quoteChar' = '\"',
    > 'escapeChar' = '\\'
    > )
    > location '/data';

OpenCSVSerde中默认的分隔符separatorChar、quote、escape分别为\, " 和 ‘ 
这就可以完美解决在读写CSV文件中遇到数据中带有 ","的问题。

这些数据虽然都带有, 但全都在同一个字段下。

tips:导入CSV文件时跳过第一行

在创建表的语句后加上:
tblproperties("skip.header.line.count"="1")  --就可以完美跳过文件行首行

 

Logo

大数据从业者之家,一起探索大数据的无限可能!

更多推荐