【问题标题】:Apache Hive regEx serde: data typesApache Hive regEx serde:数据类型
【发布时间】:2014-01-24 21:08:50
【问题描述】:

对于处理日志,我想使用 Apache Hive regEx serde,但我只找到了使用 String 作为表列数据类型的示例。

现在我的问题是:是否支持基于日期的类型、整数和数组,还是只是字符串?

此示例(和其他示例)仅使用字符串:

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

;

【问题讨论】:

    标签: regex apache hive


    【解决方案1】:
    • 参考SERDE的代码:code of RegexSerDe或github - RegexSerDe code, 所有列都必须是 STRING 类型。 -- 来自节目评论
    • 如果您想对其进行一些调整,请编写一些自定义 Serde 代码(如果您擅长 java,则继续)并添加为自定义 serde jar,如此示例 csv custom serde
    • 如果不是,则仅将列类型设为 STRING,当您想对任何列进行操作时,请在查询中使用 Casting(cast() 中的 hive 函数)。

    希望这会有所帮助:)

    【讨论】:

    • 感谢您提供体面的信息 :)
    【解决方案2】:

    我没有亲自使用过 RegexSerDe,但我注意到它有两个类: serde/src/java/org/apache/hadoop/hive/serde2/RegexSerDe.java contrib/src/java/org/apache/hadoop/hive/contrib/serde2/RegexSerDe.java

    您所指的第二个确实似乎仅限于字符串。另一个似乎支持原始类型。

    无论出于何种原因,我只看到API docs 中引用的第二个。

    【讨论】:

    • @VeLKerr 的评论:除了 ahains 的回答(不幸的是,我还没有足够的声誉发表评论)...第一个 Regexp 不支持序列化(仅反序列化)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-18
    • 1970-01-01
    相关资源
    最近更新 更多