hive建表语句

2019-02-13  本文已影响0人  小碧小琳

因为用mr对hdfs进行操作比较繁琐,所以才出现了hive。hive本质上进行操作的还是hdfs文件,而不是表。所以在一些地方,为了迎合hdfs文件,与sql语言有些许的不同。比如在建表方面的不同,在一些函数上的不同等。

一、hive 建表

参考:Hive学习3:Hive三种建表语句详解

1.1、直接建表法:

在建表时,要通过语法,将HDFS上的文件映射成表结构。所以在建表时与sql上有些许不同。
不过,建立好表以后,已经映射成表结构,那么操作就跟sql很相似了。

1.1.1、row format 与 file format

row format

其中,映射过程中会有参数row format(行的格式) 和 file format(文件的格式) 两个参数。

row format 表示的是行在存储时的序列化 与 反序列化 的规则。一般后面都是定好了默认参数的。需要的时候再改。

比如,给表定好了,列按照逗号分割,某个字段按照“-”分割,map型字段按照“:”分割。

这样订好了形式以后,就能够让系统比较合理的进行序列化与反序列化了

file format

表示hdfs文件存放的格式,默认是TEXTFILE,文本格式,可以直接打开。

按照参考的网页,建表。注意,建表的时候,已经指明了各个字段的类型,所以在进行分割的时候就很容易了。

create table t1(
    id      int
   ,name    string
   ,hobby   array<string>
   ,add     map<String,string>
)
row format delimited
fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
;
元数据的概念:

参考:Hive的数据存储
元数据,是用来描述数据的数据。 表中的数据,比如,25,31是数据。而元数据中,元数据“年龄”就是用来描述25,31的。所以说,元数据是这种用来描述数据的数据。

在hive中

元数据是用来存储表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。 由于Hive的元数据需要不断的更新、修改,而HDFS系统中的文件是多读少改的,这显然不能将Hive的元数据存储在HDFS中。目前Hive将元数据存储在数据库中,如Mysql、Derby中。

1.1.2、external

未被external修饰的是内部表(managed table),被external修饰的为外部表(external table)

区别:

建立外部表(这里t2 被external所修饰了)

'''
create external table t2(
id int
,name string
,hobby array<string>
,add map<String,string>
)
row format delimited
fields terminated by ','
collection items terminated by '-'
map keys terminated by ':'
location '/user/t2'
;
'''

1.2、查询建表法:

将子查询的结果存在新表里,表中有数据。通过as查询语句完成建表。

例子:

create table t3 as
select
    id
   ,name
from t2
;

1.3、like建表法

创建结构完全相同的表,但是没有数据。

例子:

create table t4 like t2;

上一篇下一篇

猜你喜欢

热点阅读