hadoop - 使用 multidelimeter 在配置单元中插入数据

标签 hadoop hive hiveql hive-query regexserde

如何使用 multidelimeter 在 hive 中插入数据,并且列之间没有指定分隔符。

下面是我的数据:

25380 20130101  2.514 -135.69   58.43     8.3     1.1     4.7     4.9     5.6     0.01 C     1.0    -0.1     0.4    97.3    36.0    69.4 -99.000 -99.000 -99.000 -99.000 -99.000 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0
25380 20130102  2.514 -135.69   58.43     3.0    -0.3     1.4     1.2     0.0     0.35 C     1.3    -1.0    -0.1   100.0    89.5    98.2 -99.000 -99.000 -99.000 -99.000 -99.000 -9999.0 -9999.0 -9999.0 -9999.0 -9999.0

我只想在我的配置单元表中插入前 7 列,并且我有一个包含上述数据的 txt 文件。

创建表脚本:

CREATE TABLE hotcold (a int,b int,c float,d float,e float,f float,g float,h string,i string,j string,k string,l string,m string,n string,o string,p string,q string,
r string,s string,t string,u string,v string,w string,x string,y string,z string,aa string,bb string,cc string,dd string,ee string
) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ('input.regex'='\\s+'); 

我的数据插入脚本如下:

LOAD DATA LOCAL INPATH '/home/cloudera/WeatherData.txt' into table hotcold;

下面是我的选择语句和错误:

select * from hotcold;

错误:

Failed with exception java.io.IOException:org.apache.hadoop.hive.serde2.SerDeException: Number of matching groups doesn't match the number of columns

最佳答案

每一列在正则表达式中应该有相应的捕获组 ()

在下面的例子中第一组在字符串的开头^(\\d+)-对应正整数,

\\s+ - 一个或多个空白分隔符,

第二个捕获组对应正整数(\\d+),

再次 \\s+ - 一个或多个空白分隔符,

第三个捕获组 - ([+-]?[0-9.]+) - 一个 float ,不是很严格的格式,允许 +- 符号以及数字和点的任意组合

.* 最后允许字符串末尾的任何字符,未捕获,将所有其他列添加到正则表达式,我的示例包含三列(三个捕获组)的正则表达式:

WITH SERDEPROPERTIES ('input.regex'='^(\\d+)\\s+(\\d+)\\s+([+-]?[0-9.]+).*') 

阅读此内容了解更多详情:Using Regular Expressions to Extract Fields for Hive Tables

关于hadoop - 使用 multidelimeter 在配置单元中插入数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54088870/

相关文章:

Python 和 MapReduce : beyond basics -- how to do more tasks on one database

hadoop - 从存储在 .avsc 文件中的表架构创建配置单元表

mysql - 如何将Hive数据表迁移到MySql?

hadoop - Hadoop 中 uber 模式的目的是什么?

java - 如何将 Hadoop MapReduce 作业实现为非 Map/Reduce,即使没有任何意义?

hadoop - 使用GenericOptionsParser和ToolRunner分发的文件

java - Hive UA解析器UDF提供IOException

hadoop - 使用路径中没有列名的分区创建 Hive 外部表?

azure - 将 Hive 表导出到 Excel 工作表

string - 使用 Hortonworks hadoop hive 聚合字符串