Hive如何创建内部表

这篇文章主要介绍Hive如何创建内部表 ,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

网站建设哪家好,找创新互联!专注于网页设计、网站建设、微信开发、重庆小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了浪卡子免费建站欢迎大家使用!

之前说的是外部表,当把EXTERNAL关键字去掉的时候就是内部表了。为什么叫内部表,因为这种表,Hive会(或多或少地)控制着数据的生命周期。

如果你熟悉Hive那你一定知道,Hive默认情况下会将这些表的数据存储在由配置项 hive.metastore.warehouse.dir (例如,/user/hive/warehouse)所定义的目录的子目录下。

当我们删除一个内部表时,Hive也会删除这个表中数据。相应的,内部表不方便和其他工作共享数据。例如,有一份数据正在被其他程序使用,同时我们还想使用Hive在这份数据上执行一些查询,可是并没有给予Hive对数据的所有权,我们可以创建一个外部表指向这份数据,而并不需要对其具有所有权。那内部表如果想要这份数据怎么办呢,用LOAD。

LOAD DATA LOCAL INPATH /data/ OVERWRITE INTO TABLE ods_login PARTITION (dt='2020-03-01');
  • OVERWRITE:覆盖

如果用户指定了 OVERWRITE关键字,那么目标文件夹中之前存在的数据将会被先删 除掉。如果没有这个关键字,仅仅会把新增的文件增加到目标文件夹中而不会删除之 前的数据。如果目标文件夹中已经存在和装载的文件同名的文件,那么旧的同 名文件将会被覆盖重写。

  • PARTITION:导入分区

如果分区目录不存在的话,这个命令会先创建分区目录,然后再将数据拷贝到该目录下。如果目标表是非分区表,那么语句中应该省略PARTITION子句。

通常情况下指定的路径应该是一个目录,而不是单个独立的文件。Hive会将所有文件 都拷贝到这个目录中。这使得用户将更方便地组织数据到多文件中,同时,在不修改 Hive脚本的前提下修改文件命名规则。不管怎么样,文件都会被拷贝到目标表路径下 而且文件名会保持不变。

如果使用了 LOCAL这个关键字,那么这个路径应该为本地文件系统路径。数据将会被 拷贝到目标位置。如果省略掉LOCAL关键字,那么这个路径应该是HDFS的路径。这种情况下,数据是从这个路径转移到目标位置的。

之前提到过Hive的schema on read,这种模式的优势是load data 非常迅速,因为它不需要读取数据进行解析,仅仅进行文件的复制或者移动。MySQL的写时模式的优势是提升了查询性能,因为预先解析之后可以对列建立索引,并压缩,但这样也会花费要多的加载时间。

需要注意的是:

  • 如果加载的文件在HDFS上,此文件会被移动到表路径中;

  • 如果加载的文件在本地,此文件会被复制到HDFS的表路径中;

  • 会为每一个待导入的文件,启动一个MR任务进行导入。

如同内部表一样,外部表在创建表时也需要指定数据表所在的数据文件的路径——以下简称为表路径。如果没有指定,Hive会自动分配一个。自动分配的目录是hive主目录下的以表名命名目录;

如果创建外部表时,指定表的数据存储目录。Hive会将此目录下已有的所有文件作为表的数据文件,在查询时进行解析。此时,Hive仍会在hive的目录下创建以表名命名的目录,但目录内的内容为空。


以上是“Hive如何创建内部表 ”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


本文名称:Hive如何创建内部表
浏览地址:http://azwzsj.com/article/gecohg.html