導航:首頁 > 凈水問答 > hive過濾掉數字開頭

hive過濾掉數字開頭

發布時間:2021-12-22 17:11:55

⑴ 如何用數字 取hive表某列值

Hive的insert語句能夠從查詢語句中獲取數據,並同時將數據Load到目標表中。現在假定有一個已有數據的表staged_employees(雇員信息全量表),所屬國家cnty和所屬州st是該表的兩個屬性,我們做個試驗將該表中的數據查詢出來插入到另一個表employees中。

INSERT OVERWRITE TABLE employees
PARTITION (country = '中國', state = '北京')
SELECT * FROM staged_employees se
WHERE se.cnty = '中國' AND se.st = '北京';

由於使用了OVERWRITE關鍵字,目標表中原來相同partition中的所有數據被覆蓋,如果目標表中沒有partition,則整個表會被覆蓋。

如果把OVERWRITE關鍵字刪掉,或者替換成INTO,則hive會追加而不是替代原分區或原表中的數據,這個特性在Hive v0.8.0之後才支持。

當數據已經存在於hdfs上但不是我們想要的格式的時候,當進行的計算需要分好多步驟有必要存儲中間數據的時候,或者原數據沒有分區、有很多無效列需要過濾的時候,可以使用insert..select句型來完成這一轉換過程。

由於一個國家有很多個省份,如果想根據(國家country,地區partition)兩個維度對數據進行分區的話,這條SQL語句的執行個數應該等於地區的數目,比如中國有23個省就要對該SQL語句執行23次。因此hive對這個SQL語句進行了改造,只需要掃描一次原表就可以生成不同的輸出(多路輸出)。比如下面的SQL語句掃描了一次原始數據表,但是同時生成了3個省份的結果數據:

FROM staged_employees se
INSERT OVERWRITE TABLE employees
PARTITION (country = '中國', state = '河北省')
SELECT * WHERE se.cnty = '中國' AND se.st = '河北省'
INSERT OVERWRITE TABLE employees
PARTITION (country = '中國', state = '陝西省')
SELECT * WHERE se.cnty = '中國' AND se.st = '陝西省'
INSERT OVERWRITE TABLE employees
PARTITION (country = '中國', state = '河南省')
SELECT * WHERE se.cnty = 'US' AND se.st = '河南省';通過縮進可以很清楚的看到,我們掃描了一次staged_employees表但是執行了3次不同的insert語句,這條大SQL語句是這么執行的:先通過from staged_employees表獲取一條記錄,然後執行每一個select子句,如果select子句驗證通過則執行相應的insert語句。注意這里的三條select子句是完全獨立執行的,並不是if .. then .. else的關系,這就意味著這3條select子句在某種情況下可能同時通過where檢測。

通過這種結構,原始表的數據能被拆分到目標表的不同partition中去。

如果原表的一條記錄滿足於其中一個給定的select .. where .. 子句,則該記錄將被寫到目標表的固定分區中。其實更進一步,每條Insert語句能將數據寫到不同的數據表中,不管這個表是否分區都一樣。

於是,就像一個過濾器一樣,原表的一些數據被寫到了很多輸出地址,而剩下的數據會被丟棄。

當然,你也可以混用Insert overwrite和insert into兩種不同的方法寫出數據。

向動態分區插入數據

但是問題還是沒有解決,中國有23個省,那麼我們就需要寫23個insert into .. select ..where子句,這非常不現實。於是hive的一種叫做動態分區的特性就出現了,它能夠根據select出來的參數自動推斷將數據插入到那個分區中去。本文上面的兩種SQL語句設定分區的方式都叫做靜態分區插入。

將上一個SQL語句進行改動,會得到以下簡潔的新SQL語句:

INSERT OVERWRITE TABLE employees
PARTITION (country, state)
SELECT ..., se.cnty, se.st
FROM staged_employees se;hive先獲取select的最後兩個位置的se.cnty和se.st參數值,然後將這兩個值填寫到Insert語句partition中的兩個country和state變數中,即動態分區是通過位置來對應分區值的。原始表select出來的值和輸出partition的值的關系僅僅是通過位置來確定的,和名字並沒有關系,比如這里se.cnty和county的名稱完全沒有關系。

上面的這條SQL語句是對兩個分區同時進行了動態設定,如果staged_employees表中有100個國家,每個國家有100個地區,那麼該SQL語句自動對每個國家和地區建立相應的partition並插入數據,如果用手寫的話不現實。

只要位置正確,你可以混用動態分區和靜態分區值設定,比如下面這個例子,你可以靜態指定一個country值,但是state值採用動態的方法設定:

INSERT OVERWRITE TABLE employees
PARTITION (country = 'US', state)
SELECT ..., se.cnty, se.st
FROM staged_employees se
WHERE se.cnty = 'US';注意:靜態分區值必須在動態分區值的前面!

⑵ Hive 如何利用regexp_extract函數提取數字

case
--處理非科學計數法表示的字元串
when length(regexp_extract('字元串','([0-9]+\\.)([0-9]+)(E-*[0-9]+)',2))=0
then '字元串'
--處理整數
when length(regexp_extract('字元串','([0-9]+\\.)([0-9]+)(E[0-9]+)',2))<=cast(regexp_extract('字元串','(E)([0-9]+)',2) as int)
then rpad(regexp_replace(regexp_extract('字元串','([^E]+)',1),'\\.',''),cast(regexp_extract('字元串','(E)([0-9]+)',2) as int)+1,'0')
--處理小數

⑶ hive如何去掉重復數據,顯示第一條

去重沒問題啊,distinct 就好了,顯示第一條可以用row_number函數,不同版本hive的row_number有所不同,你自己查一下吧,row_number可以對同一個key從1開始編號的。

⑷ HIve中SQL如何判斷一個欄位是連續10個數字

目前我知道的方法是把你希望添加的數據寫入到文本中,然後從文本導入到你的表格中。
但是,hive不知道oracle的insert into , update。
load data [local] inpath 'yourfile_location' [overwrite] into your_table;

⑸ HIVE 字元串截取

select split(id,",")[0],split(id,",")[1],,,split(id,",")[4],,,,

⑹ hive 分區列是根據哪個列數據進行過濾的

insert overwrite table t_table1 select * from t_table1 where XXXX;

其xxx需要保留數據查詢條件

清空表:
insert overwrite table t_table1 select * from t_table1 where 1=0;

⑺ hive 正則匹配是否含有字母

hive中用的就是java的正則
.*\\w+.*

⑻ hive中正則表達式怎麼寫

有的,like其實不是正則,而是通配符,這個通配符可以看一下SQL的標准。例如%代表任意多個字元。
A like '123%'
要是not like使用 not A like '123%'

若是在hive想用正則,請用rlike,不過hive的正則寫法和java一樣,\請使用\\,例如數字\d,在這需要寫成\\d
A rlike '\\d+'
not A rlike '\\d+'

⑼ hive中split函數怎麼把一段話中的數字提取出來

PIG中輸入輸出分隔符默認是製表符\t,而到了hive中,默認變成了八進制的\001, 也就是ASCII: ctrl - A Oct Dec Hex ASCII_Char 001 1 01 SOH (start of heading) 官方的解釋說是盡量不和文中的字元重復,因此選用了 crtrl - A,單個的字元可以

⑽ hive 能去掉字元中間的空格嗎

用replace函數替換 Replace() 功能將一個字元串中指定個數的字元串替換為另一個字元串。 語法Replace(string1,start,n,string2) 參數string1:string類型,指定要使用string2替換其中一部分內容的字元串start:long類型,指定要從哪個字元位置開始替換字元串,字元串中第一個字元的位置為1n:long類型,指定要替換多少個字元string2:string類型,指定用哪個字元串替換string1的部分字元返回值String。函數執行成功時返回替換後的字元串,發生錯誤時返回空字元串("")。如果任何參數的值為NULL,Replace()函數返回NULL。用法如果start參數指定的位置超過了string1的長度,那麼Replace()函數把將string2拼接到string1的後面形成的字元串返回。如果n的值為0,那麼Replace()函數把string2插入到string1指定位置後形成的字元串返回。 多個空格時要循環替換。 DOWHILEPOS(STRING1,'')>0 REPLACE(STRING,POS(STRING1,''),1,'') LOOP 其中,string1為要去空格的字元串 樓上的,想問一下,用pos真的可以判斷出''來嗎? ''中間黨然有一個空�...

閱讀全文

與hive過濾掉數字開頭相關的資料

熱點內容
污水處理廠建設應急救援預案 瀏覽:51
污水提升器不會自啟動 瀏覽:700
家用凈水機怎麼換主濾芯 瀏覽:49
白雲山的空氣凈化器怎麼樣 瀏覽:287
純凈水的凈還組什麼詞 瀏覽:734
復合樹脂如何充填 瀏覽:572
凈水機有一個小孔有水怎麼回事 瀏覽:139
污水池爆氣管用什麼方法疏通 瀏覽:805
創維後置活性炭濾芯怎麼樣 瀏覽:869
化工污水清理一般多少錢 瀏覽:837
重慶涪陵污水處理廠工資怎麼樣 瀏覽:942
MBR超濾膜清洗 瀏覽:610
魚缸用樹脂擺件可以么 瀏覽:238
什麼凈水遠 瀏覽:416
從四川回遼寧用隔離嗎 瀏覽:223
溢泰凈水器和漢斯頓凈水器哪個好 瀏覽:368
景觀魚池過濾 瀏覽:639
納濾能攔截苯環 瀏覽:520
飲水機的水熱水能燒大概是多少度 瀏覽:669
等離子去疤痕好不好 瀏覽:197