我有一个格式的日志文件:日期,时间,日志级别,组件,消息。所有字段均以空格分隔。例如:
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解析器的设置以获取所有遗留字符串(没有空格解析)并将其放入最后一个消息列?
感谢。
答案 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最终加载到最终表格中。
我希望这会有助于你的事业。