我的主要目的是创建一个以ORC形式存储的表。为此,我遵循以下步骤
我已经创建了一个文件夹/user/hive/external并创建了两个表(table_txt &table_orc)在同一位置。在table_txt中加载数据之前,一切正常。
现在,我发现,当我使用
将数据从table_txt移动到table_orc时INSERT OVERWRITE TABLE table_orc SELECT * FROM table_txt;
从路径*/外部表被删除(如在web UI上查看),现在我有一个名为"000000_0"的文件,点击它,我得到一些编码的东西。
问题——
1-这个000000_0文件是什么,为什么在web UI上不可见表
2-当我查询table_txt,为什么它不给任何数据?而在查询table_orc,我得到的结果?
创建了两个表…在同一位置==> 红旗!!
位置定义了哪个数据文件属于哪个表。换句话说,每个表都应该位于私有目录上。因此,INSERT OVERWRITE
删除了ORC表的私有目录中的所有内容,然后创建了一个新的数据文件——ORC二进制格式。这是预期行为。可惜TXT文件也在那里。
顺便说一下,"外部"表和"托管"表之间的一个区别是,当您drop
一个托管表时,整个目录将被销毁,而删除一个外部表时,数据将保持原样。