• Hive建表和内外部表的使用


    原文链接:

    https://www.toutiao.com/i6766784274965201415

    一、普通建表方式

    create table stu_info(

    id int,

    name string

    )ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

    载入数据

    load data local inpath '/data/hivetest/stu_info_local' into table stu_info;

    load data inpath '/data/hivetest/stu_info_local' into table stu_info;

    另外的方式

    官网

    Hive建表和内外部表的使用

     

    Hive建表和内外部表的使用

     

    二、子查询方式建表

    Hive建表和内外部表的使用

     

    我们练习下

    创建一个练习库

    Hive建表和内外部表的使用

     

    创建一个普通表

    create table normal(

    id int,

    name string

    )ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '

    Hive建表和内外部表的使用

     

    我们装载数据

    load data local inpath '/data/hivetest/stu_info_two' into table normal;

    Hive建表和内外部表的使用

     

    我们看数据是存在的

    Hive建表和内外部表的使用

     

    我们利用子查询生成新表

    create table normal_zcx_t as select * from normal;

    Hive建表和内外部表的使用

     

    实际在跑MapReduce

    Hive建表和内外部表的使用

     

    我们查看表和数据

    Hive建表和内外部表的使用

     

    Hive建表和内外部表的使用

     

    我们可以看到元数据也存在

    Hive建表和内外部表的使用

     

    表结构也一样

    Hive建表和内外部表的使用

     

    我们再看下HDFS

    Hive建表和内外部表的使用

     

    Hive建表和内外部表的使用

     

    Hive建表和内外部表的使用

     

    所以子查询将查询的数据和表的结构赋予一张新的表

    三、Like建表

    Hive建表和内外部表的使用

     

    我们建表

    create table normal_like_t like normal;

    Hive建表和内外部表的使用

     

    只有表结构,没有数据,但是相对于子查询没有MapReduce执行,速度会快很多。

    元数据和HDFS都有

    Hive建表和内外部表的使用

     

    Hive建表和内外部表的使用

     

    四、数据共享

    我们重新创建一个数据库

    Hive建表和内外部表的使用

     

    创建员工表

    Hive建表和内外部表的使用

     

    创建部门表

    Hive建表和内外部表的使用

     

    导入数据

    Hive建表和内外部表的使用

     

    Hive建表和内外部表的使用

     

    我们创建表引用另外一个表的文件,比如引入我们的dept表的文件

    Hive建表和内外部表的使用

     

    Hive建表和内外部表的使用

     

    可以看到表

    Hive建表和内外部表的使用

     

    元数据也有

    Hive建表和内外部表的使用

     

    数据也有

    Hive建表和内外部表的使用

     

    我们把dept_yr数据清空,会发现dept的数据竟然也没有了

    Hive建表和内外部表的使用

     

    那我们重新加载数据呢?

    Hive建表和内外部表的使用

     

    这时候我们明白了,它俩在一起关联的,添加和清除在一起。

    如果删除的话 drop table dept_yr;数据还是清空

    Hive建表和内外部表的使用

     

    所以这种方式建表,他们是互相影响的。

    数据共享一份数据,删除的时候就把共享的数据删除

    删除表也会把元数据数据删除,清除HDFS上的文件

    建表中,这有两个关键字

    Hive建表和内外部表的使用

     

    如果我们不加这两个关键字,表默认是管理表

    Hive建表和内外部表的使用

     

    我们先看TEMPORARY

    我们创建

    Hive建表和内外部表的使用

     

    我们导入数据

    Hive建表和内外部表的使用

     

    去查询元数据,发现没有信息

    Hive建表和内外部表的使用

     

    用desc formatted查看,信息是有的

    Hive建表和内外部表的使用

     

    我们看其中的数据存放路径

    Hive建表和内外部表的使用

     

    查看一下HDFS

    Hive建表和内外部表的使用

     

    这就是临时表的一些特点

    如果关闭的话,就会自动删除临时表,也可以手动删除,常作为临时结果使用。

    如果用location+temporary共享数据会发生什么呢?可以做个练习。(1)关闭客户端对原始数据的影响?(2)删除临时表对原始数据的影响?(3)如果是清空临时表呢?

    我们创建EXTERNAL表

    Hive建表和内外部表的使用

     

    Hive建表和内外部表的使用

     

    我们看元数据

    Hive建表和内外部表的使用

     

    Formatted

    Hive建表和内外部表的使用

     

    我们再dept中加载数据

    Hive建表和内外部表的使用

     

    发现数据在外部表也是有的

    Hive建表和内外部表的使用

     

    如果我们清空外部表,就会报错

    FAILED: SemanticException [Error 10146]: Cannot truncate non-managed table dept_ext.

    Hive建表和内外部表的使用

     

    那我们删除外部表呢?不会对原始数据产生影响

    Hive建表和内外部表的使用

     

    元数据也没了

    Hive建表和内外部表的使用

     

    练习:如果不使用location,直接创建的话,删除表会怎么样?

    总结:删除表时,内部表元数据和数据一起删除,而外部表只删除元数据,不会删除数据,以及HDFS上表对应的目录及文件都不会删除。

  • 相关阅读:
    SqlServer 数据库同步的两种方式 (发布、订阅),主从数据库之间的同步
    Haproxy+Heartbeat 高可用集群方案操作记录
    HAProxy+Keepalived高可用负载均衡
    Centos 6/7 忘记root密码处理方法
    Centos 7配置nginx反向代理负载均衡集群
    各种官网系统镜像文件
    Tomcat通过Redis实现session共享的完整部署记录
    ELK平台搭建及日志监控
    快速搭建ELK日志分析系统
    idea各种快捷键
  • 原文地址:https://www.cnblogs.com/bqwzy/p/12528595.html
Copyright © 2020-2023  润新知