2013-09-21 100 views
7

創建HIVE表我想創建一個多串字符HIVE表作爲分隔符如多字符分隔符

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

我想有分隔成多串像「〜*」。

+3

並再次,一個SQL問題,以多餘的ALL-CAPS TITLE。吉茲。 – 2013-09-21 10:21:45

回答

9

FILELDS TERMINATED BY不支持多字符分隔符。要做到這一點,最簡單的方法是使用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

感謝Hari,我知道SerDe。但SerDe的問題是我無法在SSMS上使用Hive Tables創建鏈接服務器連接。你是如何解決這個問題的? –

+0

我還沒有在SSMS上工作,所以我不能肯定地說。但是你爲什麼認爲這是SerDe的問題?我會認爲這是一個單獨的問題,不是嗎? –

+0

我有一個類似的問題,並能夠成功地用這個答案建立一個表,但遇到聚合問題在查詢時間。一些挖掘和我結束了通過更改「org.apache.hadoop.hive.contrib.serde2.RegexSerDe」解析爲「org.apache.hadoop.hive.serde2.RegexSerDe」 – jlemaitre

5

請使用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';