我正在使用带有正则表达式serde的apache Hive 0.11但是当我从表限制5中执行select(*)时,每个列都应该有值为NULL的值。
我的创建脚本:
CREATE EXTERNAL TABLE log_corelio (timestamp STRING, ad STRING, cookieID STRING, slot STRING, language STRING, randomNumber STRING, age STRING, gender STRING, city STRING, date STRING, interests STRING, brands STRING, country STRING, region STRING, pageview_count STRING, member_status STRING, isp STRING, screen_width STRING, hashkey STRING, id STRING, ag STRING, ge STRING, l1 STRING, l2 STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe' WITH SERDEPROPERTIES ("input.regex" = "^\[([^\]]*)\]\|\/pool\/([^|]*)\|([^\|]*)\|GET \/ad\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)","output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %11$s %12$s %13$s %14$s %15$s %16$s %17$s %18$s %19$s %20$s %21$s %22$s %23$s %24$s")
LOCATION '/user/adhese/corelio/corelio6';
仅限正则表达式:
^\[([^\]]*)\]\|\/pool\/([^|]*)\|([^\|]*)\|GET \/ad\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)\/([^\/]*)
我真的没有看到什么是错的,我希望我需要在我的正则表达式中逃避一些事情,但我不知道是什么。
正则表达式应匹配:
[21/May/2013:23:59:59 +0100]|/pool/256955.log|62.235.161.115.1369169828196156|GET /ad/32869/nl/147/_age_/_gender_/_city_/_date_/;adttr12842;adttrlifestyle;adttrwielrennen;gmbl;prx/Explorer;Explorer9;Scarlet;Windows7;screen3/BE/01/21/undefined/Scarlet/_screenWidth_/_hashKey_/_ID_/_AG_/_GE_/_l1_/_l2_/|200|2|987||||
干杯。
答案 0 :(得分:2)
darkownage:“我测试了你的正则表达式 - 日志记录无法与正则表达式匹配”。记录应该完全匹配与正则表达式然后只有RegexserDe工作。完全注意
测试工具:regex rubular - 请检查正则表达式的最后部分&记录最后一行有一些空管(这部分是无与伦比的 - / | 200 | 2 | 987 ||||)
原因为NULL:
请参阅RegexSerDe文档说明。
要点:
if a row does not match the regex, then all columns in the row will be NULL
。如果一行与正则表达式匹配但具有少于预期的组,则缺少的组将为NULL。如果一行与正则表达式匹配但具有多于预期的组,则会忽略其他组答案 1 :(得分:0)
您应该使用\\
进行测试,而不是仅使用1 \
进行测试。我发现\w
与我的正则表达式不匹配,但是当我写\\w
时它完美无缺。