您好,登录后才能下订单哦!
这篇文章主要介绍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如何创建内部表 ”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。