hive 学习笔记——表的入门操作和命令
2016-02-23 22:07
281 查看
1、受控表(managed table)包括内部表、分区表、桶表;
1.1、分区表
创建分区表:create table banji(id INT,name STRING) partitioned by(grade INT) row format delimited fields terminated by '\t'; create table member(id INT,name STRING) partitioned by(year INT,month INT) row format delimited fields terminated by '\t';
为分区表加载数据
load data local inpath 'student1' into table banji partition(grade=1); load data local inpath 'student1' into table banji partition(year=2014,month=1);
*分区字段在文件中是没有的,但是查询是显示出来的,分区字段是作为虚拟列存在的
分区不是越多越好,需要对分区数量进行限制(分区过多,会产生过多的小文件)
分区字段:查询比较频繁 ,并且不会有很多枚举值的字段适合作为分区字段
1.2、桶表(bucket table)
桶就是那个模的数字优点:每个桶的数据量差不多,在进行表连接查询的的时候方便
缺点:按业务字段查的时候没效果
应用场景:抽样、表连接
创建桶表
create table bucket(id INT,name STRING) clustered by(id) into 3 buckets;
启用桶表
SET hive.enforce.bucketing=true;
添加数据
insert overwrite table bucket select id ,name from banji;
*不能用load方式,load方式是简单的复制进hive表,insert的时候,会通过mr处理分桶
2、非受控表指外部表
删除表的时候只删除了表定义,不会对HDFS中的数据进行删除创建外部表
create external table ext_table(c1 STRING,c2 STRING) row format delimited fields terminated by '\t' location '/ext_data';
3、命令行工具
3.1、set命令可以设置变量也可以显示变量
3.2、设置启动初始化命令
*hive启动时会默认执行home下的.hiverc文件,该文件位于home目录下set hive.cli.print.current.db=true ; #打印当前数据库名 set hive.cli.print.header=true; #打印标题行 set hive.querylog.location=logpath; #设置hive的查询日志保存地址
3.2、在不进入hive的命令行的情况下执行hvie命令
hive -e "hive命令" hive -e "">>aaa #结果追加到aaa文件中 hive -S -e "">>bbb #输出较少日志
3.3、指定hive执行日志存放地址
hive --hiveconf hive.querylog.location=logpath
3.4、执行文件中的hive脚本
hive -f file
在hive命令行时执行:
source file
相关文章推荐
- 高并发高负载系统架构-php篇
- HDU 1686 Oulipo
- 修改支付宝服务窗开发者网关
- 修改url中参数的值
- C/C++: 预处理指令
- 国内开源 java cms,Jspxcms 6.0.1 发布
- 异步复位同步释放的方法以及多时钟系统的复位设计
- 修改url中参数的值
- sequence有关问题
- 知识点小结
- C语言格式输入函数scanf()详解
- TCP连接状态
- 响应式布局基础二:设置viewport
- 第3章 发现新方法:快速分发新的测试版本
- hdu1159(最长公共子序列)
- 机器学习 —— 概率图模型(推理:MAP)
- BZOJ2441: [中山市选2011]小W的问题
- [Setting]用VS2008将类封装为静态库library
- POJ 3468 A Simple Problem with Integers(段更新的区间求和&Lazy思想&线段树)
- C语言笔记(2)