HiveQL与SQL区别

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/452782.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django项目--csrf攻击

1.案例流程图&#xff1a; 2.django防止csrf的方式&#xff1a; 1 ) Django中默认打开csrf中间件。settings.py文件中&#xff1a; MIDDLEWARE_CLASSES (django.contrib.sessions.middleware.SessionMiddleware,django.middleware.common.CommonMiddleware,django.middlewar…

数据库管理系统与数据库系统

数据库&#xff1a;容纳数据的仓库。数据库系统&#xff1a;数据库、数据库管理系统、硬件、操作人员的合在一起的总称。数据库管理系统&#xff1a;用来管理数据及数据库的系统。数据库系统包含数据库管理系统、数据库及数据库开发工具所开发的软件&#xff08;数据库应用系统…

如果你扯了团队后腿,你应该内疚

现在&#xff0c;我看到很多人扯了团队的后腿&#xff0c;一句道歉就了事&#xff0c;更甚者就以另一种方式来表达&#xff1a;你们没有给我足够的培训&#xff0c;你们的工作方式我无法接受&#xff0c;我工资太低&#xff0c;你们做的事情不够酷&#xff0c;你们做的事情不赚…

mysql count(*),count(1)与count(column)区别

2019独角兽企业重金招聘Python工程师标准>>> count(*)对行的数目进行计算&#xff0c;包含NULL count(column)对特定的列的值具有的行数进行计算&#xff0c;不包含NULL值。 count()还有一种使用方式&#xff0c;count(1)这个用法和count(*)的结果是一样的。 性能问…

Java IO API记录

文件路径&#xff1a; public static final String FILEPATH File.separator"Users" File.separator"xuminzhe"File.separator"Documents"File.separator"io"; 1.创建文件 public static void main(String[] args) {File filenew File…

Flask项目--预防csrf攻击原理

1.CSRF机制原理 2.csrf成功攻击示意图 3.csrf防御

数据管理技术的发展过程

人工管理阶段&#xff08;20世纪50年代中之前&#xff09;文件系统阶段&#xff08;20世纪50年代末--60年代中&#xff09;数据库系统阶段&#xff08;20世纪60年代末--现在&#xff09;

一次失败的项目经理招聘经验

成功的原因有许多种&#xff0c;而失败的原因往往就那么几种。人们更愿意去讨论自己是如何成功的&#xff0c;确不太情愿开诚布公的去剖析自己是如何失败的。而时刻去反思自己失败的案例&#xff0c;我们会进步的更快&#xff01; 和大家分享一个2010年发生在我身边的真实案例&…

NG客制项目下的I18n国际化标准方案

方案选择 国际化i18n ​ 这个方案是最成熟的&#xff0c;同时也是官方的方案&#xff0c;但是这样一个标准化的方案同时意味着灵活度不够。当需要划分feature module&#xff0c;需要客制化组件的时候&#xff0c;这个方案的实施的成本就会远远超过预期&#xff0c;因此在项目中…

Flsak项目--图片验证码

0. 图片验证码的使用流程 2.后端接口编写 verify_code.py中编写接口代码&#xff1a; # coding:utf-8from . import api from ihome.utils.captcha.captcha import captcha from ihome import redis_store, constants, db from flask import current_app, jsonify, make_respo…

数据库与数据库管理系统

数据库是长期存储在计算机内有组织的大量的共享的数据集合。可以供各种用户共享&#xff0c;具有最小冗余度和较高的数据独立性。数据库管理系统在数据库建立、运用和维护时对数据库进行统一控制&#xff0c;以保证数据的完整性、安全性&#xff0c;并在多用户同时使用数据库时…

如何提高团队情商

在公司发展中&#xff0c;总裁&#xff0c;总监&#xff0c;经理&#xff0c;项目经理&#xff0c;他们对团队的建设意义重大&#xff0c;工作很重要&#xff0c;但团队的情商才更重要&#xff0c;笔者公司的一个团队&#xff0c;三十多个人就像一个人&#xff0c;命令所到之处…

ubuntu java classpath 设置_在Ubuntu中正确设置java classpath和java_home

我有错误Exception in thread"main" java.lang.NoClassDefFoundError:当我尝试在Ubuntu上运行编译类时。我使用的是一个非常简单的helloworld示例&#xff0c;互联网上已有数百万的响应表明我的classpath和java_home变量设置错误。但是&#xff0c;我已经将etc/envir…

Polo the Penguin and Matrix

Little penguin Polo has an n  m matrix, consisting of integers. Lets index the matrix rows from 1 to n from top to bottom and lets index the columns from 1 to m from left to right. Lets represent the matrix element on the intersection of row i and column…

趣解 XSS和CSRF的原理

参考文章&#xff1a;趣解 XSS和CSRF的原理 推荐网站&#xff1a;古黑论 感谢作者分享&#xff01;

js异步解决方案 --- 回调函数 vs promise vs generater/yield vs async/await

javascript -- 深度解析异步解决方案 高级语言层出不穷, 然而唯 js 鹤立鸡群, 这要说道js的设计理念, js天生为异步而生, 正如布道者朴灵在 node深入浅出--(有兴趣的可以读一下, 很有意思^_^) , 异步很早就存在于操作系统的底层, 意外的是&#xff0c;在绝大多数高级编程语言中…

什么是TPDU

TPDU,全称Transport Protocol Data Unit&#xff0c;是指传送协议数据单元。代表从一个传输实体发送至另一个传输实体的消息。 我们需要为传输实体之间交换的数据单元起一个更加一般化的名字&#xff0c;TCP的术语是数据段&#xff0c;它很容易混淆&#xff0c;而且在TCP领域之…

sql注入基本原理

1. 参考文献&#xff1a; 趣解SQL注入原理 Sql注入基本原理 2.参考书籍

项目管理杂谈-员工的积极性在哪里?

项目开发过程中&#xff0c;每每有人感叹&#xff0c;曾几何时&#xff0c;队伍如何好带&#xff0c;如何好用&#xff0c;而如今&#xff0c;人心繁杂&#xff0c;队伍不好带了。很多人的想法是“人望高处走”&#xff0c;不停的寻找待遇及其他方面更好的单位。其实&#xff0…

centos7硬盘分区

首先在虚拟机的设置中为系统添加硬盘 使用fdisk -l /dev/sdb 查看未分区的硬盘 fdisk -l /dev/sda 这是已经分区好得 接下来我们就要对sdb进行分区: 首先使用fdisk /dev/sdb 接着输入m可以看到详细命令 进行添加分区 已经建立好4个主分区&#xff0c;在建立时会看到以下 删除…