【问题标题】:Hive column delimiters different behaviourHive 列分隔符不同的行为
【发布时间】:2013-07-04 08:26:02
【问题描述】:

我有一个格式为:日期、时间、日志级别、组件、消息的日志文件。所有字段由空格分隔。例如:

21/06/13 14:42:58.874 FLW CPTView::CPTView 作为服务运行

我正在创建表:
CREATE EXTERNAL TABLE IF NOT EXISTS log_messages_temp (date STRING,time STRING,severity STRING,component STRING,message STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\040' LOCATION '/examples/hive/tmp';

当我运行查询时
SELECT message FROM log_messages_temp WHERE time = '14:42:58.874' LIMIT 50; I receive single word "Run" instead of "Run as a service"

如何定义 Hive 解析器的设置以获取所有剩余字符串(没有空间解析)并将其放入最后一个消息列?

谢谢。

【问题讨论】:

    标签: hive delimiter


    【解决方案1】:

    我认为您首先将数据加载到单列临时表中。

    例如:您的单列表如下:-

    说你的临时表是 temp_table(dummy string)

    即 dummy 将包含整个字符串,即“21/06/13 14:42:58.874 FLW CPTView::CPTView Run as a service”

    现在您可以编写一个 UDF 来解析 temp_table 上的每个条目。现在解析用空格分割每条记录。现在我假设前四个字段,即日期、时间、严重性、组件不包含任何空格作为您的最后一个字段,即消息。现在采取前 4 次吐口并按原样通过。对于其余的拆分,您可以使用引号将它们组合起来,以这种方式 Run_as_a_service

    使用此 UDF 最终加载到您的决赛桌。

    我希望这会对您的事业有所帮助。

    【讨论】:

    • 感谢您的回答。我没有将数据加载到单列表中,而是将 Hive 表与现有的 HDFS 文件相关联。但你是对的,我可以将它与单列表相关联。你能分享一些UDF java的例子吗?
    猜你喜欢
    • 1970-01-01
    • 2020-03-29
    • 2019-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多