2013-09-21 13 views
7

Chcę utworzyć tabelę ula z multi ciąg znaków jako ogranicznik takich jakTworzenie ula tabela z wielu znaków separatora

CREATE EXTERNAL TABlE tableex(id INT, name STRING) 
ROW FORMAT delimited fields terminated by ',' 
LINES TERMINATED BY '\n' STORED AS TEXTFILE LOCATION '/user/myusername'; 

chcę mieć separator jako wielociąg jak „~ *”.

+3

i ponownie AN SQL pytanie ze zbędny ALL-Caps TYTUŁU. GEEZ. –

Odpowiedz

9

FILELDS TERMINATED BY nie obsługuje ograniczników wieloliniowych. Najprostszym sposobem, aby to zrobić jest użycie RegexSerDe:

CREATE EXTERNAL TABlE tableex(id INT, name STRING) 
ROW FORMAT 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
    "input.regex" = "^(\\d+)~\\*(.*)$" 
) 
STORED AS TEXTFILE 
LOCATION '/user/myusername'; 
+0

Dzięki Hari, wiem o SerDe. Ale problem z SerDe polega na tym, że nie jestem w stanie utworzyć połączonego połączenia z serwerem w SSMS z tablicami Hive. Czy chcesz rozwiązać ten problem? –

+0

Nie pracowałem nad SSMS, więc nie mogę powiedzieć na pewno. Ale dlaczego uważasz, że to jest problem z SerDe? Myślę, że to oddzielny problem, prawda? –

+0

Miałem podobny problem i udało mi się zbudować tabelę z powodzeniem z tą odpowiedzią, ale napotkałem problemy w czasie zapytania z agregacjami. Trochę kopania i ostatecznie rozwiązałem, zmieniając "org.apache.hadoop.hive.contrib.serde2.RegexSerDe" na "org.apache.hadoop.hive.serde2.RegexSerDe" – jlemaitre

5

Proszę używać MultiDelimitSerde

CREATE EXTERNAL TABlE tableex(id INT, name STRING) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.MultiDelimitSerDe' 
WITH SERDEPROPERTIES ("field.delim"="~*") 
STORED AS TEXTFILE 
LOCATION '/user/myusername'; 
Powiązane problemy