国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù)

這篇具有很好參考價值的文章主要介紹了Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 系統(tǒng)內置函數(shù)

查看系統(tǒng)內置函數(shù):show functions ;
顯示內置函數(shù)的用法: desc function lag; – lag為函數(shù)名
顯示詳細的內置函數(shù)用法: desc function extended lag;

1.1 行轉列

行轉列是指多行數(shù)據(jù)轉換為一個列的字段。

Hive行轉列用到的函數(shù)
concat(str1,str2,...) 字段或字符串拼接
concat_ws('分割符',str1,str2,...) 將字段或字符串按分割符號拼接
collect_set(column1), 收集某個字段的值,進行去重匯總,產(chǎn)生Array類型,即將某列數(shù)據(jù)轉換成數(shù)組

行轉列函數(shù)的應用:將星座和血型相同的人歸類到一起
原數(shù)據(jù)
Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)
腳本

with t1 as (
select name, concat(constellation,',', blood_type) as cb
            from constellation
)
select cb,concat_ws(',',collect_set(name)) as names  from t1
group by cb;

行轉列后的結果
Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)

1.2 列轉行

explode(col):將hive一列中復雜的array或者map結構拆分成多行。
explode(ARRAY) 數(shù)組的每個元素生成一行
explode(MAP) map中每個key-value對,生成一行,key為一列,value為一列
腳本

select explode(names) name from constellation_01;

列轉行后執(zhí)行結果
Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)
lateral view 和 split, explode等UDTF一起使用。explode能夠將一列數(shù)據(jù)拆分成多行,形成一張臨時表,與原表進行聚合

select cb,name 
from constellation_01 
lateral view explode(names) constellation_01_temp as name;

1.3 窗口函數(shù)

不僅展示窗口計算的字段,也展示原字段
源數(shù)據(jù)

jack,2017-01-01,10
tony,2017-01-02,15
jack,2017-02-03,23
tony,2017-01-04,29
jack,2017-01-05,46
jack,2017-04-06,42
tony,2017-01-07,50
jack,2017-01-08,55
mart,2017-04-08,62
mart,2017-04-09,68
neil,2017-05-10,12
mart,2017-04-11,75
neil,2017-06-12,80
mart,2017-04-13,94

執(zhí)行腳本

create table business(
name string, 
orderdate string,
cost int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';

load data local inpath "/opt/module/datas/business.txt" into table business;

執(zhí)行結果Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)

1.3.1 聚合開窗函數(shù)

窗口函數(shù)和聚合函數(shù)的結合使用
Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)
執(zhí)行腳本

select name,orderdate,cost,
       count(*)  over(partition by month(orderdate)),-- 顧客信息及每月總購買人數(shù)
       sum(cost) over(partition by month(orderdate)), -- 顧客信息及每月總購買金額
       sum(cost) over(partition by month(orderdate) order by orderdate rows between unbounded preceding and current row), -- 起點到當前行的累加金額
       sum(cost) over(partition by month(orderdate) order by orderdate rows between 1 preceding and current row), --  前一行 和 當前行
       sum(cost) over(partition by month(orderdate) order by orderdate rows between  current row and 1 following), -- 當前行 和 后一行
       sum(cost) over(partition by month(orderdate) order by orderdate rows between  1 preceding and 1 following), -- 前一行 到 后一行
       sum(cost) over(partition by month(orderdate) order by orderdate rows between current row and unbounded following) -- 當前行到后面所有行
from business

計算結果
Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)

1.3.2 排序開窗函數(shù)

ROW_NUMBER() 從1開始,按照順序,生成分組內記錄的序列
RANK() 生成數(shù)據(jù)項在分組中的排名,排名相等會在名次中留下空位
DENSE_RANK() 生成數(shù)據(jù)項在分組中的排名,排名相等會在名次中不會留下空位
執(zhí)行腳本

select name,orderdate,cost,
       row_number() over (partition by month(orderdate) order by cost desc), -- 按花費金額由多到少排序,依次編號
       rank()  over (partition by month(orderdate) order by cost desc), -- 按花費金額由多到少排序,相等的排名會留下空位
       dense_rank() over (partition by month(orderdate) order by cost desc) -- 按花費金額由多到少排序,相等的排名不會留下空位
from business;

計算結果
Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)

1.3.3 lag和lead函數(shù)

LAG(col,n): 往前第n行第col列的數(shù)據(jù)
LEAD(col,n):往后第n行第col列的數(shù)據(jù)
執(zhí)行腳本

select name,orderdate,cost,
       lag(orderdate,1) over(partition by month(orderdate) order by orderdate), -- 上一次購買日期(往前第n行數(shù)據(jù))
       lead(orderdate,1)over(partition by month(orderdate) order by orderdate) -- 下一次購買日期(往后第n行數(shù)據(jù))
from business;

計算結果

Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)

1.4 JSON解析函數(shù)

hive中內置的json_tuple()函數(shù),可以將json數(shù)據(jù)解析成普通的結構化數(shù)據(jù)表

源數(shù)據(jù)

{"movie":"1193","rate":"5","timeStamp":"978300760","uid":"1"}
{"movie":"661","rate":"3","timeStamp":"978302109","uid":"1"}
{"movie":"914","rate":"3","timeStamp":"978301968","uid":"1"}
{"movie":"3408","rate":"4","timeStamp":"978300275","uid":"1"}
{"movie":"2355","rate":"5","timeStamp":"978824291","uid":"1"}
{"movie":"1197","rate":"3","timeStamp":"978302268","uid":"1"}

執(zhí)行腳本

create table t_json(json string);
load data local inpath "/export/data/datawarehouse/movie.txt" overwrite into table t_json;

create table  movie_rate 
as
select json_tuple(json,'movie','rate','timeStamp','uid') as (movie,rate,ts,uid) from t_json;

執(zhí)行結果
Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù),數(shù)據(jù)計算與分析組件,hive,大數(shù)據(jù)文章來源地址http://www.zghlxwxcb.cn/news/detail-662953.html

到了這里,關于Hive的窗口函數(shù)與行列轉換函數(shù)及JSON解析函數(shù)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Hive和Impala的行列轉換

    Hive和Impala的行列轉換

    explode+lateral group by+collect_list 一、列轉行 (對某列拆分,形成新列) 使用函數(shù):lateral view explode(split(column, ‘,’)) num eg: 如表:t_row_to_column_tmp 數(shù)據(jù)如下,對tag列進行拆分 二、行轉列 (根據(jù)主鍵,對某列進行合并) 使用函數(shù):concat_ws(‘,’,collect_set(column)) 說明:collect_list 不去重,

    2024年02月12日
    瀏覽(24)
  • 【大數(shù)據(jù)Hive】Hive 窗口函數(shù)使用詳解

    目錄 一、前言 二、hive 窗口函數(shù)概述 2.1 聚合函數(shù)與窗口函數(shù)差別 2.1.1 創(chuàng)建一張表

    2024年02月11日
    瀏覽(23)
  • 【大數(shù)據(jù)之Hive】十六、Hive-HQL函數(shù)之窗口函數(shù)(開窗函數(shù))

    【大數(shù)據(jù)之Hive】十六、Hive-HQL函數(shù)之窗口函數(shù)(開窗函數(shù))

    ??先定義了窗口的大?。ò葱衼硭悖?,然后對窗口內的行的數(shù)據(jù)進行計算,再將計算結果返回給改行。 ??窗口函數(shù)包括窗口和函數(shù)兩部分,窗口用于定義計算范圍,函數(shù)用于定義計算邏輯,窗口函數(shù)只會在原來的表上增加一列結果列,不改變原來的數(shù)據(jù)。 函數(shù): ??絕

    2024年02月11日
    瀏覽(14)
  • Hive的行列轉換(行轉多列、多列轉行、行轉單列、單列轉行)

    在實際使用Hive的過程中,常常會涉及到行列轉換,細分的話,有下面4種類型的行列轉換,分別是: 行轉多列 多列轉行 行轉單列 單列轉行 下面我們通過樣例介紹每種行列轉換的實現(xiàn)方法。 樣例表 班級成績表: 姓名(name) 學科(subject) 成績(score) 行列轉換思路分析及實現(xiàn) 行轉

    2024年02月15日
    瀏覽(45)
  • Hive 解析 JSON 字符串數(shù)據(jù)的實現(xiàn)方式

    Hive 解析 JSON 字符串數(shù)據(jù)的實現(xiàn)方式

    在 Hive 中提供了直接解析 JSON 字符串數(shù)據(jù)的方法 get_json_object(json_txt, path) ,該方法參數(shù)解析如下: json_txt :顧名思義,就是 JSON 字符串; path :指的是匹配 JSON 字符串的格式,通過固定的語法獲取 JSON 字符串中的內容。 常用的 path 參數(shù)匹配符號有四個,分別是: $ :表示獲

    2024年02月05日
    瀏覽(22)
  • 【大數(shù)據(jù)技術】hive 窗口函數(shù)sum range between的詳細介紹

    【大數(shù)據(jù)技術】hive 窗口函數(shù)sum range between的詳細介紹

    【大數(shù)據(jù)技術】hive 窗口函數(shù)sum range between的詳細介紹 數(shù)據(jù)準備 建表 插入數(shù)據(jù) 查看數(shù)據(jù) 對比兩段sql的不同之處 及其運行結果 結果如下: 第一段 第二段 重點注意: 第一段和第二段sql的rows between與range between的不同 第一段與第二段sql的order by字段有不同 第二段sql最后使用了

    2024年02月13日
    瀏覽(19)
  • Python JSON 使用指南:解析和轉換數(shù)據(jù)

    Python JSON 使用指南:解析和轉換數(shù)據(jù)

    JSON 是一種用于存儲和交換數(shù)據(jù)的語法。JSON 是文本,使用 JavaScript 對象表示法編寫。 Python 有一個內置的 json 包,可用于處理 JSON 數(shù)據(jù)。 示例 :導入 json 模塊: 如果您有一個 JSON 字符串,可以使用 json.loads() 方法來解析它。結果將是一個 Python 字典。 示例 :從 JSON 轉換為

    2024年02月06日
    瀏覽(36)
  • Java 解析多層嵌套json數(shù)據(jù)及json字符串與對象的相互轉換

    Java 解析多層嵌套json數(shù)據(jù)及json字符串與對象的相互轉換

    本文主要介紹java解析多層嵌套json數(shù)據(jù)以及字符串與JSON對象之間的相互轉換,包括:json字符串的取值,json對象與字符串的相互轉換,字符串轉化為java對象,字符串轉化為javaList列表等。 提示:以下是本篇文章正文內容,下面案例可供參考 數(shù)據(jù)格式:JSON實際上就是鍵值對(

    2024年02月04日
    瀏覽(32)
  • Oracle基礎部分二(偽列/表、單個函數(shù)、空值處理、行列轉換、分析函數(shù)、集合運算)

    Oracle基礎部分二(偽列/表、單個函數(shù)、空值處理、行列轉換、分析函數(shù)、集合運算)

    rowid :rowid是一個用來唯一標記表中行的偽列。它是物理表中行數(shù)據(jù)的內部地址,包含兩個地址,其一為指向數(shù)據(jù)表中包含該行的塊所存放數(shù)據(jù)文件的地址,另一個是可以直接定位到數(shù)據(jù)行自身的這一行在數(shù)據(jù)塊中的地址。 除了在同一聚簇中可能不唯一外,每條記錄的rowid是

    2023年04月12日
    瀏覽(18)
  • 【大數(shù)據(jù)Hive3.x數(shù)倉開發(fā)】窗口函數(shù)案例:連續(xù)N次登錄的用戶;級聯(lián)累加求和;分組TopN

    【大數(shù)據(jù)Hive3.x數(shù)倉開發(fā)】窗口函數(shù)案例:連續(xù)N次登錄的用戶;級聯(lián)累加求和;分組TopN

    對窗口函數(shù)的講解part見:【大數(shù)據(jù)Hive3.x數(shù)倉開發(fā)】函數(shù)–窗口函數(shù) 自連接過濾實現(xiàn) 連續(xù)兩天登陸的用戶ID: 窗口函數(shù)lead()實現(xiàn) 功能:用于從當前數(shù)據(jù)中基于當前行的數(shù)據(jù)向后偏移取值 語法: lead(colName,N,defautValue) colName:取哪一列的值 N:向后偏移N行 defaultValue:如果取不到返回

    2023年04月17日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包