库名 | 目录 | 描述 |
---|---|---|
default | hdfs://hdp20-01:9000/user/hive/warehouse | 默认数据库 |
create database db_test; |
hdfs://hdp20-01:9000/user/hive/warehouse/db_order.db | 在/user/hive/warehouse/目录下创建 |
创建表只是定义了一个表结构,真实数据要通过hdfs上传到对应表名的指定文件夹下
内部表(MANAGED_TABLE):数据放在/user/hive/warehouse
中,删除时会删除元数据和表数据目录
1.该表会映射/user/hive/warehouse/db_order.db/t_test
目录, 默认分隔符是^A
use db_test; //如果不指明数据库,默认使用default数据库
create table t_test(id string,create_time string);
2.可以自己指定分隔符
create table t_test(id string,create_time string)
row format delimited
fields terminated by ',';
3.按照已有的表格式创建表
create table t_user_2 like t_user;
4.创建表时,插入数据
create table t_access_user
as
select ip,url from t_access;
外部表(EXTERNAL_TABLE):表目录由用户指定,既映射到指定路径,删除时只会删除元数据
create external table t_log(ip string,url string)
row format delimited
fields terminated by ','
location '/access/log';
分区表是指在表目录中为数据文件创建分区子目录,MR程序可以针对分区子目录中的数据进行处理,缩减读取数据的范围。
比如按天划分分区.
创建分区表:
create table t_access(ip string,url string,access_time string)
partitioned by(dt string) # dt是分区字段,在数据表中也可以使用
row format delimited
fields terminated by ',';
向分区表中导入数据
load data local inpath '/root/access.log.2019-08-04.log' into table t_access partition(dt='20190804');
load data local inpath '/root/access.log.2019-08-05.log' into table t_access partition(dt='20190805');
分区数据查询
select count(*) from t_access where dt='20190804';
只对20190804这一天的数据进行运算
select count(*) from t_access;
对所有的进行运算
1.hadoop put方法
2.hive交互方式,从本地导入,load data local inpath '/root/data' into table t_order;
3.hive交互方式,从hdfs导入,这个是剪切的方式load data inpath '.log' into table t_access partition(dt='20170806');
1.将hive数据导出hdfs
insert overwrite directory '/root/data'
row format delimited fields terminated by ','
select * from t_access;
2.将hive数据导出本地
insert overwrite local directory '/root/data'
row format delimited fields terminated by ','
select * from t_access limit 100000;