2016-03-19 99 views
1

大括號中的參數在下面的代碼段中做了什麼?蜂巢中的regexp_extract參數

regexp_extract(col_value, '^(?:([^,]*)\,?){1}', 1) Id, 
regexp_extract(col_value, '^(?:([^,]*)\,?){2}', 1) Score, 
regexp_extract(col_value, '^(?:([^,]*)\,?){9}', 1) DisplayName, 

回答

0

正如你可以閱讀here,大括號包含了多少次前的道理,在這種情況下non-capturing group,可重複。

該組包含由非逗號字符組成的(可能爲空的)capturing group,後跟可選的逗號。由於花括號中只有一個數字,所以非捕獲組必須重複該次數。

我不知道爲什麼逗號應該被反斜槓轉義。在我看來,反斜槓是沒有必要的。

警告:我不知道Hadoop或Hive,我所有關於regexp_extract的知識都來自this page

這些正則表達式的目的是匹配逗號分隔列表中的第一個,第二個和第九個元素,其中捕獲組#1(由第三個參數regexp_extract選擇)只返回其最後一個匹配項。當然,除了最後一個元素之外,逗號並不是真正的可選項。

+0

感謝Walter,所以如果我正確理解你,它有點類似於Excel中的vlookup中的col_index_num?那麼在上面的情況下,它將從原始文件的第1列,第2列和第9列中提取所有內容並將它們存儲在新文件中? – TheGoat

+0

@WolfPig在這種情況下是的,我認爲(除了這三行之外,我沒有可見度) –