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.b2

2、分号字符
•分号是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('\073',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 syntax is only available starting in version 0.8。INSERT INTO就是在表或分区中追加数据。

6、hive支持嵌入mapreduce程序,来处理复杂的逻辑,如:
FROM (
MAP doctext USING 'python wc_mapper.py' AS (word, cnt)
FROM docs
CLUSTER BY word
) a
REDUCE word, cnt USING 'python wc_reduce.py';
--doctext: 是输入
--word, cnt: 是map程序的输出

--CLUSTER BY: 将wordhash后,又作为reduce程序的输入

并且map程序、reduce程序可以单独使用,如:
FROM (
FROM session_table
SELECT sessionid, tstamp, data
DISTRIBUTE BY sessionid SORT BY tstamp
) a
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 DELIMITED
FIELDS TERMINATED BY '/t'
STORED AS TEXTFILE;
加载数据到表中:
LOAD DATA LOCAL INPATH 'ml-data/u.data'
OVERWRITE INTO TABLE u_data;

统计数据总量:
SELECT COUNT(1) FROM u_data;

现在做一些复杂的数据分析:
创建一个 weekday_mapper.py: 文件,作为数据按周进行分割
import sys
import datetime

for 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 DELIMITED
FIELDS TERMINATED BY '/t';
//将python文件加载到系统
add FILE weekday_mapper.py;

将数据按周进行分割
INSERT OVERWRITE TABLE u_data_new
SELECT
TRANSFORM (userid, movieid, rating, unixtime)
USING 'python weekday_mapper.py'
AS (userid, movieid, rating, weekday)
FROM u_data;

SELECT weekday, COUNT(1)
FROM u_data_new
GROUP 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;

转载于:https://www.cnblogs.com/camilla/p/8986469.html

HiveQL与SQL区别相关推荐

  1. oracle类型sql转为mysql_Oracle和MySql之间SQL区别(等效转换以及需要注意的问题)...

    >本篇博文是Oracle和MySQL之间的等效SQL转换和不同,目前市面上没有转换两种SQL的工具,小编觉得以后也不一定会有,于是在业余时间整理了一下,如果有什么错误之处请留言告知,小编也是刚 ...

  2. msde和sql 区别_对MSDE SQL说再见

    msde和sql 区别 Ok all! I just found this, so forgive me if you've found it already. 好的! 我刚刚找到了,请原谅我. Ap ...

  3. mysql oracle sql区别吗_mysql数据库的SQL语句和oracle的有什么区别?详细点

    匿名用户 1级 2017-08-20 回答 区别如下: 1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Or ...

  4. Entity Framework (EF)/Linq To entity/ ESQL(entity sql)区别 ADO.NET Entity Framework:来自微软官方的ORM框架

    长久以来,程序员和数据库总是保持着一种微妙的关系,在商用应用程序中,数据库一定是不可或缺的元件,这让程序员一定要为了连接与访问数据库而去学习 SQL 指令,至少对于我而言,我觉得这是一个很不爽的事情. ...

  5. spss与python和sql区别_Python/Excel/SPSS/SQL数据处理方法比较之2 - 数据查看

    继续这个系列.我们导入了数据,接下来做一下基本的查看. Python 我们的处理对象依然是DataFrame对象df. 首先使用head()函数(或tail()函数)查看最前(最后)的5条记录,获取粗 ...

  6. spss与python和sql区别_数据分析中的Excel、R、Python、SPSS、SAS和SQL

    作为一直想入门数据分析的童鞋们来说,如何选定一门面向数据分析的编程语言或工具呢?注意是数据分析,而不是大数据哦,数据分析是基础了. 数据分析的工具千万种,综合起来万变不离其宗.无非是数据获取.数据存储 ...

  7. python和java还有sql区别_为什么SQL聚合函数比Python和Java(或Poor Man的OLAP)慢得多,

    Postgres做得比看起来好多了(保持数据一致性开始!) 如果值不必是100%,或者如果表很少更新,但是您经常运行此计算,则可能需要查看物化视图以加速. (注意,我没有在Postgres使用物化视图 ...

  8. oracle select @@identity,SQL区别@@IDENTITY,SCOPE_IDENTITY和IDENT_CURRENT

    预备知识:SQLServer的IDENTITY关键字 IDENTITY关键字代表的是一个函数,而不是identity属性.在access里边没有这个函数,所以在access不能用这个语句.语法:ide ...

  9. Hive-SQL与SQL的区别

    1.Hive不支持等值连接(hive中不能使用省去join的写法) 2.分号字符(hive对分号的识别没有那么智能,有时需要进行转义 ":" --> "\073&q ...

最新文章

  1. Map json数据解析
  2. plotly基于dataframe数据绘制散点图(scatter plot)
  3. Ubuntu 17.4下如何安装和配置flash player
  4. 160921、React入门教程第一课--从零开始构建项目
  5. 关于How to do/What to do
  6. sqlserver 储存过程 批量更新_大白菜怎么储存过冬,好吃还不烂?掌握方法,其实很简单...
  7. Non-static field ‘func1‘ cannot be referenced from from a static context
  8. 史上超详细的flask_sqlalchemy连接mysql数据库
  9. fullcalendar 获得当前视图年月_?多视图立体视觉: CVPR 2019与AAAI 2020 上的ACMH、ACMM及ACMP算法介绍...
  10. 免费PDF阅读器都是坑?这些开源神器我可是恨不得所有人都知道
  11. Github中那些迷之缩写?LGTM?
  12. 计算机的物理地址怎么写,电脑物理地址怎么查
  13. 林业调查规划设计资质怎么办理?
  14. ping回显无法访问目标网络network unreachable故障模拟
  15. 运营笔记:微信推广运营的这些中肯建议,请收藏!
  16. java.nio.file.NoSuchFileException: C:\Users\ADMINI~1\AppData\Local\Temp\undertow....解决方法
  17. 切割字符串长度php,C++_C语言中计算字符串长度与分割字符串的方法,C语言strlen()函数:返回字符串 - phpStudy...
  18. Kinect虚拟试衣间开发(4)-2D衣物试穿
  19. PBX与IPPBX孰好
  20. 用H5开发微信还是开发APP?

热门文章

  1. CCIE-LAB-第十四篇-PIM Sparst+IGMP
  2. 【机器学习】 - keras中的模型可视化plot_model模块(含依赖包pydot和graphviz的详细安装过程与注意事项)
  3. 【PAT - 甲级1095】Cars on Campus (30分)(模拟)
  4. 【POJ - 3159】Candies (差分约束,卡SPFA)
  5. 【ZOJ - 3963】Heap Partition (STLset,二叉树的性质,构造,贪心,思维)
  6. 0.《沉浸式线性代数》:前言
  7. 1.Hello,Python
  8. python bind sock_python 在bind端口之后创建的socket如果不关闭的话会被回收吗?
  9. code vs 代码格式化排版_23行代码,教你用python实现百度翻译!(建议收藏)
  10. c语言标识符的文法表示,第三章文法和语法[lly]3.ppt