• Hive的两种表


    1.内部表

    • 内部表Load数据有两种方式① Load data ***;②hdfs dfs -put ****。这是因为在Metastore文件,即mysql的hive数据库的“SDS”表中,保存着Hive表对应的hdfs路径信息
    • 内部表在Load数据时,如果使用LOCAL关键字,Hive会把本地文件系统中的数据文件复制到Hive的 /warehouse 目录。反之,则是将HDFS上的数据文件剪切到 /warehouse 目录。
    • Hive在Load数据时,并不检查目录中的文件是否符合表所声明的模式。只有通过SELECT查询返回空值NULL,才能确定不匹配。
    • 内部表drop时,表的元数据(mysql中)和数据文件(hdfs中)都会被删除
    create table book (id bigint, name string) row format delimited fields terminated by '	';

    2.外部表

    • 外部表Load数据也有两种方式
    • 外部表只需在创建表时显示指定表中数据存储位置即可。Hive不会把数据剪切到自己的目录
    • 实际上,在创建表时,Hive甚至不会检查这一外部位置是否存在。这是一个非常重要的特性,这意味着可以先创建表,再上传数据文件。
    • 如果不显示指定外部表的存放路径,这样Hive将在HDFS上的 /user/hive/warehouse/ 文件夹下创建一个以外部表表名的文件夹,并将属于这个表的数据存放在这里。
    • 对于创建外部表命令,执行成功后,会在hdfs上自动创建空目录'/book'用来存储数据文件。
    • 外部表在drop时,不会碰数据文件,而只会删除元数据信息,即HDFS上的'/book'目录依旧存在
    create external table book (id bigint, name string) row format delimited fields terminated by '	' location '/book';

    区别

    1.导入数据到外部表,数据并没有移动到 '/user/hive/warehouse/T_Name'目录下,也就是说外部表中的数据并不是由它自己来管理的!而内部表则不一样;

    2.删除内部表的时候,Hive将会把属于内部表的元数据和数据文件全部删掉;而删除外部表的时候,Hive仅仅删除外部表的元数据,数据文件是不会删除的!

    3.两种表的选择:推荐使用外部表(跨部门的数据)

    4.默认行内分隔符

    • 如果在创建表时没有用row format或stored as子句,那么Hive使用默认格式来分割的每一行。
    • 默认的行内分隔符不是制表符,而是ASCII控制码集合中的Control-A(它的ASCII码为1)
    • 这是因为它出现在文本中的概率相对于制表符来说概率更小。
    CREATE TABLE records ( id string ) Row Format Delimited Fields Terminated By ‘	’ ;

      英语解释:行内格式的限定符以 ' '结尾终止

  • 相关阅读:
    ExtJS 刷新或者重载Tree后,默认选中刷新前最后一次选中的节点代码片段
    ios>APP名称的多语言化(转)
    android>apk破解以及重新编译(转)
    MFC动态库基本概念
    (内存中的)堆和栈的区别(转过无数次的文章)
    面向对象五大基本原则
    VS20052008程序发布、打包(MFC)
    在MFC中创建动态控件的生成与响应
    SQL2000自动备份数据库并发送邮件报告数据库自动备份情况
    The Concept of Callbacks
  • 原文地址:https://www.cnblogs.com/skyl/p/4736230.html
Copyright © 2020-2023  润新知