HQL的一些语句总结

HQL原文来自http://slaytanic.blog.51cto.com/2057708/782175/   Slaytanic老师

关于Hadoop的介绍来自:http://www.cnblogs.com/shishanyuan/p/4629300.html   石山园老师,他的Hadoop博客写得很好,有兴趣可以去看下

Hive 是facebook开源的一个基于hadoop框架的查询工具,也就是说,需要用hive的话,就要先安装hadoop。

Hadoop的生态系统大致如下:

l  HDFS--Hadoop生态圈的基本组成部分是Hadoop分布式文件系统(HDFS)。HDFS是一种数据分布式保存机制,数据被保存在计算机集群上,HDFS为HBase等工具提供了基础。

l  MapReduce--Hadoop的主要执行框架是MapReduce,它是一个分布式、并行处理的编程模型,MapReduce把任务分为map(映射)阶段和reduce(化简)。由于MapReduce工作原理的特性, Hadoop能以并行的方式访问数据,从而实现快速访问数据。

l  Hbase--HBase是一个建立在HDFS之上,面向列的NoSQL数据库,用于快速读/写大量数据。HBase使用Zookeeper进行管理,确保所有组件都正常运行。

l  Zookeeper--用于Hadoop的分布式协调服务。Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

l  Pig--它是MapReduce编程的复杂性的抽象。Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig Latin)。其编译器将Pig Latin翻译成MapReduce程序序列。

l  Hive--Hive类似于SQL高级语言,用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。像Pig一样,Hive作为一个抽象层工具,吸引了很多熟悉SQL而不是Java编程的数据分析师。

l  Sqoop是一个连接工具,用于在关系数据库、数据仓库和Hadoop之间转移数据。Sqoop利用数据库技术描述架构,进行数据的导入/导出;利用MapReduce实现并行化运行和容错技术。

l  Flume提供了分布式、可靠、高效的服务,用于收集、汇总大数据,并将单台计算机的大量数据转移到HDFS。它基于一个简单而灵活的架构,并提供了数据流的流。它利用简单的可扩展的数据模型,将企业中多台计算机上的数据转移到Hadoop。

比如我们公司,目前就是通过flume将存放在X台服务器上的数据拉回来,在拉取的过程中它会将每台服务器每个时段(每10分钟为一个时段)的txt文件合并起来,文件命名为:YYYY-MM-DD_hh_mm.tmp. 拉取回来的数据放在flumetable里,将它们的后缀变为log,之后按批次放入datatable里,之后每个批次的数据会被分成两个表(在hive中计算),这两个表再通过各种计算和join操作,得出报表,推送到sql  server上,以便前端做呈现。(这段我自己写得所以很渣,这是目前数据处理流程,貌似有遗漏,看来我自己也没有多了解,还需要再学习,毕竟连自己公司的流程都不清楚,即便我并不是数据挖掘工程师。)

OK,下面入正题:

1.字段的数据类型。

hive实际上为了数据挖掘的需要,对hive表的字段设置了数据类型,对于经常where的,还可以设置index。

数据类型分以下几种

STRING 不定长字符串
TINYINT 3位长整型数
SMALLINT 5位长整型
INT 10位整型
BIGINT 19位整型
FLOAT 浮点数
DOUBLE 双精度
BOOLEAN 布尔型,也就是TRUE和FALSE

不同的整型数有不同的位数限制,这个创建表的时候需要注意一下,别因为位数不够造成数据截取。位数过大,又会造成元数据的空间浪费。

还有三种不常用到的
STRUCTS 结构体
ARRAY 数组
MAP 这个不知道该怎么翻译合适

2.创建数据表。

hive的数据表分为两种,内部表和外部表。

内部表指hive创建并通过load data inpath进数据库的表,这种表可以理解为数据和表结构都保存在一起的数据表。当你通过DROP TABLE table_name 删除元数据中表结构的同时,表中的数据也同样会从hdfs中被删除。

外部表指在表结构创建以前,数据已经保存在hdfs中了,通过创建表结构,将数据格式化到表的结构里。当DROP TABLE table_name 的时候,hive仅仅会删除元数据的表结构,而不会删除hdfs上的文件,所以,相比内部表,外部表可以更放心大胆的使用。

之前我一直不明白内部表和外部表的区别,经过老师一说,迅速懂了。内部表是先有结构后有数据,外部表示先有数据,然后建立个结构把数据放进去了。当我们drop table时,内部表是连表带数据一个不留地都删除了;外部表只把结构删了,数据还在,所谓留的青山在,不怕没柴烧。

3、内部表建表语句:

CREATE TABLE database.table1 
(
column1 STRING COMMENT ‘comment1‘,
column2 INT COMMENT ‘comment2‘
);

4、外部表建表语句:

下面是hdfs中文件不用LZO压缩,纯文本保存时,如何创建外部表:

CREATE EXTERNAL TABLE IF NOT EXISTS database.table1 
(
column1 STRING COMMENT ‘comment1‘,
column2 STRING COMMENT ‘comment2‘
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
LOCATION ‘hdfs:///data/dw/asf/20120201‘;

下面是,当hdfs中的文件用LZO压缩后,如何创建外部表,当然你需要hadoop-gpl的支持才能以文本形式读取lzo文件。

CREATE EXTERNAL TABLE IF NOT EXISTS database.table1
(
column1 STRING COMMENT ‘comment1‘,
column2 STRING COMMENT ‘comment2‘
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t"
STORED AS INPUTFORMAT
"com.hadoop.mapred.DeprecatedLzoTextInputFormat" OUTPUTFORMAT
"org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat"
LOCATION ‘hdfs:///data/dw/asf/20120201‘;

标红部分是十分操蛋的,网上几乎所有涉及该单词的文章基本全是复制粘贴抄的,无一例外,全部写成SORTED,如果你找的hive中文资料不是Slaytanic老师这篇,恐怕创建外部表都会报错。

--我一般用的比较多的都是内部表,所以对外部表没有什么发言权。另:为什么老师创建内部表的时候不指定分隔符呢?不指定也可以么?

 

5、内部表加载数据

l  从本地文件系统中加载数据:

Load data local  inpath’文件的本地存储路径’overwrite 
into  table  basedatadb.table1;

如果加了overwrite,原本表中的数据就会被覆盖掉。

l  从HDFS中加载数据:

Load data inpath’文件在HDFS中的存储路径’
into table basedatadb.table1;

这个我本人还没有用过

 

6、分区

l  建分区

Alter table basedatadb.table1
add partition(day=’2015-07-26’);

l  删除分区:

Alter table basedatadb.table1 drop
partition(day=’2015-07-26’);

未完待续,后续会补充复制表结构、增加新列~~~~想到了再补。没想到写博客居然这么费时间,原本计划半小时2篇的(/(ㄒoㄒ)/~~,其实不能算写,只是在复制老师们的总结,然后再加上自己的疑问和总结,实在不能算自己的作品。不过我还是会努力地,希望有一天能原创出自己的分享博客)。

时间: 2024-10-16 00:41:35

HQL的一些语句总结的相关文章

SQL或HQL预编译语句,能够防止SQL注入,但是不能处理%和_特殊字符

最近项目在做整改,将所有DAO层的直接拼接SQL字符串的代码,转换成使用预编译语句的方式.个人通过写dao层的单元测试,有以下几点收获. dao层代码如下 //使用了预编译sql public List<IndvConfigModel> selectConfigBySuffix(String suffix) { String hql = "from IndvConfigModel where configKey like '%'||?||'%'"; return this.

hibhibernate中hql中的语句where语句查询List出现空

1.java.sql.Date 与 java.util.Date java.sql.Date是从java.util.Date中继承而来 假设 dates1(java.sql.Date)要赋值给dates2(java.util.Date) 可以通过如下转换进行 dates2=new java.sql.Date(dates1.getTime()); 2. PrepareStament中的方法 setTimeStamp()与setDate()以及ResultSet中的getDate()  ,getTi

HQL语句大全

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 第 15 章 HQL: Hibernate查询语言Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 15.1. 大小写敏感性问题除了Java类与属

HQL语句大全(转载)

Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 第 15 章 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 15.1. 大小写敏感性问题除了Java类与

HQL查询语句

查询语言 Hibernate 查询语言(HQL)是一种面向对象的查询语言,类似于 SQL,但不是去对表和列进行操作,而是面向对象和它们的属性. HQL 查询被 Hibernate 翻译为传统的 SQL 查询从而对数据库进行操作. 尽管你能直接使用本地 SQL 语句,但我还是建议你尽可能的使用 HQL 语句,以避免数据库关于可移植性的麻烦,并且体现了 Hibernate 的 SQL 生成和缓存策略. 在 HQL 中一些关键字比如 SELECT ,FROM 和 WHERE 等,是不区分大小写的,但是

Hibernate Hql 总结

1.from子句 Hibernate中最简单的查询语句的形式如下: from eg.Cat该子句简单的返回eg.Cat类的所有实例. 通常我们不需要使用类的全限定名, 因为 auto-import(自动引入) 是缺省的情况. 所以我们几乎只使用如下的简单写法: from Cat大多数情况下, 你需要指定一个别名, 原因是你可能需要 在查询语句的其它部分引用到Cat from Cat as cat这个语句把别名cat指定给类Cat 的实例, 这样我们就可以在随后的查询中使用此别名了. 关键字as

HQL: Hibernate查询语言

HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 第 15 章 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 15.

hibernate hql 大全

hibernate hql 大全 http://blog.chinaunix.net/article.php?articleId=47942&blogId=1655 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 第 15 章 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询

类型:。net;问题:HQL;结果:HQL: Hibernate查询语言

HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 第 15 章 HQL: Hibernate查询语言 Hibernate配备了一种非常强大的查询语言,这种语言看上去很像SQL.但是不要被语法结构 上的相似所迷惑,HQL是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态 和关联之类的概念. 15.