1.Hive中内部表和外部表及其对应的hdfs路径
1.1 Hive内部表和外部表的区别
Hive 创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据 所在的路径, 不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除, 而外部表只删除元数据,不删除数据。这样外部表相对来说更加安全些,数据组织也更加灵活,方便共享源数据。
内部表
创建内部表
create table test1(a string,b string) row format delimited fields terminated by '\t' //指定分隔符 stored as textfile //指定文件格式;文件格式有Text File,Sequence File。 location '/input/table_data'; //指定数据文件文件存储路径
2.装载内部表
load data inpath '/input/data' into table test1; //将hdfs路径中的数据文件装载到test1表中。
内部表的数据加载会将hdfs路径/input/data下的数据文件转移到/input/table_data。如果删除test1表后,会将test1表的数据和元数据信息全部删除,最后/input/table_data下无数据,而且/input/data下也无数据因为/input/data下的数据在load data操作时已经转移到了/input/table_data。
外部表
1.创建外部表
create external table etable (name string , age string)
row format delimited
fields terminated by '\t' //指定分隔符
stored as textfile //指定文件格式;文件格式有Text File,Sequence File。
location '/input/etable_data'; //指定数据文件文件存储路径
2.装载外部表
load data inpath '/input/edata' into table etable;
此时会把hdfs路径/input/edata下的数据转移到/input/etable_data下。若删除这个外部表则/input/etable_data下的数据不会被删除。但是/input/edata的数据被转移到/input/etable_data也没有了。
1.2查看hive表的详细信息
输出创建指定表或者视图的语句
0: jdbc:hive2://hadoop1:11000> show create table etable;
OK
+-----------------------------------------------------------------+--+
| createtab_stmt |
+-----------------------------------------------------------------+--+
| CREATE EXTERNAL TABLE `etable`( |
| `name` string, |
| `age` string) |
| ROW FORMAT SERDE |
| 'org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe' |
| WITH SERDEPROPERTIES ( |
| 'field.delim'='\t', |
| 'serialization.format'='\t') |
| STORED AS INPUTFORMAT |
| 'org.apache.hadoop.mapred.TextInputFormat' |
| OUTPUTFORMAT |
| 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' |
| LOCATION |
| 'hdfs://cluster:8020/input/etable_data' |
| TBLPROPERTIES ( |
| 'transient_lastDdlTime'='1487775812') |
+-----------------------------------------------------------------+--+
查看表结构
0: jdbc:hive2://hadoop1:11000> desc formatted etable;
OK
+-------------------------------+----------------------------------------------------------- -- +-----------------------+--+
| col_name | data_type | comment |
+-------------------------------+------------------------------------------------------------- +-----------------------+--+
| # col_name | data_type | comment |
| | NULL | NULL |
| name | string | |
| age | string | |
| | NULL | NULL |
| # Detailed Table Information | NULL | NULL |
| Database: | chenjie | NULL |
| Owner: | root | NULL |
| CreateTime: | Wed Feb 22 23:03:32 HKT 2017 | NULL |
| LastAccessTime: | UNKNOWN | NULL |
| Retention: | 0 | NULL |
| Location: | hdfs://cluster:8020/input/etable_data | NULL |
| Table Type: | EXTERNAL_TABLE | NULL |
| Table Parameters: | NULL | NULL |
| | EXTERNAL | TRUE |
| | transient_lastDdlTime | 1487775812 |
| | NULL | NULL |
| # Storage Information | NULL | NULL |
| SerDe Library: | org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe | NULL |
| InputFormat: | org.apache.hadoop.mapred.TextInputFormat | NULL |
| OutputFormat: | org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat | NULL |
| Compressed: | No | NULL |
| Num Buckets: | -1 | NULL |
| Bucket Columns: | [] | NULL |
| Sort Columns: | [] | NULL |
| Storage Desc Params: | NULL | NULL |
| | field.delim | \t |
| | serialization.format | \t |
+-------------------------------+-------------------------------------------------------------+-----------------------+--+