zoukankan      html  css  js  c++  java
  • Hive创建内部表、外部表

    使用hive需要hive环境

    启动Hive

    进入HIVE_HOME/bin,启动hive

    ./hive

    内部表

    • 建表
    hive> create table fz
        > (id int,name string,age int,tel string)
        > ROW FORMAT DELIMITED
        > FIELDS TERMINATED BY ','
        > STORED AS TEXTFILE;

    创建完成后使用 show tables; 查看是否创建成功.

    hive> show tables;

    OK

    fz

    Time taken: 0.043 seconds, Fetched: 9 row(s)

    • 导入数据

    提前准备好一个txt文件,文件内容如下

    1,fz,25,131888888888
    2,test,20,13222222222
    3,dx,24,183938384983

    接下来导入数据

    hive> load data local inpath '/Users/FengZhen/Desktop/Hadoop/hive/testfile/fz.txt' into table fz;
    Loading data to table default.fz
    Table default.fz stats: [numFiles=1, totalSize=66]
    OK
    Time taken: 0.784 seconds

    查看表中的数据。

    hive> select * from fz;
    OK
    1    fz    25    13188888888888
    2    test    20    13222222222
    3    dx    24    183938384983
    Time taken: 0.445 seconds, Fetched: 3 row(s)

    数据已经导入成功。

    在导入数据的过程中,如果在建表的过程中没有指定location,那么就会在hive.metastore.warehouse.dir指定的路径下,以表名创建一个文件夹,之后所有有关该表的数据都会存储到此文件夹中。

    hive.metastore.warehouse.dir是在HIVE_HOME/conf/hive-site.xml中配置的,如下,我配置的路径为/user/hive/warehouse

    <property>
       <name>hive.metastore.warehouse.dir</name>
       <value>/user/hive/warehouse</value>
    </property>

    现在去HDFS中就可以看到该路径下有个文件夹名为fz,fz下有个文件就是我们在导入数据时,从本地文件系统拷贝到HDFS中的fz.txt.

    EFdeMacBook-Pro:conf FengZhen$ hadoop fs -ls /user/hive/warehouse/fz
    Found 1 items
    -rwxr-xr-x   1 FengZhen supergroup         66 2017-06-06 10:57 /user/hive/warehouse/fz/fz.txt
    • 删除该表
    hive> drop table fz;
    OK
    Time taken: 0.141 seconds

    该表删除后,再去HDFS中看一下还有没有之前创建的文件夹。

    hadoop fs -ls /user/hive/warehouse

    结果显示该文件夹已经没有了,也就是说当我们在删除内部表的时候,不仅删除了表中的数据,还删除了数据文件。

    外部表

    • 建表

    hive> create external table fz_external_table(id int,name string,age int,tel string)

        > ROW FORMAT DELIMITED

        > FIELDS TERMINATED BY ','

        > STORED AS TEXTFILE

        > location '/user/hive/external/fz_external_table';

    建外部表时要加external关键字,我在建表时指定了location,当然也可以不指定,不指定就默认使用hive.metastore.warehouse.dir指定的路径。

    • 导入数据

    提前准备好数据文件fz_external.txt,数据同上,只是换了个名。

    1,fz,25,13188888888888
    2,test,20,13222222222
    3,dx,24,183938384983
    4,test1,22,1111111111

    接下来进行导入数据的操作

    hive> load data local inpath '/Users/FengZhen/Desktop/Hadoop/hive/testfile/fz_external_table.txt' into table fz_external_table;

    Loading data to table default.fz_external_table

    Table default.fz_external_table stats: [numFiles=0, totalSize=0]

    OK

    Time taken: 0.224 seconds

    查看表内数据。

    hive> select * from fz_external_table;
    OK
    1    fz    25    13188888888888
    2    test    20    13222222222
    3    dx    24    183938384983
    4    test1    22    1111111111
    Time taken: 0.06 seconds, Fetched: 4 row(s)

    现在数据已经导入成功,接下来去HDFS中查看以下,在location指定的路径下

    EFdeMacBook-Pro:testfile FengZhen$ hadoop fs -ls /user/hive/external/fz_external_table;
    Found 1 items
    -rwxr-xr-x   1 FengZhen supergroup         88 2017-06-06 13:44 /user/hive/external/fz_external_table/fz_external_table.txt

    可以看到,往外部表中导入数据的时候,本地文件系统中的数据文件也被拷贝到了HDFS中。

    现在来删除外部表,看一下HDFS中文件有没有被删除。

    hive> drop table fz_external_table;
    OK
    Time taken: 0.103 seconds

    外部表已经删除成功,看下HDFS中

    EFdeMacBook-Pro:testfile FengZhen$ hadoop fs -ls /user/hive/external/fz_external_table;
    Found 1 items
    -rwxr-xr-x   1 FengZhen supergroup         88 2017-06-06 13:44 /user/hive/external/fz_external_table/fz_external_table.txt

    可以看到,HDFS中数据文件在表被删除的情况下,还是存在的,也就是说删除外部表,只能删除表数据,并不能删除数据文件。

    内部表与外部表的不同

    • 创建外部表需要添加 external 字段。而内部表不需要。
    • 删除外部表时,HDFS中的数据文件不会一起被删除。而删除内部表时,表数据及HDFS中的数据文件都会被删除。
  • 相关阅读:
    用C语言编写生成小学四则运算程序
    每周学习报告
    读现代软件工程有感和自我介绍
    第七天
    第五天
    第六天
    作业九:课程总结
    作业四:结对编程项目--四则运算
    psp记录个人项目花费时间
    作业三:代码规范,代码复查
  • 原文地址:https://www.cnblogs.com/EnzoDin/p/6951181.html
Copyright © 2011-2022 走看看