0

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

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

谢谢。

4

1 回答 1

0

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

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

说你的临时表是 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 最终加载到您的决赛桌。

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

于 2013-07-04T10:00:06.137 回答