Ⅰ Hive基礎之Hive是什麼以及Hive使用場景
Hive是什麼
1)Hive 是建立在Hadoop (HDFS/MR)上的用於管理和查詢結果化/非結構化的數據倉庫;
2)一種可以存儲、查詢和分析存儲在Hadoop 中的大規模數據的機制;
3)Hive 定義了簡單的類sql 查詢語言,稱為HQL,它允許熟悉SQL 的用戶查詢數據;
4)允許用Java開發自定義的函數UDF來處理內置無法完成的復雜的分析工作;
5)Hive沒有專門的數據格式(分隔符等可以自己靈活的設定);
ETL的流程(Extraction-Transformate-Loading):將關系型資料庫的數據抽取到HDFS上,hive作為數據倉庫,經過hive的計算分析後,將結果再導入到關系型資料庫的過程。
Hive是構建在Hadoop之上的數據倉庫
1)使用HQL作為查詢介面;
2)使用HDFS作為存儲;
3)使用MapRece作為計算;
Hive應用場景
數據源:
1)文件數據,如中國移動某設備每天產生大量固定格式的文件;
2)資料庫
以上兩種不同的數據源有個共同點:要使用hive,那麼必須要將數據放到hive中;通常採用如下兩種方式:
1)文件數據:load到hive
2)資料庫: sqoop到hive
數據的離線處理;
hive的執行延遲比較高,因為hive常用於數據分析的,對實時性要求不高;
hive優勢在於處理大數據,對於處理小數據沒有優勢,因為hive的執行延遲比較高。
處理數據存放在hive表中,那麼前台系統怎麼去訪問hive的數據呢?
先將hive的處理結果數據轉移到關系型資料庫中才可以,sqoop就是執行導入導出的操作
Ⅱ hivesql怎麼獲取上一個月月份
hivesql sql — 獲取指定hive表或指定文件所hive表DDL按區則默認執行近7區DDL同table支持符合sql語則表達式表匹配則提示用戶選擇(使用file則自關閉該交互功能)。
hive是基於Hadoop的一個數據倉庫工具,可以將結構化的數據文件映射為一張資料庫表,並提供完整的sql查詢功能,可以將sql語句轉換為MapRece任務進行運行。其優點是學習成本低,可以通過類SQL語句快速實現簡單的MapRece統計,不必開發專門的MapRece應用,十分適合數據倉庫的統計分析。另外一個是Windows注冊表文件。
Ⅲ 程序中的Hive具體是干什麼用的呢
Hive是基於Hadoop平台的數倉工具,具有海量數據存儲、水平可擴展、離線批量處理的優點,解決了傳統關系型數倉不能支持海量數據存儲、水平可擴展性差等問題,但是由於Hive數據存儲和數據處理是依賴於HDFS和MapRece,因此在Hive進行數據離線批量處理時,需將查詢語言先轉換成MR任務,由MR批量處理返回結果,所以Hive沒法滿足數據實時查詢分析的需求。
Hive是由FaceBook研發並開源,當時FaceBook使用Oracle作為數倉,由於數據量越來越大,Oracle數倉性能越來越差,沒法實現海量數據的離線批量分析,因此基於Hadoop研發Hive,並開源給Apacha。
由於Hive不能實現數據實時查詢交互,Hbase可提供實時在線查詢能力,因此Hive和Hbase形成了良性互補。Hbase因為其海量數據存儲、水平擴展、批量數據處理等優點,也得到了廣泛應用。
Pig與HIVE工具類似,都可以用類sql語言對數據進行處理。但是他們應用場景有區別,Pig用於數據倉庫數據的ETL,HIVE用於數倉數據分析。
從架構圖當中,可看出Hive並沒有完成數據的存儲和處理,它是由HDFS完成數據存儲,MR完成數據處理,其只是提供了用戶查詢語言的能力。Hive支持類sql語言,這種SQL稱為Hivesql。用戶可用Hivesql語言查詢,其驅動可將Hivesql語言轉換成MR任務,完成數據處理。
【Hive的訪問介面】
CLI:是hive提供的命令行工具
HWI:是Hive的web訪問介面
JDBC/ODBC:是兩種的標準的應用程序編程訪問介面
Thrift Server:提供異構語言,進行遠程RPC調用Hive的能力。
因此Hiv具備豐富的訪問介面能力,幾乎能滿足各種開發應用場景需求。
【Driver】
是HIVE比較核心的驅動模塊,包含編譯器、優化器、執行器,職責為把用戶輸入的Hivesql轉換成MR數據處理任務
【Metastore】
是HIVE的元數據存儲模塊,數據的訪問和查找,必須要先訪問元數據。Hive中的元數據一般使用單獨的關系型資料庫存儲,常用的是Mysql,為了確保高可用,Mysql元資料庫還需主備部署。
架構圖上面Karmasphere、Hue、Qubole也是訪問HIVE的工具,其中Qubole可遠程訪問HIVE,相當於HIVE作為一種公有雲服務,用戶可通過互聯網訪問Hive服務。
Hive在使用過程中出現了一些不穩定問題,由此發展出了Hive HA機制,
Ⅳ hive動態分區參數配置 利用sql怎麼設置
靜態分區SP(static partition)
動態分區DP(dynamic partition)
靜態分區與動態分區的主要區別在於靜態分區是手動指定,而動態分區是通過數據來進行判斷。詳細來說,靜態分區的列實在編譯時期,通過用戶傳遞來決定的;動態分區只有在SQL執行時才能決定。
二)實戰演示如何在Hive中使用動態分區
1、創建一張分區表,包含兩個分區dt和ht表示日期和小時
[sql] view plain
CREATE TABLE partition_table001
(
name STRING,
ip STRING
)
PARTITIONED BY (dt STRING, ht STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY "\t";
2、啟用hive動態分區,只需要在hive會話中設置兩個參數:
Ⅳ hive sql的語法幫助在哪
Hive 是基於Hadoop 構建的一套數據倉庫分析系統,它提供了豐富的SQL查詢方式來分析存儲在Hadoop 分布式文件系統中的數據,可以將結構化的數據文件映射為一張資料庫表,並提供完整的SQL查詢功能,可以將SQL語句轉換為MapRece任務進行運行,通過自己的SQL 去查詢分析需要的內容,這套SQL 簡稱Hive SQL,使不熟悉maprece 的用戶很方便的利用SQL 語言查詢,匯總,分析數據。而maprece開發人員可以把己寫的mapper 和recer 作為插件來支持Hive 做更復雜的數據分析。
它與關系型資料庫的SQL 略有不同,但支持了絕大多數的語句如DDL、DML 以及常見的聚合函數、連接查詢、條件查詢。HIVE不適合用於聯機online)事務處理,也不提供實時查詢功能。它最適合應用在基於大量不可變數據的批處理作業。
HIVE的特點:可伸縮(在Hadoop的集群上動態的添加設備),可擴展,容錯,輸入格式的鬆散耦合。
Hive 的官方文檔中對查詢語言有了很詳細的描述,請參考:http://wiki.apache.org/hadoop/Hive/LanguageManual ,本文的內容大部分翻譯自該頁面,期間加入了一些在使用過程中需要注意到的事項。
1. DDL 操作
DDL
?建表
?刪除表
?修改表結構
?創建/刪除視圖
?創建資料庫
?顯示命令
建表:
CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name
[(col_name data_type [COMMENT col_comment], ...)]
[COMMENT table_comment]
[PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)]
[CLUSTERED BY (col_name, col_name, ...)
[SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS]
[ROW FORMAT row_format]
[STORED AS file_format]
[LOCATION hdfs_path]
?CREATE TABLE 創建一個指定名字的表。如果相同名字的表已經存在,則拋出異常;用戶可以用 IF NOT EXIST 選項來忽略這個異常
?EXTERNAL 關鍵字可以讓用戶創建一個外部表,在建表的同時指定一個指向實際數據的路徑(LOCATION)
?LIKE 允許用戶復制現有的表結構,但是不復制數據
?COMMENT可以為表與欄位增加描述
?ROW FORMAT
DELIMITED [FIELDS TERMINATED BY char] [COLLECTION ITEMS TERMINATED BY char]
[MAP KEYS TERMINATED BY char] [LINES TERMINATED BY char]
| SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)]
用戶在建表的時候可以自定義 SerDe 或者使用自帶的 SerDe。如果沒有指定 ROW FORMAT 或者 ROW FORMAT DELIMITED,將會使用自帶的 SerDe。在建表的時候,用戶還需要為表指定列,用戶在指定表的列的同時也會指定自定義的 SerDe,Hive 通過 SerDe 確定表的具體的列的數據。
?STORED AS
SEQUENCEFILE
| TEXTFILE
| RCFILE
| INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname
如果文件數據是純文本,可以使用 STORED AS TEXTFILE。如果數據需要壓縮,使用 STORED AS SEQUENCE 。
創建簡單表:
hive> CREATE TABLE pokes (foo INT, bar STRING);
創建外部表:
CREATE EXTERNAL TABLE page_view(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User',
country STRING COMMENT 'country of origination')
COMMENT 'This is the staging page view table'
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\054'
STORED AS TEXTFILE
LOCATION '';
建分區表
CREATE TABLE par_table(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(date STRING, pos STRING)
ROW FORMAT DELIMITED 『\t』
FIELDS TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
建Bucket表
CREATE TABLE par_table(viewTime INT, userid BIGINT,
page_url STRING, referrer_url STRING,
ip STRING COMMENT 'IP Address of the User')
COMMENT 'This is the page view table'
PARTITIONED BY(date STRING, pos STRING)
CLUSTERED BY(userid) SORTED BY(viewTime) INTO 32 BUCKETS
ROW FORMAT DELIMITED 『\t』
FIELDS TERMINATED BY '\n'
STORED AS SEQUENCEFILE;
創建表並創建索引欄位ds
hive> CREATE TABLE invites (foo INT, bar STRING) PARTITIONED BY (ds STRING);
復制一個空表
CREATE TABLE empty_key_value_store
LIKE key_value_store;
例子
create table user_info (user_id int, cid string, ckid string, username string)
row format delimited
fields terminated by '\t'
lines terminated by '\n';
導入數據表的數據格式是:欄位之間是tab鍵分割,行之間是斷行。
及要我們的文件內容格式:
100636 100890 c5c86f4cddc15eb7 yyyvybtvt
100612 100865 97cc70d411c18b6f gyvcycy
100078 100087 ecd6026a15ffddf5 qa000100
顯示所有表:
hive> SHOW TABLES;
按正條件(正則表達式)顯示表,
hive> SHOW TABLES '.*s';
修改表結構
?增加分區、刪除分區
?重命名表
?修改列的名字、類型、位置、注釋
?增加/更新列
?增加表的元數據信息
表添加一列 :
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
添加一列並增加列欄位注釋
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
更改表名:
hive> ALTER TABLE events RENAME TO 3koobecaf;
刪除列:
hive> DROP TABLE pokes;
增加、刪除分區
?增加
ALTER TABLE table_name ADD [IF NOT EXISTS] partition_spec [ LOCATION 'location1' ] partition_spec [ LOCATION 'location2' ] ...
partition_spec:
: PARTITION (partition_col = partition_col_value, partition_col = partiton_col_value, ...)
?刪除
ALTER TABLE table_name DROP partition_spec, partition_spec,...
重命名表
?ALTER TABLE table_name RENAME TO new_table_name
修改列的名字、類型、位置、注釋:
?ALTER TABLE table_name CHANGE [COLUMN] col_old_name col_new_name column_type [COMMENT col_comment] [FIRST|AFTER column_name]
?這個命令可以允許改變列名、數據類型、注釋、列位置或者它們的任意組合
表添加一列 :
hive> ALTER TABLE pokes ADD COLUMNS (new_col INT);
添加一列並增加列欄位注釋
hive> ALTER TABLE invites ADD COLUMNS (new_col2 INT COMMENT 'a comment');
增加/更新列
?ALTER TABLE table_name ADD|REPLACE COLUMNS (col_name data_type [COMMENT col_comment], ...)
? ADD是代表新增一欄位,欄位位置在所有列後面(partition列前)
REPLACE則是表示替換表中所有欄位。
增加表的元數據信息
?ALTER TABLE table_name SET TBLPROPERTIES table_properties table_properties:
:[property_name = property_value…..]
?用戶可以用這個命令向表中增加metadata
改變表文件格式與組織
?ALTER TABLE table_name SET FILEFORMAT file_format
?ALTER TABLE table_name CLUSTERED BY(userid) SORTED BY(viewTime) INTO num_buckets BUCKETS
附上出處鏈接:http://blog.itpub.net/26613085/viewspace-1224043/
Ⅵ 使用hive sql 連接表查詢時,會產生中間表,這些中間表這怎麼存儲的
沒明白你說的,但是我想應該是這樣!
有三張表。 學生、課程、老師
s(sid、sname、sex、age) 代表 學生(學生號、姓名、性別、年齡)
c(cid、sid 、cname、grade) 課程(課程號、學生號、課程名、成績)
t(tid、tname、cid) 老師 (教師號、教師姓名、課程號)
select * from student,course,teacher
where s.sid = c.sid and c.cid = t.cid ;
三表連接就完成了。
當然還有其他方式建立三表連接。我這種方式最簡單直觀了。
希望對你有幫助!
Ⅶ hive sql 中 怎麼用變數
第一步先准備測試表和測試數據用於後續測試:
hive> create database test;
OK
Time taken: 2.606 seconds
然後執行建表和導入數據的sql文件:
[[email protected] testHivePara]$ hive -f student.sql
Hive history file=/tmp/crazyant.net/hive_job_log_czt_201309131615_1720869864.txt
OK
Time taken: 2.131 seconds
OK
Time taken: 0.878 seconds
Copying data from file:/home/users/czt/testdata_student
Copying file: file:/home/users/czt/testdata_student
Loading data to table test.student
OK
Ⅷ hive sql 優化的常用手段有哪些
1、join連接時的優化:當三個或多個以上的表進行join操作時,如果每個on使用相同的欄位連接時只會產生一個maprece。
2、join連接時的優化:當多個表進行查詢時,從左到右表的大小順序應該是從小到大。原因:hive在對每行記錄操作時會把其他表先緩存起來,直到掃描最後的表進行計算
3、在where字句中增加分區過濾器。
4、當可以使用left semi join 語法時不要使用inner join,前者效率更高。原因:對於左表中指定的一條記錄,一旦在右表中找到立即停止掃描。
Ⅸ hive支持以下哪些sql特性
一、關系運算:1. 等值比較: =
語法:A=B
操作類型:所有基本類型
描述: 如果表達式A與表達式B相等,則為TRUE;否則為FALSE
舉例:
hive>select 1 from lxw_al where 1=1;
1
2. 不等值比較: <>
語法: A <> B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A與表達式B不相等,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 1 <> 2;
1
3. 小於比較: <
語法: A < B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A小於表達式B,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 1 < 2;
1
4. 小於等於比較: <=
語法: A <= B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A小於或者等於表達式B,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 1 <= 1;
1
5. 大於比較: >
語法: A > B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A大於表達式B,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 2 > 1;
1
6. 大於等於比較: >=
語法: A >= B
操作類型: 所有基本類型
描述: 如果表達式A為NULL,或者表達式B為NULL,返回NULL;如果表達式A大於或者等於表達式B,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where 1 >= 1;
1
注意:String的比較要注意(常用的時間比較可以先to_date之後再比較)
hive> select* from lxw_al;
OK
201111120900:00:00 2011111209
hive> selecta,b,a<b,a>b,a=b from lxw_al;
201111120900:00:00 2011111209 false true false
7. 空值判斷: IS NULL
語法: A IS NULL
操作類型: 所有類型
描述: 如果表達式A的值為NULL,則為TRUE;否則為FALSE
舉例:
hive> select1 from lxw_al where null is null;
1
8. 非空判斷: IS NOTNULL
語法: A IS NOT NULL
操作類型: 所有類型
描述: 如果表達式A的值為NULL,則為FALSE;否則為TRUE
舉例:
hive> select1 from lxw_al where 1 is not null;
1
9. LIKE比較: LIKE
語法: A LIKE B
操作類型: strings
描述: 如果字元串A或者字元串B為NULL,則返回NULL;如果字元串A符合表達式B 的正則語法,則為TRUE;否則為FALSE。B中字元」_」表示任意單個字元,而字元」%」表示任意數量的字元。
舉例:
hive> select1 from lxw_al where 'football' like 'foot%';
1
hive> select1 from lxw_al where 'football' like 'foot____';
1
注意:否定比較時候用NOT ALIKE B
hive> select1 from lxw_al where NOT 'football' like 'fff%';
1
10. JAVA的LIKE操作: RLIKE
語法: A RLIKE B
操作類型: strings
描述: 如果字元串A或者字元串B為NULL,則返回NULL;如果字元串A符合JAVA正則表達式B的正則語法,則為TRUE;否則為FALSE。
舉例:
hive> select1 from lxw_al where 'footbar』 rlike '^f.*r$』;
1
注意:判斷一個字元串是否全為數字:
hive>select 1from lxw_al where '123456' rlike '^\\d+$';
1
hive> select1 from lxw_al where '123456aa' rlike '^\\d+$';
11. REGEXP操作: REGEXP
語法: A REGEXP B
操作類型: strings
描述: 功能與RLIKE相同
舉例:
hive> select1 from lxw_al where 'footbar' REGEXP '^f.*r$';
1
二、數學運算:1. 加法操作: +
語法: A + B
操作類型:所有數值類型
說明:返回A與B相加的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。比如,int + int 一般結果為int類型,而int + double 一般結果為double類型
舉例:
hive> select1 + 9 from lxw_al;
10
hive> createtable lxw_al as select 1 + 1.2 from lxw_al;
hive>describe lxw_al;
_c0 double
2. 減法操作: -
語法: A – B
操作類型:所有數值類型
說明:返回A與B相減的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。比如,int – int 一般結果為int類型,而int – double 一般結果為double類型
舉例:
hive> select10 – 5 from lxw_al;
5
hive> createtable lxw_al as select 5.6 – 4 from lxw_al;
hive>describe lxw_al;
_c0 double
3. 乘法操作: *
語法: A * B
操作類型:所有數值類型
說明:返回A與B相乘的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。注意,如果A乘以B的結果超過默認結果類型的數值范圍,則需要通過cast將結果轉換成范圍更大的數值類型
舉例:
hive> select40 * 5 from lxw_al;
200
4. 除法操作: /
語法: A / B
操作類型:所有數值類型
說明:返回A除以B的結果。結果的數值類型為double
舉例:
hive> select40 / 5 from lxw_al;
8.0
注意:hive中最高精度的數據類型是double,只精確到小數點後16位,在做除法運算的時候要特別注意
hive>select ceil(28.0/6.999999999999999999999) from lxw_allimit 1;
結果為4
hive>select ceil(28.0/6.99999999999999) from lxw_al limit1;
結果為5
5. 取余操作: %
語法: A % B
操作類型:所有數值類型
說明:返回A除以B的余數。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。
舉例:
hive> select 41 % 5 from lxw_al;
1
hive> select 8.4 % 4 from lxw_al;
0.40000000000000036
注意:精度在hive中是個很大的問題,類似這樣的操作最好通過round指定精度
hive> select round(8.4 % 4 , 2) from lxw_al;
0.4
6. 位與操作: &
語法: A & B
操作類型:所有數值類型
說明:返回A和B按位進行與操作的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。
舉例:
hive> select 4 & 8 from lxw_al;
0
hive> select 6 & 4 from lxw_al;
4
7. 位或操作: |
語法: A | B
操作類型:所有數值類型
說明:返回A和B按位進行或操作的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。
舉例:
hive> select 4 | 8 from lxw_al;
12
hive> select 6 | 8 from lxw_al;
14
8. 位異或操作: ^
語法: A ^ B
操作類型:所有數值類型
說明:返回A和B按位進行異或操作的結果。結果的數值類型等於A的類型和B的類型的最小父類型(詳見數據類型的繼承關系)。
舉例:
hive> select 4 ^ 8 from lxw_al;
12
hive> select 6 ^ 4 from lxw_al;
2
9.位取反操作: ~
語法: ~A
操作類型:所有數值類型
說明:返回A按位取反操作的結果。結果的數值類型等於A的類型。
舉例:
hive> select ~6 from lxw_al;
-7
hive> select ~4 from lxw_al;
-5
三、邏輯運算:1. 邏輯與操作: AND
語法: A AND B
操作類型:boolean
說明:如果A和B均為TRUE,則為TRUE;否則為FALSE。如果A為NULL或B為NULL,則為NULL
舉例:
hive> select 1 from lxw_al where 1=1 and 2=2;
1
2. 邏輯或操作: OR
語法: A OR B
操作類型:boolean
說明:如果A為TRUE,或者B為TRUE,或者A和B均為TRUE,則為TRUE;否則為FALSE
舉例:
hive> select 1 from lxw_al where 1=2 or 2=2;
1
3. 邏輯非操作: NOT
語法: NOT A
操作類型:boolean
說明:如果A為FALSE,或者A為NULL,則為TRUE;否則為FALSE
舉例:
hive> select 1 from lxw_al where not 1=2;
1
四、數值計算1. 取整函數: round
語法: round(double a)
返回值: BIGINT
說明: 返回double類型的整數值部分(遵循四捨五入)
舉例:
hive> select round(3.1415926) from lxw_al;
3
hive> select round(3.5) from lxw_al;
4
hive> create table lxw_al as select round(9542.158) fromlxw_al;
hive> describe lxw_al;
_c0 bigint
2. 指定精度取整函數: round
語法: round(double a, int d)
返回值: DOUBLE
說明: 返回指定精度d的double類型
舉例:
hive> select round(3.1415926,4) from lxw_al;
3.1416
3. 向下取整函數: floor
語法: floor(double a)
返回值: BIGINT
說明: 返回等於或者小於該double變數的最大的整數
舉例:
hive> select floor(3.1415926) from lxw_al;
3
hive> select floor(25) from lxw_al;
25
4. 向上取整函數: ceil
語法: ceil(double a)
返回值: BIGINT
說明: 返回等於或者大於該double變數的最小的整數
舉例:
hive> select ceil(3.1415926) from lxw_al;
4
hive> select ceil(46) from lxw_al;
46
5. 向上取整函數: ceiling
語法: ceiling(double a)
返回值: BIGINT
說明: 與ceil功能相同
舉例:
hive> select ceiling(3.1415926) from lxw_al;
4
hive> select ceiling(46) from lxw_al;
46
6. 取隨機數函數: rand
語法: rand(),rand(int seed)
返回值: double
說明: 返回一個0到1范圍內的隨機數。如果指定種子seed,則會等到一個穩定的隨機數序列
舉例:
hive> select rand() from lxw_al;
0.5577432776034763
hive> select rand() from lxw_al;
0.6638336467363424
hive> select rand(100) from lxw_al;
0.7220096548596434
hive> select rand(100) from lxw_al;
0.7220096548596434
7. 自然指數函數: exp
語法: exp(double a)
返回值: double
說明: 返回自然對數e的a次方
舉例:
hive> select exp(2) from lxw_al;
7.38905609893065
自然對數函數: ln
語法: ln(double a)
返回值: double
說明: 返回a的自然對數
舉例:
hive> select ln(7.38905609893065) from lxw_al;
2.0
8. 以10為底對數函數: log10
語法: log10(double a)
返回值: double
說明: 返回以10為底的a的對數
舉例:
hive> select log10(100) from lxw_al;
2.0
9. 以2為底對數函數: log2
語法: log2(double a)
返回值: double
說明: 返回以2為底的a的對數
舉例:
hive> select log2(8) from lxw_al;
3.0
10. 對數函數: log
語法: log(double base, double a)
返回值: double
說明: 返回以base為底的a的對數
舉例:
hive> select log(4,256) from lxw_al;
4.0
11. 冪運算函數: pow
語法: pow(double a, double p)
返回值: double
說明: 返回a的p次冪
舉例:
hive> select pow(2,4) from lxw_al;
16.0
12. 冪運算函數: power
語法: power(double a, double p)
返回值: double
說明: 返回a的p次冪,與pow功能相同
舉例:
hive> select power(2,4) from lxw_al;
16.0
13. 開平方函數: sqrt
語法: sqrt(double a)
返回值: double
說明: 返回a的平方根
舉例:
hive> select sqrt(16) from lxw_al;
4.0
14. 二進制函數: bin
語法: bin(BIGINT a)
返回值: string
說明: 返回a的二進制代碼表示
舉例:
hive> select bin(7) from lxw_al;
111
15. 十六進制函數: hex
語法: hex(BIGINT a)
返回值: string
說明: 如果變數是int類型,那麼返回a的十六進製表示;如果變數是string類型,則返回該字元串的十六進製表示
舉例:
hive> select hex(17) from lxw_al;
11
hive> select hex(『abc』) from lxw_al;
616263
16. 反轉十六進制函數: unhex
語法: unhex(string a)
返回值: string
說明: 返回該十六進制字元串所代碼的字元串
舉例:
hive> select unhex(『616263』)from lxw_al;
abc
hive> select unhex(『11』)from lxw_al;
-
hive> select unhex(616263) from lxw_al;
abc
17. 進制轉換函數: conv
語法: conv(BIGINT num, int from_base, int to_base)
返回值: string
說明: 將數值num從from_base進制轉化到to_base進制
舉例:
hive> select conv(17,10,16) from lxw_al;
11
hive> select conv(17,10,2) from lxw_al;
10001
18. 絕對值函數: abs
語法: abs(double a) abs(int a)
返回值: double int
說明: 返回數值a的絕對值
舉例:
hive> select abs(-3.9) from lxw_al;
3.9
hive> select abs(10.9) from lxw_al;
10.9
19. 正取余函數: pmod
語法: pmod(int a, int b),pmod(double a, double b)
返回值: int double
說明: 返回正的a除以b的余數
舉例:
hive> select pmod(9,4) from lxw_al;
1
hive> select pmod(-9,4) from lxw_al;
3
20. 正弦函數: sin
語法: sin(double a)
返回值: double
說明: 返回a的正弦值
舉例:
hive> select sin(0.8) from lxw_al;
0.7173560908995228
21. 反正弦函數: asin
語法: asin(double a)
返回值: double
說明: 返回a的反正弦值
舉例:
hive> select asin(0.7173560908995228) from lxw_al;
0.8
22. 餘弦函數: cos
語法: cos(double a)
返回值: double
說明: 返回a的餘弦值
舉例:
hive> select cos(0.9) from lxw_al;
0.6216099682706644
23. 反餘弦函數: acos
語法: acos(double a)
返回值: double
說明: 返回a的反餘弦值
舉例:
hive> select acos(0.6216099682706644) from lxw_al;
0.9
24. positive函數: positive
語法: positive(int a), positive(double a)
返回值: int double
說明: 返回a
舉例:
hive> select positive(-10) from lxw_al;
-10
hive> select positive(12) from lxw_al;
12
25. negative函數: negative
語法: negative(int a), negative(double a)
返回值: int double
說明: 返回-a
舉例:
hive> select negative(-5) from lxw_al;
5
hive> select negative(8) from lxw_al;
-8
Ⅹ hive什麼進行sql處理
是指在(getdate()-7)的那天注冊並登錄的用戶數sumUser和在getdate()里有登錄的用戶數userNum(getdate()-7注冊並登陸的),這兩個數的比例?
select cast(case when sumUser=0 then 0 else userNum/sumUser*100 end as varchar(2))+'%' as 留存率 from
(select
count(nowlogin.openid) as userNum,
count(newlogin.openid)as sumUser
from
(select aa.openid,aa.ftime from t_login_all as aa right join t_login_new as bb on aa.openid=bb.openid and bb.ftime=getdate()-7) as nowlogin,
(select openid from t_login_new where ftime=getdate()-7) as newlogin
where nowlogin.ftime=getdate() and nowlogin.openid=newlogin.openid
) as a