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.pswp.cn/news/452782.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452782.shtml
英文地址,請注明出處:http://en.pswp.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;在建立時會看到以下 刪除…