06 hive中建表语法、内部表、外部表 |
您所在的位置:网站首页 › hive加载数据文件到数据表的语法 › 06 hive中建表语法、内部表、外部表 |
二、数据表 2.1 创建数据表语法 CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name [(col_name data_type [COMMENT col_comment], ...)] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION hdfs_path]
说明: [EXTERNAL] :默认是内部表,如果加上就是外部表 PARTITIONED BY :如果添加了此关键字,表示当前是个分区表 CLUSTERED BY :如果添加此关键字,表示是个分桶表 SORTED BY :按照哪些字段进行排序操作 INTO num_buckets BUCKETS : 要分多少个桶 ROW FORMAT :表示字段与字段之间的分隔符 STORED AS : 当前存储的格式 比如 SEQUENCEFILE|TEXTFILE|RCFILE 来指定该表数据的存储格式,hive中,表的默认存储格式为TextFile。
LOCATION : 指定表在hdfs上存储位置 LIKE :允许用户复制现有的表结构,但是不复制数据。
在hive中,一共有4种类型的表: 内部表 外部表 分区表 分桶表 2.2 内部表 2.2.1 什么是内部表 未被external修饰的是内部表(managed table), 内部表又称管理表,内部表数据存储的位置由hive.metastore.warehouse.dir参数决定(默认:/user/hive/warehouse), 删除内部表会直接删除元数据(metadata)及存储数据,因此内部表不适合和其他工具共享数据。 2.2.2 创建按照指定分割符的表 create table if not exists stu2(id int,name string) row format delimited fields terminated by '\t' stored as textfile location '/user/stu2'; 2.2.3 创建相同表结构的表 create table stu4 like stu2; 2.2.4 查询表的详细类型 desc [formatted] stu2; 2.2.4 删除表 drop table stu2; 2.3 外部表 外部表就是 external 关键字创建的表,外部表的数据来自于 HDFS 上的已有的文件,只是将这个文件和外部表的表结构进行映射,建立表结构和数据的关系,如果删除外部表,数据不会被删除,只是删除了表结构。 2.3.1 将外部表和 HDFS 文件建立关联 Load命令用于将外部数据加载到Hive表中 语法: loaddata [local] inpath '/export/server/datas/student.txt' overwrite | into table student [partition (partcol1=val1,…)]; 参数: load data:表示加载数据 local:表示从本地加载数据到hive表;否则从HDFS加载数据到hive表 inpath:表示加载数据的路径 overwrite:表示覆盖表中已有数据,否则表示追加 into table:表示加载到哪张表 student:表示具体的表 partition:表示上传到指定分区 2.3.2 案例 分别创建老师与学生表外部表,并向表中加载数据 源数据如下: student.txt 01 赵雷 1990-01-01 男 02 钱电 1990-12-21 男 03 孙风 1990-05-20 男 04 李云 1990-08-06 男 05 周梅 1991-12-01 女 06 吴兰 1992-03-01 女 07 郑竹 1989-07-01 女 08 王菊 1990-01-20 女
teacher.txt 01 张三 02 李四 03 王五
1、创建老师表: create external table teacher (t_id string,t_name string) row format delimited fields terminated by '\t'; 2、创建学生表: create external table student(s_id string,s_name string,s_birth string, s_sex string) row format delimited fields terminated by '\t'; 3、从本地文件系统向表中加载数据 load data local inpath'/export/server/hivedatas/student.txt' into table student; 4、加载数据并覆盖已有数据 load data local inpath'/export/server/hivedatas/student.txt' overwrite into table student;
5、从hdfs文件系统向表中加载数据 需要提前将数据上传到hdfs文件系统,其实就是一个移动文件的操作 cd /export/server/hivedatas hadoop fs-mkdir-p/hivedatas hadoop fs-put teacher.txt/hivedatas/ load data inpath'/hivedatas/teacher.txt' into table teacher;
注意,如果删掉student表,hdfs的数据仍然存在,并且重新创建表之后,表中就直接存在数据了,因为我们的student表使用的是外部表,drop table之后,表当中的数据依然保留在hdfs上面了 三、内部表和外部表之间的转换 查询表的类型 desc formatted hive_map; 修改内部表hive_map为外部表 alter table hive_map set tblproperties('EXTERNAL'='TRUE');
3.修改外部表hive_map为内部表 alter table hive_map set tblproperties('EXTERNAL'='FALSE');
注意:('EXTERNAL'='TRUE')和('EXTERNAL'='FALSE')为固定写法,区分大小写!
|
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |