【发布时间】:2017-12-07 01:33:35
【问题描述】:
我正在尝试创建一个按单个字段分区的配置单元表。我要处理的数据是日志数据。日志格式为:
日期时间 IP 地址 HTTP_METHOD 消息
创建表配置单元查询:
CREATE EXTERNAL TABLE test_Part(
logdate string,
logtime string,
ip string,
message string)
PARTITIONED BY(method string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (
"input.regex" = "(\\d{4}-\\d{2}-\\d{2})\\s(\\d{2}:\\d{2}:\\d{2})\\s(\\d+\\.\\d+\\.\\d+\\.\\d+)\\s(\\S+)\\s(.*$)",
"output.format.string" = "%1$s %2$s %3$s %5$s %4$s"
)
STORED AS TEXTFILE;
并加载脚本:
LOAD DATA LOCAL INPATH '/home/user/tools/apache-hive-1.2.2-bin/scripts/sample1.log' OVERWRITE INTO TABLE test_Part PARTITION(method='GET');
当我对上表运行选择查询时,它给我的错误消息为
异常失败 java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: 匹配组数与列数不匹配
我错过了什么?
【问题讨论】:
-
您的数据是否被
method分隔到不同的文件中? -
没有。所有数据都在一个文件中。
标签: regex hive hiveql partition hive-serde