文档章节

常用HQL

把南墙撞开
 把南墙撞开
发布于 2017/02/03 23:22
字数 955
阅读 3
收藏 0

进入hive客户端后:

1、建表:

create table page_view(viewTime int, userid bigint,
     page_url string, referrer_url string,
     ip string comment 'IP Address of the User')
 comment 'This is the page view table'
 partitioned by(dt string, country string)
 row format delimited fields terminated by '\t'  //指定字段间的分隔符
 stored as sequencefile; //textfile
//sequencefile 是以键值对组织的二进制文件
//hive的默认库是default,表也是一个文件夹,置于hdfs的/user/hive/warehouse下
//新建的库就是在hdfs的/user/hive/warehouse下新建一个库名文件夹


2、在hive客户端将本地文件上传至数据仓库

实际就是将文件上传至对应的hdfs中表文件夹下 

load data local inpath '~/data.txt' into table table_name;

//此操作也可通过hadoop fs -put ~/data.txt /user/hive/warehouse/库名/表名 来实现

load data inpath '/data.txt' into table table_name;//将hdfs上的文件移动至对应的hdfs表文件夹下



3、外表 external

表:文件找表

外表:表找文件

create external table tab_ip_ext(id int, name string, ip string, country string)
row format delimited fields terminated by ','
stored as testfile
location '/hdfs的文件路径;'


 
4、类似视图  CTAS  用于创建一些临时表存储中间结果,在hdfs中没有建立目录

create table tab_ip_ctas
as
select id new_id, name new_name, ip new_ip, country new_country
from tab_ip_ext
sort by new_id;


5、向表中写入查询数据

create table tab_ip_like like tab_ip; 
insert overwrite table tab_ip_like  //insert into为追加,overwrite为重写
    select * from tab_ip;


6、分区 PARTITION

分区就是在表的文件夹下再建一层文件夹,文件夹名称为"分区字段名=分区值",如"part_flag=part1"

create table tab_ip_part(id int,name string,ip string,country string) 
    partitioned by (part_flag string)  //分区标志可以是表中字段,也可以是另一个自定义字段
    row format delimited fields terminated by ',';
    
load data local inpath '/home/hadoop/ip.txt' overwrite into table tab_ip_part partition(part_flag='part1');
load data local inpath '/home/hadoop/ip_part2.txt' overwrite into table tab_ip_part partition(part_flag='part2');
select * from tab_ip_part;
select * from tab_ip_part  where part_flag='part2';  //查询时,将分区当做一个字段来使用;末尾会有part2
select count(*) from tab_ip_part  where part_flag='part2';


7、将查询结果写入文件

//写入本地文件
insert overwrite local directory '/tmp/test.txt' select * from tab_ip_part where part_flag='part1'; 
//写入hdfs   
insert overwrite directory '/hiveout.txt' select * from tab_ip_part where part_flag='part1';



8、数据类型为数组 array 

create table tab_array(a array<int>,b array<string>)
row format delimited
fields terminated by '\t'
collection items terminated by ',';
示例数据
one,two,three    1,2,3

d,e,f    4,5,6

select a[0] from tab_array;
select * from tab_array where array_contains(b,'word');
insert into table tab_array select array(0),array(name,ip) from tab_ext t;




9、数据类型为map
create table tab_map(name string,info map<string,string>)
row format delimited
fields terminated by '\t'
collection items terminated by ';'
map keys terminated by ':';
示例数据:
name key1:value1;key2:value2;key3:value3
insert into table tab_map select name,map('name',name,'ip',ip) from tab_ext;


10、数据类型为struct

create table tab_struct(name string,info struct<age:int,tel:string,addr:string>)
row format delimited
fields terminated by '\t'
collection items terminated by ','
insert into table tab_struct select name,named_struct('age',id,'tel',name,'addr',country) from tab_ext;


11、在shell环境下执行HQL
hive -S -e 'select country,count(*) from 库名.表名' > /tmp/query.txt

可用脚本(bash,python)进行hql批量查询

12、用户自定义函数 UDF
select udf(id=1,first,no-first),name from tab_ext;

写一个Java类,定义udf函数逻辑,此类继承UDF,重写evaluate方法,public修饰,参数与返回值按需指定;

打成jar包,告知hive此jar包的位置:hive>add jar /..../xxx.jar

在hive中创建函数udf,将udf和此Java类挂钩即可:

hive>CREATE TEMPORARY FUNCTION my_udf AS 'org.dht.Lower(类全名)'; //退出后,my_udf失去作用


13、sequencefile
create table tab_ip_seq(id int,name string,ip string,country string) 
    row format delimited
    fields terminated by ','
    stored as sequencefile;
insert overwrite table tab_ip_seq select * from tab_ext;


14、分区将不同的记录放在不同的文件夹中,分桶将不同的记录置于不同的文件 CLUSTER 

create table tab_ip_cluster(id int,name string,ip string,country string)
clustered by(id) into 3 buckets;

load data local inpath '/.../ip.txt' overwrite into table tab_ip_cluster;
set hive.enforce.bucketing=true;
insert into table tab_ip_cluster select * from tab_ip;
select * from tab_ip_cluster tablesample(bucket 2 out of 3 on id);
用于抽样,保证均匀抽样。





本文转载自:http://blog.csdn.net/weixin_37289816/article/details/54798815

把南墙撞开
粉丝 0
博文 73
码字总数 21068
作品 0
昌平
私信 提问
常用的Hql语句

数据库java [java] view plaincopyprint? // HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用。 // >> 2,SQL查询的是表和表中的列;HQL查询......

Zero零_度
2015/10/09
39
0
六种方式实现hibernate查询

hibernate查询的6种方法。分别是HQL查询,对象化查询Criteria方法,动态查询DetachedCriteria,例子查询,sql查询,命名查询。 HQL查询 HQL是hibernate自己的一套查询语言,于SQL语法不同,具...

姚君
2014/04/03
67
0
(J2EE学习笔记)六种方式实现hibernate查询

对Hibernate的底层调用数据库查询并不是很了解,引用了这位前辈的一篇博文。 注明文章出处:http://www.cnblogs.com/shiyangxt/archive/2009/01/13/1375151.html 实现hibernate查询的六种方式...

w1sw
2016/04/15
0
0
Hibernate中createCriteria(QBC)查询的用法

现在假设有一个Student类,内有id,name,age属性 String hql = "from Student s"; 按照以前的做法,我们通常是 Query query = session.createQuery(hql); 或者要按照条件检索的话. String hql ......

北京_
2014/11/08
143
0
Hibernate中HQL函数汇总及其说明

Criteria查询对查询条件进行了面向对象封装,符合编程人员的思维方式,不过HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的...

罗盛力
2013/01/25
653
0

没有更多内容

加载失败,请刷新页面

加载更多

面试官,Java8 JVM内存结构变了,永久代到元空间

在文章《JVM之内存结构详解》中我们描述了Java7以前的JVM内存结构,但在Java8和以后版本中JVM的内存结构慢慢发生了变化。作为面试官如果你还不知道,那么面试过程中是不是有些露怯?作为面试...

程序新视界
22分钟前
13
0
读书笔记:深入理解ES6 (八)

第八章 迭代器(Iterator)与生成器(Generator) 第1节 循环语句的问题   在循环、多重循环中,通过变量来跟踪数组索引的行为容易导致程序出错。迭代器的出现旨在消除这种复杂性,并减少循...

张森ZS
22分钟前
12
0
Elasticsearch 实战(一) - 简介

官腔 Elasticsearch,分布式,高性能,高可用,可伸缩的搜索和分析系统 基本等于没说,咱们慢慢看 1 概述 百度:我们比如说想找寻任何的信息的时候,就会上百度去搜索一下,比如说找一部自己喜...

JavaEdge
26分钟前
13
0
【jQuery基础学习】11 jQuery性能简单优化

本文转载于:专业的前端网站➦【jQuery基础学习】11 jQuery性能简单优化 关于性能优化 合适的选择器 $("#id")会直接调用底层方法,所以这是最快的。如果这样不能直接找到,也可以用find方法继...

前端老手
35分钟前
12
0
重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源

导读:2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM...

阿里云官方博客
38分钟前
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部