• Hadoop 之 Hive创建内外部表


    Hive创建内外部表

    Hive 数据库类似传统数据库,也是有数据库与表的概念,hive和关系数据库存储文件的系统不同,hive使用的是hadoop的HDFS(hadoop的分布式文件系统),关系数据库则是服务器本地的文件系统。Hive作用比如是为海量数据做数据仓库分析与挖掘之用等以及原理,可查看相关资料,这里通过操作层面的示例,认识下hive下如何创建与查询表,如何导入数据

    Hive表分内部表与外部表,其区别体现在存储上,内部表的创建过程和数据加载过程可以分别独立完成,也可以在同一语句中完成,加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据访问将会直接在数据仓库中完成。删除表时,表中的数据和元数据将会同时删除,而外外部表只有一个过程,加载数据和创建表同时完成,实际数据存储在 location指定的HDFS的相应目录,并不会移到数据仓库中,当删除外部表时,只是删除了该链接。

    概括来讲,直观表现:

    1.语句上看,创建外部表需要添加 external 字段

    2.删除内部表时,表数据及HDFS中的数据文件都会被删除,删除外部表时,HDFS中的数据文件不会一起被删除,实际数据是存储在location指定的hdfs中目录。

    一、创建内部表

    首先是进入hive环境 >hive

    hive> create table person (id int,name string,sex string,tel string)
        > row format delimited fields terminated by ','
        > stored as textfile;
    OK
    Time taken: 0.187 seconds

    查看创建是否成功 

    hive> show tables;
    OK
    person
    Time taken: 0.11 seconds, Fetched: 1 row(s)
    hive>

    准备好待导入表的数据,如

    加载数据,我们可以提前准备好文件,如/usr/mydata/persion.txt 内容为

    1 zhangshan man 13000000001
    2 lishi woman 15000000001
    3 wangwu man 17000000001
    4 sytemadm man 10000000001

    将上面文本文件中的内容导入刚才建的person表中

    hive> load data local inpath '/usr/mydata/person.txt' into table person;
    Loading data to table default.person
    OK
    Time taken: 9.869 seconds

    查看数据

    hive> select * from person;
    OK
    1    zhangshan    man    13000000001
    2    lishi    woman    15000000001
    3    wangwu    man    17000000001
    4    sytemadm    man    10000000001
    Time taken: 2.266 seconds, Fetched: 4 row(s)
    hive>

    查看表存储目录,hive.metastore.warehouse.dir是在HIVE_HOME/conf/hive-site.xml中配置的,路径默认为/user/hive/warehouse,查看此目录可看到一个目录名为person

    [hadoop@kencentos01 bin]$ hdfs dfs -ls /user/hive/warehouse
    Found 1 items
    drwxrwxrwx   - hadoop supergroup          0 2017-12-26 14:53 /user/hive/warehouse/person

    person下有个文件就是我们在导入数据时,从本地文件导入HDFS中的person.txt文件

    [hadoop@kencentos01 bin]$ hdfs dfs -ls /user/hive/warehouse/person
    Found 1 items
    -rwxrwxrwx   3 hadoop supergroup        106 2017-12-26 14:53 /user/hive/warehouse/person/person.txt

    二、创建外部表

    创建外部表,注意关键字”external”,location是指定表的文件位置,若不指定,则为默认与上面内部表一样配置的路径

    hive> create external table person_external (id int,name string,sex string,tel string)
        > row format delimited fields terminated by ','
        > stored as textfile
    > location '/user/hive/warehouse/external';
    OK
    Time taken: 1.31 seconds

    查看建表结果

    hive> show tables;
    OK
    person
    person_external
    Time taken: 0.124 seconds, Fetched: 2 row(s)
    hive>

    同样为了导入数据,需提前准备相应文件如,person_external.txt ,具体内容按字段类型列出就行,可直接拿上面内部表数据

    hive> load data local inpath '/usr/mydata/person_external.txt' into table person_external;
    Loading data to table default.person_external
    OK
    Time taken: 0.673 seconds

    查看数据,与查看内部表一样:

    查看表中的数据
    hive> select * from person_external
        > ;
    OK
    11    zhangshan    man    13000000002
    12    lishai    woman    15000000002
    13    wangwu    man    17000000002
    14    systemadm    man    10000000002
    Time taken: 1.004 seconds, Fetched: 4 row(s)

    查看文件所在位置,对应的HDFS目录

    [hadoop@kencentos01 bin]$ hdfs dfs -ls /user/hive/warehouse/external
    Found 1 items
    -rwxrwxrwx   3 hadoop supergroup        112 2017-12-26 15:22 /user/hive/warehouse/external/person_external.txt
  • 相关阅读:
    selenium产生的垃圾文件清理
    英语学习词根法
    ecommerce学习
    tfs2012安装
    转载文件,英语学习
    Mishka and Divisors CodeForces
    Codeforces Round #364 (Div. 1) (差一个后缀自动机)
    莫比乌斯反演练习
    bzoj 1267 Kth Number I (点分治,堆)
    程序员的绘图利器 — Gnuplot
  • 原文地址:https://www.cnblogs.com/kcen/p/8118410.html
Copyright © 2020-2023  润新知