• hive 内部表、外部表、使用场景举例、内部表与外部表转换



    1. 内部表

    1.1 概念

      默认创建的表都是管理表(MANAGED_TABLE ),即内部表;
      Hive控制内部表数据的生命周期:默认情况下会将内部表的数据存储在由配置项hive.metastore.warehouse.dir所定义的目录的子目录下。 当删除一个内部表时,Hive同时会删除表中的数据;
      内部表不适合与其他工具共享数据。

    1.2 实操

    在这里插入图片描述
    查询表的类型

    desc formatted 表名;
    
    • 1

    在这里插入图片描述


    2. 外部表

    2.1 概念

      EXTERNAL关键字可以让用户创建一个外部表,在建表的同时可指定一个指向实际数据的路径(LOCATION)(内部表和外部表建表均可指定);
      在删除表的时候,Hive认为其并非完全拥有外部表的数据的所有权。删除外部表仅删除描述表的元数据信息,数据会被保留。

    2.2 实操

      (1)准备一份emp.txt文件上传到hdfs

    7369	SMITH	CLERK	7902	1980-12-17	800.00		20
    7499	ALLEN	SALESMAN	7698	1981-2-20	1600.00	300.00	30
    7521	WARD	SALESMAN	7698	1981-2-22	1250.00	500.00	30
    7566	JONES	MANAGER	7839	1981-4-2	2975.00		20
    7654	MARTIN	SALESMAN	7698	1981-9-28	1250.00	1400.00	30
    7698	BLAKE	MANAGER	7839	1981-5-1	2850.00		30
    7782	CLARK	MANAGER	7839	1981-6-9	2450.00		10
    7788	SCOTT	ANALYST	7566	1987-4-19	3000.00		20
    7839	KING	PRESIDENT		1981-11-17	5000.00		10
    7844	TURNER	SALESMAN	7698	1981-9-8	1500.00	0.00	30
    7876	ADAMS	CLERK	7788	1987-5-23	1100.00		20
    7900	JAMES	CLERK	7698	1981-12-3	950.00		30
    7902	FORD	ANALYST	7566	1981-12-3	3000.00		20
    7934	MILLER	CLERK	7782	1982-1-23	1300.00		10
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    hdfs dfs -copyFromLocal ./emp.txt /wcinput/
    
    • 1

    在这里插入图片描述
      (2)在hive上创建外部表,并指定路径

    create external table if not exists emp(
    empno int,
    ename string,
    job string,
    mgr int,
    hiredate string, 
    sal double, 
    comm double,
    deptno int)
    row format delimited fields terminated by '\t'
    location '/wcinput';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述
      (3)查看表类型

    desc formatted emp;
    
    • 1

    在这里插入图片描述
      (4)删除外部表
    元数据被删除:

    在这里插入图片描述
    数据仍然保留:
    在这里插入图片描述


    3. 使用场景举例

      每天日志文件定期流入HDFS文本文件。原始日志表使用外部表,统计分析过程中用到的中间表、结果表使用内部表存储


    4. 内部表与外部表转换

    4.1 修改外部表为内部表

    alter table 表名 set tblproperties('EXTERNAL'='FALSE');
    
    • 1

    4.2 修改内部表为外部表

    alter table 表名 set tblproperties('EXTERNAL'='TRUE');
    
    • 1

  • 相关阅读:
    Ubuntu16.04搭建UbertoothOne环境
    C/C++统计满足条件的4位数个数 2023年5月电子学会青少年软件编程(C/C++)等级考试一级真题答案解析
    53.最大子数组和
    C++ 20 内存模型(一)
    后端返回数据如果键是数字类型的解析方法
    关于二进制
    seatunnel web ui 构建时报错
    PyG搭建R-GCN实现链接预测
    白酒行业数字化转型| 酒业中秋营销指南
    AtCoder abc140
  • 原文地址:https://blog.csdn.net/javahelpyou/article/details/125530807