hadoop - Hive和RegexSerde仅返回NULL

标签 hadoop hive

我正在尝试使用Hive中的RegexeSerde解析以下行:

2011-07-22 20:34:51 808 8b1f27d094fb33ea - - - OBSERVED "unavailable" http://www.4shared.com/ 200 TCP_NC_MISS GET 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; Windows NT 6.1; en-US; rv:1.9.2.18) Gecko/20110614 Firefox/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和其他所有通过的Regex验证工具中进行了测试,但是当我从表中进行选择时,我仅收到NULL值;

谢谢,
丹尼尔

最佳答案

我必须阅读一个长日志文件,解决该问题的过程是:

使用此创建正则表达式
1)https://regex101.com/#java

2)仅将“\ w”,“\ s”和“\ w”替换为“\ w”

在每个括号内,我使用“+”而不是“*”来表示“一个或多个”。

如果没有2),结果将是整行带有NULL值,但是在所有特殊字符上加上双“\”后,测试就成功解析了。

关于hadoop - Hive和RegexSerde仅返回NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25362359/

相关文章:

scala - 在 IntelliJ Idea 中运行 Apache Spark 示例应用程序

Hadoop Spark (Mapr) - AddFile 是如何工作的

sql - 根据 Hive 中的组类别移动日期列的行

hadoop - 如何建立Hbase的RegionServer来掌握

linux - 稳定排序一个巨大的文件

eclipse - 从Eclipse启动远程Spark作业时出错

sql - 创建指向 HBase 表的外部 Hive 表

hadoop - 带有Iceberg和S3的独立配置单元metastore

linux - 如何使用 xargs 运行 nohup 子进程池?

hadoop - 在 Hive 中检索 udf 结果