使用regexserde在配置单元中创建ddl时出错

mfuanj7w  于 2021-06-04  发布在  Hadoop
关注(0)|答案(2)|浏览(394)

我有分隔符为“,|”的数据。
我创建了hive ddl,如下所示:

  1. CREATE TABLE player_profile
  2. (
  3. player_id BIGINT COMMENT 'Player Profile Identifier',
  4. change_ts STRING COMMENT 'Change Datetime',
  5. child_birth_year INT COMMENT 'Child Birth Year',
  6. country STRING COMMENT 'Country Code',
  7. )
  8. ROW FORMAT SERDE 'org.apache.hadoop.hive.contrib.serde2.RegexSerDe'
  9. WITH SERDEPROPERTIES ('input.regex'='^(\\d+),\\|(.*),\\|(\\d+),\\|(.*)$')
  10. STORED AS INPUTFORMAT 'org.apache.hadoop.mapred.TextInputFormat'
  11. OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';

我在部署这个ddl时遇到了流动错误。

  1. 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)
  2. FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask

我给出的正则表达式有问题吗?如果是的话,在这个例子中正则表达式是什么。
hive(0.11)regex serde是否支持bigint?

gcxthw6b

gcxthw6b1#

RegexSerDe 显式检查是否所有列都是字符串。请参见regexserde.java
您可以将所有列更改为字符串,然后在查询数据时在int和string之间转换。

wfveoks0

wfveoks02#

正如您在例外情况中指出的问题:

  1. RegexSerDe only accepts string columns, but column[0] named player_id has type bigint

regexserde不支持仅bigint字符串。
您是否尝试过改变:

  1. player_id BIGINT COMMENT

签署人:

  1. player_id STRING COMMENT

检查一下是否能解决你的问题?
您可以看到regexserde.java源代码:

  1. // All columns have to be of type STRING.
  2. for (int c = 0; c < numColumns; c++) {
  3. if (!columnTypes.get(c).equals(TypeInfoFactory.stringTypeInfo)) {
  4. throw new SerDeException(getClass().getName()
  5. + " only accepts string columns, but column[" + c + "] named "
  6. + columnNames.get(c) + " has type " + columnTypes.get(c));
  7. }
  8. }

正如你所看到的,这就是你得到的错误。希望对你有所帮助。

展开查看全部

相关问题