1、Hive不支持等值连接
SQL中对两表内联可以写成:select * from dual a,dual b where a.key = b.key; Hive中应为:select * from dual a join dual b on a.key = b.key; 而不是传统的格式:SELECT t1.a1 as c1, t2.b1 as c2FROM t1, t2 WHERE t1.a2 = t2.b22、分号字符 分号是SQL语句结束标记,在HiveQL中也是,但是在HiveQL中,对分号的识别没有那么智慧,例如:select concat(key,concat(‘;‘,key)) from dual;但HiveQL在解析语句时提示:FAILED: Parse Error: line 0:-1 mismatched input ‘<EOF>‘ expecting ) in function specification,解决的办法是,使用分号的八进制的ASCII码进行转义,那么上述语句应写成:select concat(key,concat(‘ 73‘,key)) from dual;3、IS [NOT] NULL SQL中null代表空值, 值得警惕的是, 在HiveQL中String类型的字段若是空(empty)字符串, 即长度为0, 那么对它进行IS NULL的判断结果是False.4、Hive不支持将数据插入现有的表或分区中,仅支持覆盖重写整个表,示例如下:
INSERT OVERWRITE TABLE t1 SELECT * FROM t2;
5、hive不支持INSERT INTO 表 Values(), UPDATE, DELETE操作 尽量避免使用很复杂的锁机制来读写数据:INSERT INTO就是在表或分区中追加数据。6、hive支持嵌入mapreduce程序,来处理复杂的逻辑
1 FROM ( 2 MAP doctext USING ‘python wc_mapper.py‘ AS (word, cnt) 3 FROM docs 4 CLUSTER BY word 5 ) a 6 REDUCE word, cnt USING ‘python wc_reduce.py‘;
doctext: 是输入,word, cnt: 是map程序的输出,CLUSTER BY: 将wordhash后,又作为reduce程序的输入,并且map程序、reduce程序可以单独使用,如:
1 FROM ( 2 FROM session_table 3 SELECT sessionid, tstamp, data 4 DISTRIBUTE BY sessionid SORT BY tstamp 5 ) a 6 REDUCE sessionid, tstamp, data USING ‘session_reducer.sh‘;
DISTRIBUTE BY: 用于给reduce程序分配行数据。
7、hive支持将转换后的数据直接写入不同的表,还能写入分区、hdfs和本地目录 这样能免除多次扫描输入表的开销。
FROM t1 INSERT OVERWRITE TABLE t2 SELECT t3.c2, count(1) FROM t3 WHERE t3.c1 <= 20 GROUP BY t3.c2 INSERT OVERWRITE DIRECTORY ‘/output_dir‘ SELECT t3.c2, avg(t3.c1) FROM t3 WHERE t3.c1 > 20 AND t3.c1 <= 30 GROUP BY t3.c2 INSERT OVERWRITE LOCAL DIRECTORY ‘/home/dir‘ SELECT t3.c2, sum(t3.c1) FROM t3 WHERE t3.c1 > 30 GROUP BY t3.c2;
实际实例:
一、创建一个表CREATE TABLE u_data (userid INT,movieid INT,rating INT,unixtime STRING)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ‘/t‘STORED AS TEXTFILE;下载示例数据文件,并解压缩wget http://www.grouplens.org/system/files/ml-data.tar__0.gztar xvzf ml-data.tar__0.gz
二、加载数据到表中:LOAD DATA LOCAL INPATH ‘ml-data/u.data‘ OVERWRITE INTO TABLE u_data;
三、统计数据总量:SELECT COUNT(1) FROM u_data;
四、现在做一些复杂的数据分析:创建一个 weekday_mapper.py: 文件,作为数据按周进行分割 import sysimport datetimefor line in sys.stdin:line = line.strip()userid, movieid, rating, unixtime = line.split(‘/t‘)
五、生成数据的周信息weekday = datetime.datetime.fromtimestamp(float(unixtime)).isoweekday()print ‘/t‘.join([userid, movieid, rating, str(weekday)])
六、使用映射脚本//创建表,按分割符分割行中的字段值CREATE TABLE u_data_new (userid INT,movieid INT,rating INT,weekday INT)ROW FORMAT DELIMITEDFIELDS TERMINATED BY ‘/t‘;//将python文件加载到系统add FILE weekday_mapper.py;
七、将数据按周进行分割INSERT OVERWRITE TABLE u_data_newSELECTTRANSFORM (userid, movieid, rating, unixtime)USING ‘python weekday_mapper.py‘AS (userid, movieid, rating, weekday)FROM u_data;SELECT weekday, COUNT(1)FROM u_data_newGROUP BY weekday;
八、处理Apache Weblog 数据将WEB日志先用正则表达式进行组合,再按需要的条件进行组合输入到表中add jar ../build/contrib/hive_contrib.jar;CREATE TABLE apachelog (host STRING,identity STRING,user STRING,time STRING,request STRING,status STRING,size STRING,referer STRING,agent STRING)ROW FORMAT SERDE ‘org.apache.hadoop.hive.contrib.serde2.RegexSerDe‘WITH SERDEPROPERTIES ("input.regex" = "([^ ]*) ([^ ]*) ([^ ]*) (-|//[[^//]]*//]) ([^ /"]*|/"[^/"]*/") (-|[0-9]*) (-|[0-9]*)(?: ([^ /"]*|/"[^/"]*/") ([^ /"]*|/"[^/"]*/"))?","output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s")STORED AS TEXTFILE
HiveQL与SQL区别
标签:
小编还为您整理了以下内容,可能对您也有帮助:
hql和sql的区别是什么
hql是面向对象查询的;sql是面向数据库做查询。
hql的语法结构:from+类名+类对象+where+类对象属性的条件;sql的语法结构:from+数据库表名+where+表字段条件。
新增:hql不需要再用insert语句,只需构造新增对象后调用save()方法。修改:hql不需要再用update语句,只需得到修改对象后调用update()方法。删除:hql不需要再用delete语句,只需得到要删除的对象后调用delete()方法。
hql和sql的区别是什么
hql是面向对象查询的;sql是面向数据库做查询。
hql的语法结构:from+类名+类对象+where+类对象属性的条件;sql的语法结构:from+数据库表名+where+表字段条件。
新增:hql不需要再用insert语句,只需构造新增对象后调用save()方法。修改:hql不需要再用update语句,只需得到修改对象后调用update()方法。删除:hql不需要再用delete语句,只需得到要删除的对象后调用delete()方法。
浅谈hql和sql的区别,描述特别需要注意的地方
1.hql与sql的区别
sql 面向数据库表查询
hql 面向对象查询
hql : from 后面跟的 类名+类对象 where 后 用 对象的属性做条件
sql: from 后面跟的是表名 where 后 用表中字段做条件
查询
在Hibernate中使用查询时,一般使用Hql查询语句。
HQL(Hibernate Query Language),即Hibernate的查询语言跟SQL非常相像。不过HQL与SQL的最根本的区别,就是它是面向对象的。
使用HQL时需要注意以下几点:
l 大小写敏感
因为HQL是面向对象的,而对象类的名称和属性都是大小写敏感的,所以HQL是大小写敏感的。
Eg.
HQL语句:from Cat as cat where cat.id > 1;与from Cat as cat where cat.ID > 1;是不一样的,这点与SQL不同。
l from子句
Eg. from Cat,该句返回Cat对象实例,开发人员也可以给其加上别名,eg. from Cat as cat,对于多表查询的情况,可参考如下:
from Cat as cat, Dog as dog
其它方面都与SQL类似,在此不再赘述。
接下来讲一个在Hibernate中查询的例子。
1.1简单查询
List list = session.createQuery("from User as user order by user.loginName").list();
1.2带单个参数的查询
List list = session.find("from User as user where user.loginName=?",
loginName,
Hibernate.STRING);
1.3多个参数的查询
Eg1. 此例采用“?”占位符的方式
String hql = "from User as user where user.loginName=? and user.orgId=? ";
Query query = session.createQuery(hql);
query.setParameter(1, 'amigo');
query.setParameter(2, new Long(1)) ;
List list = query .list();
Eg2. 此例采用“:paramName”的方式
String hql = "from User as user where user.loginName=:loginName and user.orgId=:orgId ";
Query query = session.createQuery(hql);
query.setParameter('loginName', 'amigo');
query.setParameter('orgId', new Long(1)) ;
List list = query .list();
1.4查询数量
int count = (Integer) session.createQuery("select count(*) from User").uniqueResult().intValue();
1.5查询起始值和数量的查询
这种一般是在记录需要分页的时候需要用到,例如,在如下的代码中,查询的开始记录的位置为50,最大查询条数为50。
String hql = "from User as user order by user.loginName";
int firstResult= 50;
int maxResults = 50;
Query query = session.createQuery(hql);
query = query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
1.6子查询
在某些情况下,也需要用到子查询,例如在下面的例子中,User为用户对象,UserRole为用户与角色关联对象。如下HQL语句将没有分配角色的用户对象查找出来。
String hql = "from User user where user.loginName"
+ " not in(select ur.user.loginName from UserRole ur) ";
List list = (session.createQuery(hql)).list();
1.7原生SQL查询
对于某些复杂的查询语句,需要调用某种特定的数据库的特定函数才能解决,Hibernate虽然不推荐使用原生SQL语句来查询,因为这将破坏数据库的易移植性,但是Hibernate中也提供了使用原生SQL进行查询的方法,只需要获得连接即可。
Eg. 在下面的例子中,用到了Sql Server数据库中的原生sql语句,如下所示:
String timeUnit = "13";
String sql = "select count(*) count, CONVERT(VARCHAR(" + timeUnit +"), log.gen_datetime,121) timeUnit " + "from Log log";
SQLQuery query = session.createSQLQuery(sql)
.addScalar("count", Hibernate.INTEGER)
.addScalar("timeUnit", Hibernate.STRING);
List list = query.list();
2 新增
在数据库中新增记录在Hibernate中不需要使用insert命令,只需要构造新增的对象后,调用Session对象的save(…)方法即可。
2.1新增单个对象
新增单个对象的实例如下,该实例将在用户表中新增一条记录。
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
User user = new User();
user.setLoginName("amigo");
user.setFullName("阿蜜果");
……
session.save(user) ;
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
2.2批量新增对象
对于批量新增对象的情况,需要在新增一部分对象后flush和clear一次,例如,没批量新增20个对象时手动的flush一次,假设在list为一个用户列表,里面包含很多User对象,那么要将实现这些对象的批量新增,可采用如下方法:
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
for (int i = 0; i < list.size(); i++) {
User user = (User) list.get(i);
session.save(user) ;
if (i % 20 == 0) {
session.flush();
session.clear();
}
}
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
3 更新
在hibernate中,更新对象前不需要使用查询语句:update…,一般需要在取得需要更新的持久化对象后,执行Session对象的update(…)方法。例如:
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
//取得持久化对象
User user = session.get(User.class, "amigo");
//对需要修改的属性进行修改
user.setFullName("阿蜜果");
……
session.update(user) ;
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
4 删除
4.1删除单个对象
一般在取得某对象后,开发人员可以调用Session对象的delete(…)方法删除该对象。
Eg. 下面的实例中取得loginName(主键)为“amigo”的User对象后,将它删除。
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
//取得持久化对象
User user = session.get(User.class, "amigo");
session.delete(user) ;
ts.commit();
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
4.2批量删除对象
对于批量删除对象的情况,开发人员可以在取得待删除的对象列表后,一个一个的将对象删除,对于每个对象的删除方法,见3.4.1小节。开发人员还可以hql语句来做批量删除。
Eg. 该实例通过delete语句来删除记录,除了loginName为“amigo”的对象为,其余都删除,代码如下所示:
Session session = HibernateSessionFactory.getSession();
Transaction ts = null;
try {
ts = session.beginTransaction();
String hql = "delete User as user where user.loginName != 'amigo'";
Query query = session.createQuery(hql);
int count = query.executeUpdate();
ts.commit();
System.out.println("delete count : " + count); //删除条数
} catch (Exception e) {
if (ts != null) {
ts.rollback();
}
} finally {
HibernateSessionFactory.closeSession();
}
hql和sql的区别
hql是面向对象的 。
其实还是转成了sql语句
hql在数据库通用,切换数据库方言就可以
sql在不同数据库中语法有些不同
还是sql比较灵活一些。。
HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖 Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装。
sql只是结构化查询语言,只是面向数据检索,不具有面向对象的特征,所以HQL更加符合开发标准!参考资料:露兜博客
hql和sql的区别
hql是面向对象的 。
其实还是转成了sql语句
hql在数据库通用,切换数据库方言就可以
sql在不同数据库中语法有些不同
还是sql比较灵活一些。。
HQL(Hibernate Query Language)查询提供了更加丰富的和灵活的查询特性,因此Hibernate将HQL查询方式立为官方推荐的标准查询方式,HQL查询在涵盖 Criteria查询的所有功能的前提下,提供了类似标准SQL语句的查询方式,同时也提供了更加面向对象的封装。
sql只是结构化查询语言,只是面向数据检索,不具有面向对象的特征,所以HQL更加符合开发标准!参考资料:露兜博客
数据库中“hql和sql”的区别是什么?
,其实HQL最终还是会转化成SQL语句,项目里使用HQL语句应该是为了标准规范化。
统计的数据:同一个表,同一个字段,不同属性,统计不同属性的记录数;
例如:有一个房间表格,如图所示:
现在我要做的是统计各种房间可用的数量分别是多少。
但是这个对于HQL语句是运行不同的,所以在DaoImp层,使用了查询SQL
另外:说明一下对于List无法直接调用属性的话,例如(#list.name,#list.password)
对于使用iterator,会自动遍历行数,所以使用s:property的时候,直接使用数组list的列数就可以了。
对于使用s:set
需要写明数组list的行与列
统计数据方面SQL与HQL
标签:size 表格 标准 不同的 面向 转化 分享 lis style
数据库中“hql和sql”的区别是什么?
,其实HQL最终还是会转化成SQL语句,项目里使用HQL语句应该是为了标准规范化。
统计的数据:同一个表,同一个字段,不同属性,统计不同属性的记录数;
例如:有一个房间表格,如图所示:
现在我要做的是统计各种房间可用的数量分别是多少。
但是这个对于HQL语句是运行不同的,所以在DaoImp层,使用了查询SQL
另外:说明一下对于List无法直接调用属性的话,例如(#list.name,#list.password)
对于使用iterator,会自动遍历行数,所以使用s:property的时候,直接使用数组list的列数就可以了。
对于使用s:set
需要写明数组list的行与列
统计数据方面SQL与HQL
标签:size 表格 标准 不同的 面向 转化 分享 lis style
hive和mysql的区别是什么?
hive和mysql的区别有:
1、查询语言不同:hive是hql语言,mysql是sql语句;
2、数据存储位置不同:hive是把数据存储在hdfs上,而mysql数据是存储在自己的系统中;
3、数据格式:hive数据格式可以用户自定义,mysql有自己的系统定义格式;
4、数据更新:hive不支持数据更新,只可以读,不可以写,而sql支持数据更新;
5、索引:hive没有索引,因此查询数据的时候是通过maprece很暴力的把数据都查询一遍,也造成了hive查询数据速度很慢的原因,而mysql有索引。
hive查询语言和sql的区别
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapRece 开发者的开发自定义的 mapper 和 recer 来处理内建的 mapper 和 recer 无法完成的复杂的分析工作。
Hive 采用类SQL 的查询方式,将SQL 查询转换为MapRece 的job 在Hadoop集群上执行
hive查询语言和sql的区别
Hive是建立在 Hadoop 上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapRece 开发者的开发自定义的 mapper 和 recer 来处理内建的 mapper 和 recer 无法完成的复杂的分析工作。
Hive 采用类SQL 的查询方式,将SQL 查询转换为MapRece 的job 在Hadoop集群上执行
PL/SQL和sql是什么区别?
PL/SQL和sql的区别:
1、结构不同:
PL/SQL:包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数。
SQL:是在Microsoft SQL Server 和Sybase SQL Server 上的ANSI SQL 实作,与Oracle 的PL/SQL 性质相近(不只是实作ANSI SQL,也为自身资料库系统的特性提供实作支援)。
2、功能不同
PL/SQL在开发和管理上都比较方便,还支持导入。导出功能, 不过需要安装Oracle的客户端,并且需要配置tnsname。
Oracle psql dev是Oracle自带的工具,11g已经内嵌到数据库的安装里去了,也提供比较好的开发和管理的功能。
3、定义不同
PL/SQL:也是一种程序语言,叫做过程化SQL语言(Proceral Language/SQL)。
sql:一般指结构化查询语言。
参考资料:百度百科 plsql
百度百科 SQL
hive是什么意思
Hive是一个基于Hadoop的数据仓库工具,用于处理大型分布式数据集,允许用户使用类似于SQL的语言来管理和查询数据。
1.概述
Hive是一个数据仓库工具,可以将数据存储在Hadoop文件系统中,并使用SQL风格的查询语言对这些数据进行操作。它可以轻松地处理结构化、半结构化和非结构化数据。Hive使用类似于SQL的语言来查询数据,这使得对于熟悉SQL的开发人员而言非常容易上手。
2.架构
Hive的架构有三层:用户界面、驱动程序和执行引擎。用户界面负责接受HiveQL语句,驱动程序将这些语句转换为MapRece任务,并将执行结果返回给用户界面。执行引擎是MapRece框架,它执行对数据的实际查询。
在Hive的架构中,还包括Metastore和Hive Server。Metastore维护着关于表、分区和表的元数据信息(如字段名称、类型、分区信息等),而Hive Server则负责进程间通信。
3.数据类型
Hive支持大多数SQL标准数据类型,例如字符串、整型、浮点型等。此外,Hive还有一些自定义的数据类型如ARRAY、MAP和STRUCT。
4.HiveQL
Hive的查询语言被称为HiveQL,它是类似于SQL的查询语言,支持大多数SQL标准的查询语句。HiveQL还支持自定义函数和用户定义聚合函数,这有助于进行高级数据处理。
5.Hive与Hadoop生态系统
Hive紧密集成了Hadoop的生态系统,可以轻松地将其与其他工具集成使用。例如,Hive可以通过Sqoop来将关系数据库中的数据导入到Hadoop中,也可以通过HBase来查询实时数据。
骅佗教育还为您提供以下相关内容希望对您有帮助:
hive和mysql的区别
hive和mysql的区别:1、设计目标不同:Hive是Apache基金会的开源项目,主要用于大数据的查询与分析,它提供的是一种类SQL的查询语言——HiveQL,使得熟悉SQL的用户可以快速上手;而MySQL则是一种关系型数据库管理系统,主要用于存储、处理以及检索数据。2、数据存储方式不同:Hive通常运行在Hadoop分布式文件...
hive和mysql的区别是什么?
Hive使用的是HiveQL,其语言结构更接近SQL,但与MySQL等关系型数据库的查询语言有所不同。HiveQL是为大规模数据处理设计的,旨在方便用户进行数据查询和分析操作。而MySQL使用的是标准的SQL语言进行数据的查询和操作。区别三:数据特性与处理机制 Hive支持的数据类型相对简单,主要用于处理结构化数据。由于其...
hive工作时,数据是存储在mysql还是hdfs
hive是把数据存储在hdfs上,而mysql数据是存储在自己的系统中;数据格式不同:hive数据格式可以用户自定义,mysql有自己的系统定义格式;数据更新不同:hive不支持数据更新,只可以读,不可以写,而sql支持数据更新。其次,Hive中所有的数据都存储在HDFS中,Hive中包含以下数据模型:表(Table),外部表(Exter...
数据分析软件
1、Apache Hive Hive是一个建立在Hadoop上的开源数据仓库基础设施,通过Hive可以很容易的进行数据的ETL,对数据进行结构化处理,并对Hadoop上大数据文件进行查询和处理等。 Hive提供了一种简单的类似SQL的查询语言—HiveQL,这为熟悉SQL语言的用户查询数据提供了方便。2、SPSS SPSS for Windows软件分为若干功能...
hive能存储数据吗
4、国内最常用的是一款基于Hadoop的开源数据仓库,名为Hive,它可以对存储在HDFS的文件数据进行查询、分析。Hive对外可以提供HiveQL,这是类似于SQL语言的一种查询语言。5、Pig与HIVE工具类似,都可以用类sql语言对数据进行处理。但是他们应用场景有区别,Pig用于数据仓库数据的ETL,HIVE用于数仓数据分析。
hive主要用于解决哪类数据查询问题
Hive主要用于解决大规模数据集上的批量数据查询和分析问题。在大数据领域,Hive提供了一个基于Hadoop的数据仓库基础设施,使得用户能够使用类SQL的查询语言HiveQL(Hive Query Language)来对数据进行查询和分析。Hive特别适合处理非结构化和半结构化数据,如日志文件、网页点击流等,这些数据往往以文本形式存储...
hive是什么意思
Hive的查询语言被称为HiveQL,它是类似于SQL的查询语言,支持大多数SQL标准的查询语句。HiveQL还支持自定义函数和用户定义聚合函数,这有助于进行高级数据处理。5.Hive与Hadoop生态系统 Hive紧密集成了Hadoop的生态系统,可以轻松地将其与其他工具集成使用。例如,Hive可以通过Sqoop来将关系数据库中的数据导入...
hive主要用于解决哪类数据查询问题
Hive是建立在Hadoop之上的数据仓库工具,可以存储、查询和分析大规模的数据集。它能够处理结构化和半结构化的数据,使得数据分析师和数据科学家能够轻松地探索和分析数据。Hive通过将SQL查询转化为MapReduce任务来执行数据查询,这意味着即使对于非编程背景的人员,也能通过类SQL的查询语言HiveQL进行数据查询...
pig和hive有什么不同啊?hadoop
差异一:架构和编程模型 Pig是一个基于过程的语言,具有强大的数据流编程模型。它允许用户编写一种类似于SQL的脚本语言来处理数据流,这些脚本易于编写和理解。而Hive则建立在Hadoop之上,提供了一个更为面向SQL的查询接口——HiveQL,它允许数据开发者使用SQL进行数据查询和分析。Hive更接近传统的数据库查询...
一般来说大数据分析师需要会什么技能?
(1)会使用Hive的SQL方法HiveQL来汇总、查询和分析存储在Hadoop分布式文件系统上的大数据集合。知道Hive如何在Hadoop生态系统进行数据分析工作。(2)会一些SPSS modeler基础应用,这部分技能对应数据建模分析师。(3)使用R语言进行数据集的创建和数据的管理等工作;会使用R语言数据可视化操作,让学员学会如何用R...