2013-09-21 29 views
7

Tôi muốn tạo ra một Bảng Hive với chuỗi ký tự đa như một dấu phân cách nhưTạo Hive Bảng với nhiều nhân vật delimiter

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

Tôi muốn có dấu phân cách như là một chuỗi đa như "~ *".

+3

và một lần nữa, AN SQL CÂU HỎI VỚI TẤT CẢ-CAPS thừa TITLE. GEEZ. –

Trả lời

9

FILELDS TERMINATED BY không hỗ trợ dấu phân tách nhiều ký tự. Cách đơn giản nhất để làm điều này là sử dụng 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

Cảm ơn Hari, tôi biết về SerDe. Nhưng vấn đề với SerDe là tôi không thể tạo kết nối máy chủ được liên kết trên SSMS với Hive Tables. Bạn có cách giải quyết vấn đề đó không? –

+0

Tôi đã không làm việc trên SSMS, vì vậy tôi không thể nói chắc chắn. Nhưng tại sao bạn nghĩ rằng đó là một vấn đề với SerDe? Tôi nghĩ đó là một vấn đề riêng biệt, phải không? –

+0

Tôi đã có một vấn đề tương tự và đã có thể xây dựng một bảng thành công với câu trả lời này, nhưng chạy vào các vấn đề tại thời điểm truy vấn với tập hợp. Một số đào và tôi đã kết thúc bằng cách thay đổi "org.apache.hadoop.hive.contrib.serde2.RegexSerDe" thành "org.apache.hadoop.hive.serde2.RegexSerDe" – jlemaitre

5

Vui lòng sử dụng 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'; 
Các vấn đề liên quan