Hive & RegexSerde return just NULL




我正在尝试解析以下行,例如使用 Hive 中的正则表达式Serde:

2011-07-22 20:34:51 808 8b1f27d094fb33ea - - - 观察到"不可用" http://www.4shared.com/200 TCP_NC_MISS text/javascript;charset=UTF-8 http dc413.4shared.com 80 /network/search-suggest.jsp ?search=2 KfZhNit2LHYqA==&format=jsonp jsp "Mozilla/5.0(Windows;U;视窗NT 6.1;en-US;rv:1.9.2.18( 壁虎/20110614火狐/3.6.18" 82.137.200.42 484 852 -

我的表定义是这样的:

CREATE   external TABLE browsing_data_ext(
  cdate STRING,
  ctime STRING,
  time_taken STRING,
  c_ip STRING,
  cs_username STRING,
  cs_auth_group STRING,
  x_exception_id STRING,
  sc_filter_result STRING,
  cs_categories STRING,
  cs_Referer STRING,
  sc_status STRING,
  s_action STRING,
  cs_method STRING,
  rs_Content_Type STRING,
  cs_uri_scheme STRING,
  cs_host STRING,
  cs_uri_port STRING,
  cs_uri_path STRING,
  cs_uri_query STRING,
  cs_uri_extension STRING,
  cs_User_Agent STRING,
  s_ip STRING,
  sc_bytes STRING,
  cs_bytes STRING,
  x_virus_id STRING  )
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
  "input.regex" = "([\-0-9]*) ([\:0-9]*) ([\d]*) ([\.a-z0-9]*) ([\-a-z0-9]*) ([\-a-z0-9]*) ([\-a-z0-9]*) ([\w]*) (\"[\w]*\") ([\.\-\=\&:\/\?a-z0-9]*) ([\d]*) ([\_\w]*) ([\w]*) ([\/\w]*) ([\w]*) ([\.\w]*) ([\d]*) ([\.\-\=\&:\/\?a-z0-9]*) ([\.\-\=\&:\/\?a-z0-9]*) ([\.\w]*) (\"[\w\W]*\") ([.:a-z0-9]*) ([\d]*) ([\d]*) ([\-a-z0-9]*)",
  "output.format.string" = "%1$s %2$s %3$s %4$s %5$s %6$s %7$s %8$s %9$s %10$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 %25$s"
)
STORED AS TEXTFILE
LOCATION '/user/hdfs/Data'
tblproperties ("skip.header.line.count"="6");



我已经在 rubular 和其他一些正则表达式验证工具中对其进行了测试,这些工具都通过了,但是当我从表中选择时,我只收到 NULL 值;

谢谢丹尼尔

我必须读取一个很长的日志文件,解决它的过程是:

用这个创建正则表达式1( https://regex101.com/#java

2( 仅将"\w"\s"和"\w">

替换为"\w"

在每个括号内,我使用"+"而不是"*"来指代"一个或多个"。

如果没有 2(,结果是整行带有 NULL 值,但在将双"\"添加到所有特殊字符后,测试成功解析。

最新更新