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

Hive行轉(zhuǎn)列[一行拆分成多行/一列拆分成多列]

這篇具有很好參考價(jià)值的文章主要介紹了Hive行轉(zhuǎn)列[一行拆分成多行/一列拆分成多列]。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

場景:

hive有張表armmttxn_tmp,其中有一個(gè)字段lot_number,該字段以逗號分隔開多個(gè)值,每個(gè)值又以冒號來分割料號和數(shù)量,如:A3220089:-40,A3220090:-40,A3220091:-40,A3220083:-40,A3220087:-40,A3220086:-40,A3220088:-40,A3220084:-40,A3220081:-40,A3220082:-40,A3220092:-40,A3220093:-40,A3220085:-40,A3220094:-40。

要求:

把該字段拆分開來,并且把料號和數(shù)量單獨(dú)列出,也就是分成兩列。

原數(shù)據(jù):

select 
key_id,
lot_number 
from armmttxn_tmp
where key_id = '48641906';

hive 中將一行數(shù)據(jù)按分隔符拆分成多行,Hive,hive,hadoop,數(shù)據(jù)倉庫

用到的函數(shù):split()、explode()

?步驟:

step1:以逗號拆分開,如下:

["A3220089:-40","A3220090:-40","A3220091:-40","A3220083:-40","A3220087:-40","A3220086:-40","A3220088:-40","A3220084:-40","A3220081:-40","A3220082:-40","A3220092:-40","A3220093:-40","A3220085:-40","A3220094:-40"]

使用split函數(shù),把數(shù)據(jù)拆分開

select 
key_id ,
split(lot_number, ',') lot_number
from armmttxn_tmp
where key_id = '48641906';

hive 中將一行數(shù)據(jù)按分隔符拆分成多行,Hive,hive,hadoop,數(shù)據(jù)倉庫

?step2:一行變成多行

select 
explode(split(lot_number, ',')) lot_number
from armmttxn_tmp
where key_id = '48641906';

hive 中將一行數(shù)據(jù)按分隔符拆分成多行,Hive,hive,hadoop,數(shù)據(jù)倉庫

?這里如果加上key_id字段,會(huì)怎樣呢?

hive 中將一行數(shù)據(jù)按分隔符拆分成多行,Hive,hive,hadoop,數(shù)據(jù)倉庫

SQL 錯(cuò)誤 [10081] [42000]: Error while compiling statement: FAILED: SemanticException [Error 10081]: UDTF's are not supported outside the SELECT clause, nor nested in expressions

原因:當(dāng)使用UDTF函數(shù)的時(shí)候,hive只允許對拆分字段進(jìn)行訪問。
所以,可以這樣使用:select?explode(split(lot_number, ',')) lot_number from armmttxn_tmp where key_id = '48641906';?

但不可以這樣使用:select key_id ,explode(split(lot_number, ',')) lot_number from armmttxn_tmp where key_id = '48641906';

如果想訪問除了拆分字段以外 的字段,怎么辦呢?
用lateral view側(cè)視圖!

lateral view為側(cè)視圖,是為了配合UDTF來使用,把某一行數(shù)據(jù)拆分成多行數(shù)據(jù).不加lateral view的UDTF只能提取單個(gè)字段拆分,并不能塞會(huì)原來數(shù)據(jù)表中.加上lateral view就可以將拆分的單個(gè)字段數(shù)據(jù)與原始表數(shù)據(jù)關(guān)聯(lián)上.

注意:在使用lateral view的時(shí)候需要指定視圖別名

--表名 lateral view UDTF(xxx) 視圖別名(虛擬表名) as a,b,c(列別名)

--lateral view explode 相當(dāng)于一個(gè)拆分lot_number字段的虛表,然后與原表進(jìn)行關(guān)聯(lián).

step3:拆分的字段與原始表數(shù)據(jù)關(guān)聯(lián)上.

select 
key_id ,
split(view.*,':') lot_number
from armmttxn_tmp lateral view explode(split(lot_number, ',')) view
where key_id = '48641906';

hive 中將一行數(shù)據(jù)按分隔符拆分成多行,Hive,hive,hadoop,數(shù)據(jù)倉庫

但還不是我們想要的最終結(jié)果,還需要把lot_number拆分成兩列

step4: 拆分成兩列

select 
key_id ,
split(view.*,':')[size(split(view.*, ':'))-2] as lot_number,
split(view.*,':')[size(split(view.*, ':'))-1] as quantity
from armmttxn_tmp lateral view explode(split(lot_number, ',')) view
where key_id = '48641906';

hive 中將一行數(shù)據(jù)按分隔符拆分成多行,Hive,hive,hadoop,數(shù)據(jù)倉庫文章來源地址http://www.zghlxwxcb.cn/news/detail-770118.html

到了這里,關(guān)于Hive行轉(zhuǎn)列[一行拆分成多行/一列拆分成多列]的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Hive的行列轉(zhuǎn)換(行轉(zhuǎn)多列、多列轉(zhuǎn)行、行轉(zhuǎn)單列、單列轉(zhuǎn)行)

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

    2024年02月15日
    瀏覽(44)
  • Hive多行轉(zhuǎn)多列,多列轉(zhuǎn)多行

    Hive多行轉(zhuǎn)多列,多列轉(zhuǎn)多行

    原始數(shù)據(jù)表 目標(biāo)結(jié)果表 分析:目標(biāo)表中的a和b是用分組形成,所以groupby字段選用原始表中col1,c、d、e是原始表中的行值,在目標(biāo)表中成了列名,目標(biāo)表中可以采用as做列名自定義,當(dāng)原始表中的某一字段值等于某一特定值時(shí),人為定義為結(jié)果表中的列名。 SQL實(shí)現(xiàn) 總結(jié):多行

    2024年02月12日
    瀏覽(30)
  • 【hive】行轉(zhuǎn)列—explode()/posexplode()/lateral view 函數(shù)使用場景

    功能: 用于和UDTF函數(shù)(explode,split)結(jié)合使用,把某一行數(shù)據(jù)拆分成多行數(shù)據(jù),再將多行結(jié)果組合成一個(gè)支持別名的虛擬表。 主要解決select使用UDTF做查詢的過程中查詢只能包含單個(gè)UDTF,不能包含其它字段以及多個(gè)UDTF的情況。 語法:LATERAL VIEW udtf(expression) tableAlias AS columnAlia

    2024年04月09日
    瀏覽(22)
  • 【Hive-SQL】Hive Select 選擇語句排除一列或多列

    查看 除了sample_date 以外的所有字段信息 查看 除了sample_date 和 msgtype 以外的所有字段信息 上面的 set hive.support.quoted.identifiers=none; 可以替換操作: 在 \\\'hive-site.xml\\\' 中添加以下配置: hive.support.quoted.identifiers=none

    2024年02月10日
    瀏覽(21)
  • Hive SQL 中ARRAY或MAP類型數(shù)據(jù)處理:lateral view explode()/posexplode()——行轉(zhuǎn)列函數(shù)

    Hive SQL 中ARRAY或MAP類型數(shù)據(jù)處理:lateral view explode()/posexplode()——行轉(zhuǎn)列函數(shù)

    前言:在對表數(shù)據(jù)進(jìn)行批量處理過程中,常常碰上某個(gè)字段是一個(gè)array或者map形式的字段,一列數(shù)據(jù)的該字段信息同時(shí)存在多個(gè)值,當(dāng)我們需要取出該數(shù)組中的每一個(gè)值實(shí)現(xiàn)一一對應(yīng)關(guān)系的時(shí)候,可以考慮使用lateral view explode()/posexplode() 進(jìn)行處理。 一、提要:explode()本身是

    2024年02月04日
    瀏覽(28)
  • SQL 將一列拆分成多列

    SQL 將一列拆分成多列

    數(shù)據(jù)庫中有業(yè)務(wù)表t1和字典表dictionary t1表:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?dictionary表: ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 需求一:將col列拆分成三列 SQL 代碼如下所示: 方法一: 效果: 方法二: 效果:

    2024年02月06日
    瀏覽(22)
  • SQL實(shí)現(xiàn)一行數(shù)據(jù)分組后轉(zhuǎn)多行多列

    在統(tǒng)計(jì)一些指標(biāo)時(shí),通常會(huì)有多個(gè)指標(biāo)需要分組進(jìn)行聚合,但是 數(shù)據(jù)源的粒度可能并非是指標(biāo)分組的粒度 。舉個(gè)例子,比如從訪客表中提取訪客的數(shù)據(jù),每行數(shù)據(jù)有每個(gè)平臺(tái)的首次訪問時(shí)間;另外要做一個(gè)平臺(tái)統(tǒng)計(jì)表,其中的一個(gè)指標(biāo)統(tǒng)計(jì)的是各個(gè)平臺(tái)近1天、7天、30天的新

    2024年02月14日
    瀏覽(23)
  • mysql根據(jù)逗號將一行數(shù)據(jù)拆分成多行數(shù)據(jù),順便展示其他列

    mysql根據(jù)逗號將一行數(shù)據(jù)拆分成多行數(shù)據(jù),順便展示其他列

    2.處理結(jié)果 ?SQL展示 這個(gè)join最基本原理是笛卡爾積。通過這個(gè)方式來實(shí)現(xiàn)循環(huán)。 分析: length(a.path) - length(replace(a.path,‘,’,‘’))+1 表示了,按照逗號分割后,分割需要循環(huán)的次數(shù)。 join過程: 根據(jù)ID進(jìn)行循環(huán) { 判斷:i 是否 = n 獲取最靠近第 i 個(gè)逗號之前的數(shù)據(jù), 即 substr

    2024年02月09日
    瀏覽(33)
  • HIVE 復(fù)制行n次直到某一列等于200

    例如需要復(fù)制tmp_1表n次,每復(fù)制一次,gday+1,直到gday=200, 借助?lateral view posexplode,首先用space復(fù)制多個(gè)空格字符串,復(fù)制次數(shù)=200-gday 然后split將字符串分割成數(shù)組,此時(shí)該數(shù)組大小為200-gday 然后lateral view posexplode創(chuàng)建虛擬表,虛擬表大小也為200-gday 用gday+虛擬表的索引,即可

    2024年02月12日
    瀏覽(14)
  • Mysql行轉(zhuǎn)列函數(shù)

    Mysql行轉(zhuǎn)列函數(shù)

    group_concat() 例: select oid from Test; ?select group_concat( oid ) from Test;

    2024年02月14日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包