2016-03-19 4 views
1

Was bewirkt das Argument in den geschweiften Klammern im folgenden Codeabschnitt?regexp_extract Argumente in Hive

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

Antwort

0

Wie Sie here, geschweiften Klammern enthalten, wie oft der vorhergehenden Token, in diesem Fall ein non-capturing group lesen können, wiederholen kann.

Die Gruppe enthält eine (möglicherweise leere) capturing group aus Nicht-Komma-Zeichen, gefolgt von einem optionalen Komma. Da nur eine Zahl in geschweiften Klammern steht, muss die nicht erfassende Gruppe genau so oft wiederholt werden.

Ich weiß nicht, warum das Komma durch einen Backslash entfernt werden sollte. Es scheint mir, dass der Backslash nicht notwendig ist.

Vorbehalt: Ich kenne Hadoop oder Hive nicht, mein ganzes Wissen über regexp_extract kommt von this page.

Der Zweck dieser Regexes ist es, das erste, zweite und neunte Element in einer kommagetrennten Liste abzugleichen, wobei die einfangende Gruppe # 1 (ausgewählt durch das dritte Argument von regexp_extract) nur ihr letztes Vorkommen zurückgibt. Natürlich ist das Komma nicht wirklich optional, außer nach dem letzten Element.

+0

Danke Walter, also, wenn ich Sie richtig verstehe, ist es etwas ähnlich dem col_index_num in einem vlookup in Excel? Also im obigen Fall zieht es alle Inhalte aus der 1., 2. und 9. Spalte in der Originaldatei und speichert sie in der neuen Datei? – TheGoat

+0

@WolfPig in diesem Fall ja, ich nehme an (ich habe keine Sichtbarkeit über diese drei Zeilen hinaus) –