hive建表语句

因为用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)

区别:

  • 内部表数据由Hive自身管理,
    外部表数据由HDFS管理;
  • 内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),
    外部表数据的存储位置由自己制定;
  • 删除内部表会直接删除元数据(metadata)及存储数据;
    删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
  • 对内部表的修改会将修改直接同步给元数据,
    而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

建立外部表(这里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;

    原文作者:小碧小琳
    原文地址: https://www.jianshu.com/p/4b24fcca978f
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞