zoukankan      html  css  js  c++  java
  • hive的数据模型

     

        (1)Hive数据库

        类似传统数据库的DataBase,在第三方数据库里实际是一张表。简单示例命令行 :

    hive > create database test_database

        (2)内部表

        Hive的内部表与数据库中的Table在概念上是类似。每一个Table在Hive中都有一个相应的目录存储数据。例如一个表pvs,它在HDFS中的路径为/wh/pvs,其中wh是在hive-site.xml中由${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的Table数据(不包括External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除。

        内部表简单示例:
        创建数据文件:test_inner_table.txt

        创建表:>create table test_inner_table (key string)
        加载数据:>LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table
        查看数据:>select * from test_inner_table;
        删除表:>drop table test_inner_table

        (3)外部表

        外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。内部表的创建过程和数据加载过程这两个过程可以分别独立完成,也可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。而外部表只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在LOCATION后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个External Table时,仅删除该链接。相比内部表,创建外部表多了external关键字说明以及location(指定外部表存放数据的路径),当然也可以不指定外部表的存放路径,这样hive将在hdfs的/usr/hive/warehouse文件夹下以外部表名创建一个文件夹,并将属于这个表的数据存放在这里。
        外部表简单示例:
        创建数据文件:test_external_table.txt
        创建表:>create external table test_external_table (key string)
        加载数据:>LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table
        查看数据:>select * from test_external_table; 

        删除表:>drop table test_external_table

        (4)分区

        Partition对应于数据库中的Partition列的密集索引,但是Hive中Partition的组织方式和数据库中的很不相同。在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中。例如pvs表中包含ds和city两个Partition,则对应于ds = 20090801, ctry = US 的HDFS子目录为/wh/pvs/ds=20090801/ctry=US;对应于 ds = 20090801, ctry = CA 的HDFS子目录为/wh/pvs/ds=20090801/ctry=CA。

        分区表简单示例:
        创建数据文件:test_partition_table.txt
        创建表:>create table test_partition_table (key string) partitioned by (dt string)
        加载数据:>LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_table partition (dt=‘2006’)
        查看数据:>select * from test_partition_table;  
        删除表:>drop table test_partition_table

        (5)桶

        Buckets是将表的列通过Hash算法进一步分解成不同的文件存储。它对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件。例如将user列分散至32个bucket,首先对user列的值计算hash,对应hash值为0的HDFS目录为/wh/pvs/ds=20090801/ctry=US/part-00000;hash值为20的HDFS目录为/wh/pvs/ds=20090801/ctry=US/part-00020。如果想应用很多的Map任务这样是不错的选择。

        桶的简单示例:
        创建数据文件:test_bucket_table.txt
        创建表:>create table test_bucket_table (key string) clustered by (key) into 20 buckets
        加载数据:>LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table
        查看数据:>select * from test_bucket_table;  set hive.enforce.bucketing = true;

        (6)Hive的视图

        视图与传统数据库的视图类似。视图是只读的,它基于的基本表,如果改变,数据增加不会影响视图的呈现;如果删除,会出现问题。如果不指定视图的列,会根据select语句后的生成。
        示例:create view test_view as select * from test

     

  • 相关阅读:
    自解代理模式
    顺时针打印二维方阵
    Dom4j官网解释实例
    Eclipse快捷键大全
    MyEclipse快捷键大全
    SQL语句的增删改查(详细)
    MySQL用户权限详细汇总
    从表中随机返回n条记录
    证件照(1寸2寸)拍摄处理知识汇总
    java 实现文件内容的加密和解密
  • 原文地址:https://www.cnblogs.com/llphhl/p/6610059.html
Copyright © 2011-2022 走看看