Hive列分隔符的行为不同

时间:2013-07-04 08:26:03

标签: hive delimiter

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

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解析器的设置以获取所有遗留字符串(没有空格解析)并将其放入最后一个消息列?

感谢。

1 个答案:

答案 0 :(得分:0)

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

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

说你的临时表是temp_table(虚拟字符串)

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

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

使用此UDF最终加载到最终表格中。

我希望这会有助于你的事业。