我正在使用分隔符作为",|"。
我创建了hive DDL,如下所示:
CREATE TABLE player_profile
(
player_id BIGINT COMMENT 'Player Profile Identifier',
change_ts STRING COMMENT 'Change Datetime',
child_birth_year INT COMMENT 'Child Birth Year',
country STRING COMMENT 'Country Code',
)
ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
WITH SERDEPROPERTIES ('input.regex'='^(\\d+),\\|(.*),\\|(\\d+),\\|(.*)$')
STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
我在部署此ddl时遇到了流动错误。
FAILED: Error in metadata: java.lang.RuntimeException: MetaException(message:org.apache.hadoop.hive.serde2.SerDeException org.apache.hadoop.hive.contrib.serde2.RegexSerDe only accepts string columns, but column[0] named player_id has type bigint)
FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask
我给出的正则表达式是一个问题吗?如果是这样的话,这种情况下的正则表达式是什么。
Hive(0.11)正则表达式serde是否支持BIGINT?
答案 0 :(得分:2)
RegexSerDe
显式检查所有列是否为字符串。见RegexSerDe.java
您可以将所有列更改为字符串,然后在查询数据时在int和string之间进行转换。
答案 1 :(得分:0)
正如您的例外中所述的问题:
RegexSerDe only accepts string columns, but column[0] named player_id has type bigint
RegexSerDe不支持bigint字符串。
您是否尝试过更改:
player_id BIGINT COMMENT
人:
player_id STRING COMMENT
检查它是否解决了您的问题?
您可以看到RegexSerDe.java源代码提及它:
// All columns have to be of type STRING.
for (int c = 0; c < numColumns; c++) {
if (!columnTypes.get(c).equals(TypeInfoFactory.stringTypeInfo)) {
throw new SerDeException(getClass().getName()
+ " only accepts string columns, but column[" + c + "] named "
+ columnNames.get(c) + " has type " + columnTypes.get(c));
}
}
正如您所看到的那样,您将获得错误。希望能提供帮助。