Hive非一致的输入文件

时间:2013-07-04 08:50:47

标签: input hive

我有不一致的日志文件,我想使用动态分区与Hive进行分区。文件示例:

20/06/13 20:21:42.637 FLW CPTView :: OnInitialUpdate nRemoveAppShareQSize0 = 50000 \ n
20/06/13 20:21:42.638 FLW \ n
BandwidthGlobalSettings:Old Bandwidth common定义\ n

有时,日志文件包含以某个与日期不同的单词开头的行。每行用\ n。

分隔

我正在运行命令:

CREATE EXTERNAL TABLE IF NOT EXISTS log_messages_temp (date STRING,time STRING,severity STRING,message STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\040' LOCATION '/examples/hive/tmp';

CREATE EXTERNAL TABLE IF NOT EXISTS log_messages_partitioned (time STRING,severity STRING,message STRING) PARTITIONED BY (date STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\040' LOCATION '/examples/hive/partitions';

set hive.exec.dynamic.partition=true;
set hive.exec.dynamic.partition.mode=nonstrict;
FROM log_messages_temp pvs INSERT OVERWRITE TABLE log_messages_partitioned PARTITION(date) SELECT pvs.time, pvs.severity, pvs.message, pvs.date;

结果创建了两个动态分区:date = 20/06/13 and date = BandwidthGlobalSettings:Old

我想将Hive定义为忽略以非日期字符串开头的行。

我该怎么做?或者可能存在其他解决方案 感谢。

1 个答案:

答案 0 :(得分:0)

我认为您可以编写一个UDF,它将使用正则表达式仅采用日期格式(例如:20/06/13)并丢弃所有其他类似“ BandwidthGlobalSettings:Old ”。您可以在插入最终表时在上一个查询中使用此UDF。

我希望这个解释有助于你的要求。