美文网首页
hive建表语句

hive建表语句

作者: 小碧小琳 | 来源:发表于2019-02-13 14:05 被阅读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)

    区别:

    • 内部表数据由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;

    相关文章

      网友评论

          本文标题:hive建表语句

          本文链接:https://www.haomeiwen.com/subject/kzereqtx.html