2014-01-24 75 views
4

對於處理日誌,我想使用Apache Hive regEx serde,但我只找到了使用String作爲數據類型的表格列的示例。Apache Hive regEx serde:數據類型

現在我的問題是:是基於日期的類型和整數和數組支持還是隻是字符串?

此示例(和其他)僅使用一個字符串:

CREATE TABLE access_log (
    remote_ip STRING, 
    request_date STRING, 
    method STRING, 
    request STRING, 
    protocol STRING 
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' 
WITH SERDEPROPERTIES (
"input.regex" = "([^ ]) . . [([^]]+)] \"([^ ]) ([^ ]) ([^ \"])\" *", 
"output.format.string" = "%1$s %2$s %3$s %4$s %5$s" 
) 
STORED AS TEXTFILE 

;

回答

6
  • 參考SERDE的代碼:code of RegexSerDegithub - RegexSerDe code, 所有列必須是String類型。 - 從程序註釋
  • 如果你想要做一些好辦法吧,寫一些自定義代碼SERDE(如果你擅長的java,然後進行),並添加爲自定義SERDE罐子像這樣的例子csv custom serde
  • 如果沒有,只允許列類型爲STRING,並且當您想要對任何列執行操作時,請在查詢中使用Casting(cast()函數在配置單元中)。

希望這有助於:)

+0

感謝您的體面信息:) – darkownage

1

我沒有用過RegexSerDe個人,但我也注意到,有兩類吧: serde/src/java/org/apache/hadoop/hive/serde2/RegexSerDe.java contrib/src/java/org/apache/hadoop/hive/contrib/serde2/RegexSerDe.java

第二個,你所指的確實似乎僅限於字符串。另一個似乎支持原始類型。

無論出於何種原因,我只能看到API docs中引用的第二個。

+1

@ VeLKerr的評論:除了ahains的回答(不幸的是,我還沒有足夠的聲譽來評論呢)...第一個正則表達式不支持序列化(僅反序列化)。 – aviad