Hive之内部表、外部表、分区表

内部表在HDFS上默认的存储路径

hdfs://IP:8020/user/hive/warehouse/数据库名.db/表名

内部表的创建

create table student (
  sno int,
  sname string,
  sex string,
  sage int,
  sdept string
) row formatdelimited fields terminated by ',' ;

将文件上传到HDFS

hadoop fs -put student.txt /user/hive/warehouse/student    --上传文件

外部表的创建

create external table student_ext (
  sno int,
  sname string,
  sex string,
  sage int,
  sdept string
) row formatdelimited fields terminated by ',' location '/stu' ;

将文件上传到HDFS

hadoop fs -mkdir /stu    --创建外部表文件夹
hadoop fs -put student.txt /stu    --上传文件

说明:
/stu是存放映射文件的文件夹
以上两种(未涉及到分区),可以直接将文件使用put命令上传到HDFS即可(但是:必须先建表,再上传文件,若先上传文件,再建表,则不会映射)。但是官方不推荐,官方推荐使用load语句

分区表的创建

  • 分区字段在HDFS中是以文件夹的形式存在的,该文件夹下放的是分区的文件。分区字段是虚拟字段,不会在实际存放的文件中体现的。只是用来加载数据时候的指定
  • 分区字段不能是表中已经存在的字段(因为查询的时候,分区字段会显示出来,一个表中不能出现两个相同的字段),而且分区表需要load来加载
create table t_user_p (
	id int, 
	name string,
	country string
) partitioned by (guojia string) 
row format delimited fields terminated by ",";                          
  • 使用load 命令进行数据加载,加载的时候指定分区的信息(local本地:指的是hive服务器所在的Linux系统)
  • local命令,指的是从本地加载。如果是从HDFS中加载,可以不用local命令
  • 从本地加载(load)的时候,实质是复制操作,将本地的文件复制到Hive的默认路径下。从HDFS加载(load)的时候,实质是移动命令,将原来HDFS目录中的文件移动到Hive的默认路径下
# 加载分区 guojia='zhongguo'
load data local inpath 
	'/root/hivedata/china.txt' 
into 
	table t_user_p partition(guojia='zhongguo');

# 加载分区 guojia='meiguo'
load data local inpath
	'/root/hivedata/usa.txt'
into
	table t_user_p partition(guojia='meiguo');

注:以上所有的加载方式中,数据文件中没有字段名。即从第一行就是数据

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值