2017-06-27 54 views
0

我仍然是這個世界的小菜鳥,如果有任何誤解,那麼我就是光禿禿的。從Hive中的HDFS提取數據後獲取Null?

我到目前爲止所做的是,我在Linux環境中設置了Hadoop和Hive,並試圖從HDFS文件中提取數據到我的Hive表中。

這是日誌行的樣子:

阿帕奇2013-10-09T14:04:32Zphp129.124.201.110/EKEE.php20019705910Mozilla/5.0 (X11,Linux的i686的)爲AppleWebKit/534.24( KHTML,像壁虎) 的Chrome/Safari瀏覽器11.0.696.50/534.24

這是我的蜂巢查詢:

CREATE EXTERNAL TABLE LogParserSample(
logtype STRING) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
'input.regex' = '^[^0-9]+' 
) 
STORED AS TEXTFILE 
LOCATION '/mypath/'; 

當我做é執行上述成功創建的表。但是當我試圖使用SELECT語句來查詢表中的數據時,我得到的是空值而不是字apache。對於這個例子,我試圖從上面的日誌行中提取word apache。但後來我試圖在rubular執行相同的正則表達式,結果是正確的,如我所料。我無法弄清楚爲什麼!

我錯過了上面的任何小事嗎?任何幫助,不勝感激。謝謝!

回答

1
'input.regex' = '^([^0-9]+).*' 
  1. 只有括號包圍表達式被映射到的列。
  2. 全程記錄應當由正則表達式覆蓋

create external table logparsersample 
(
    logtype string 
) 
row format serde 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
with serdeproperties (
'input.regex' = '^([^0-9]+).*' 
) 
stored as textfile 
; 

select * from LogParserSample 
; 

+---------+ 
| logtype | 
+---------+ 
| apache | 
+---------+ 
+0

哇,這工作。神奇的**是括號**。 – Kulasangar