1.在hive中可以执行shell命令
用户可以直接在hive中执行shell命令,只需要使用!开始,使用(;)结尾
hive默认是不显示字段名称的,可以使用hive.cli.print.header为true进行配置
用户可以在cli中执行hadoop命令,只需要将hadoop的去掉即可,用分号(;)结尾
所有的数据类型都是Java接口的实现,所有所有的具体行为细节和实现与对应的java是一致的。
BINARY和关系型数据库VARBINARY数据类型相似,但是和BLOB数据类型不同,因为BINARY的列是存储在记录中的,而BLOB不是,BLOB是一个可以存储二进制文件的容器。
集合的数据类型,STRUCT{FIELD1 string,FIELD2}那么第一个字段可以通过元素来引用。
集合类型主要包括:array,map,struct等,hive的特性支持集合类型,这特性是关系型数据库所不支持的,利用好集合类型可以有效提升SQL的查询速率。
collection items terminated by '_';
load data local inpath 'Documents/hive/t_person.txt' into tablet_person;
1,王力宏,唱歌_钢琴_二胡_作曲_演戏_导演_书法
collection items terminated by '_'
collection items terminated by '_';
hive不支持行级插入操作、更新和删除,也不支持事务,除此外,和基本数据库一致。
在创建表的最后可以指定HDFS的存储路径,使用通常的创建创建的都是管理表,也叫内部表
创建外部表,createexternal table来创建外部表,在删除内部表,会把元数据和数据全部删除,但是创建外部表删除只会删除元数据。
Hive中的查询一般会扫描到整个表,有时只需要扫描部分数据引入了分区表。
通常使用分区来分散水平压力,将数据从物理上转移到距使用最频繁的用户更近的地方,分区还可以将数据进行分层存储。
使用partitioned关键字进行分区,创建一个分区,就会在HDFS中创建一个相应的文件夹。
同时也可以创建外部分区表,同时hive可以自定义表的存储格式,例如存储为文本格式,storedas textfile
hive采用的是Hash值,然后除以桶的个数求余的方式决定该条记录应该存储于哪一个桶中
hadoop fs -put /home/zkpk/empmessages /data/emp_messages
insert overwrite table emp_meaages select * from old_emp_meaages
SELECT * FROM DISTRIBUTE BY RAND() SORT BYRAND() LIMIT ;
该方式是最佳化采样bucket表。RAND()函数也可以用来采样整行。如果采样列同时使用了CLUSTEREDBY,使用TABLESAMPLE语句会更有效率。
SELECT * FROM TABLESAMPLE(BUCKET OUT OF ON [colname|RAND()]) table_alias;
1)使用下面的语句,从表lxw111中取样50%的数据,创建一个新表:
SELECT * FROM lxw1 TABLESAMPLE (50 PERCENT);
2)这种方式指定取样数据的大小,单位为M。比如,下面的语句:
SELECT * FROM lxw1 TABLESAMPLE (30M);
3)这种方式可以根据行数来取样,但要特别注意:这里指定的行数,是在每个InputSplit中取样的行数,也就是,每个Map中都取样nROWS。
SELECT * FROM lxw1 TABLESAMPLE (200 ROWS)
4) table_sample: TABLESAMPLE (BUCKET x OUT OF y [ON colname])
CREATE TABLE lxw1_bucketed (pcid STRING)
CLUSTERED BY(pcid) INTO 10 BUCKETS;
INSERT overwrite TABLE lxw1_bucketed
表lxw1_bucketed按照pcid字段分成10个桶,下面的语句表示从10个桶中抽样第一个桶的数据:
SELECT COUNT(1) FROM lxw1_bucketed TABLESAMPLE(BUCKET 1 OUT OF 10 ONpcid);
CREATE TEMPORARY FUNCTION function_name AS class_name;
hive>add jar /opt/lib/hive-train-1.0.jar;
hive>CREATE TEMPORARY FUNCTION sayHello AS'com.zhaotao.bigdata.hive.HelloUDF'
hive>select ename,sayHello(ename) from emp;
import java.text.SimpleDateFormat;
import org.apache.hadoop.hive.ql.exec.UDF;
public class UDFZodiacSign extends UDF {
df = new SimpleDateFormat("MM-dd-yyyy");
public String evaluate(Date bday){
return evaluate(bday.getMonth(),bday.getDay());
public String evaluate(String bday){
return evaluate(date.getMonth()+1,date.getDay());
public String evaluate(Integer month,Integer day){
UDFZodiacSign aa = new UDFZodiacSign();