这篇文章主要为大家展示了“Hive如何创建外部表”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Hive如何创建外部表”这篇文章吧。
别的先不说,开门见山说说内部表的特点:
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;
Hive 创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变;
在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
传统数据库对表数据验证是schema on write(写时模式),而 Hive 在load时是不检查数据是否符合schema的,hive 遵循的是schema on read(读时模式),只有在读的时候hive才检查、解析具体的数据字段、schema;所以在这样的设计下,Hive支持创建外部表也变得理所应当,我们来看下如何创建一个外部表。
CREATE EXTERNAL TABLE table_name(id STRING, name STRING) ROW FORMAT DELIMITEDLOCATION '/data/my_data.txt';
关键字EXTENAL告诉Hive这个表是外部的,而后面的LOCATION...子句则用于告诉Hive数据位于哪个路径下。
然而,我们需要清楚的重要的一点是管理表和外部表之间的差异要比刚开始所看到的小得多。即使对于管理表,用户也是可以知道数据是位于哪个路径下的,因此用户也是可以使用其他工具(例如hadoop的hdfs dfs命令等)来修改甚至删除管理表所在的路径目录下的数据的。
可能从严格意义上来说,Hive是管理着这些目录和文件,但是其并非具有对它们的完全控制权限。Hive实际上对于所存储的文件的完整性以及数据内容是否和表模式相一致并没有支配能力,甚至管理表都没有给用户提供这些管理能力。
尽管如此,好的软件设计的一般原则是表达意图。如果数据会被多个工具共享,那么可以创建一个外部表,来明确对数据的所有权。
用户可以在DESCRIBE EXTENDED tablename 语句的输出中查看到表是否是管理表或外部表。在末尾的详细表信息输出中,对于管理表,用户可以看到如下信息:
... tableType:MANAGED_TABLE)
对于外部表,用户可以查看到如下信息:
... tableType:EXTERNAL_TABLE)
对于管理表,用户还可以对一张存在的表进行表结构复制(而不会复制数据):
CREATE EXTERNAL TABLE IF NOT EXISTS ods.ods_table_nameLIKE mydb.employeesLOCATION '/path/to/data';
这里,如果语句中省略掉EXTERNAL关键字而且源表是外部表的话,那么生成的新表也将是外部表。如果语句中省略掉EXTERNAL关键字而且源表是内部表的话,那么生成的新表也将是内部表。
但是,如果语句中包含有EXTERNAL关键字而且源表是内部表的话,那么生成的新表将是外部表。即使在这种场景下,LOCATION子句同样是可选的。
以上是“Hive如何创建外部表”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。