2016-03-19 31 views
1

Küme parantezindeki argüman aşağıdaki kod bölümünde ne yapar?regexp_extract argümanları Hive

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

cevap

0

sen here okuyabilir gibi, kıvırcık parantez tekrarlayabilir, bu durumda bir non-capturing group yılında, belirteç önceki kaç kez içerirler.

Grup, virgülle eşleşmeyen karakterler içeren bir (muhtemelen boş) capturing group'u ve ardından da isteğe bağlı bir virgül içerir. Kıvrımlı parantez içinde yalnızca bir sayı olduğu için, yakalamayan grup tam olarak bu sayıyı tekrarlamalıdır.

Neden virgül bir ters eğik çizgi tarafından kaçması gerektiğini bilmiyorum. Bana ters eğik çizgi gerekli değildir.

Sıkıştırma: Hadoop veya Hive'ı bilmiyorum, regexp_extract hakkındaki tüm bilgilerim this page'dan gelir.

Bu regex'lerin amacı, birinci, ikinci ve dokuzuncu öğeyi virgülle ayrılmış bir listeyle eşleştirmektir; burada # 1 yakalama grubu (regexp_extract üçüncü bağımsız değişkeni tarafından seçilir) yalnızca son durumunu döndürür. Tabii ki, virgülden son öğe hariç, gerçekten isteğe bağlı değildir.

+0

Teşekkürler Walter, bu yüzden doğru bir şekilde anladım eğer Excel'de bir vlookup içinde col_index_num biraz benzer? Öyleyse, yukarıdaki durumda, 1., 2. ve 9. sütunlardaki tüm içeriği orijinal dosyada çekip yeni dosyada mı saklıyor? – TheGoat

+0

@WolfPig bu durumda evet, tahmin ediyorum (bu üç çizginin ötesinde görünürlük yok) –