получение «org.apache.hadoop.hive.ql.metadata.HiveException: Ошибка времени выполнения Hive при обработке строки» при выборе строки из таблицы Hive - PullRequest
0 голосов
/ 08 июля 2019

У меня есть таблица в улье в формате ORC. Ниже приведен оператор create

  CREATE EXTERNAL TABLE IF NOT EXISTS Mydb.test(    
  transkey string,
  acckey string,
  name string,
  sex string,
  city string,
  gentime timestamp
  )
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'
LOCATION '/data/gau/work/hive/test';

Теперь я хочу, чтобы в эту таблицу было добавлено 2 дополнительных поля, поэтому я изменил таблицу и добавил 2 дополнительных поля.

изменить таблицу Mydb.test добавить столбцы (строка местоположения, возраст int).

так что после изменения таблицы я могу видеть значения полей вновь добавленных столбцов в моих старых данных как NULL, как и ожидалось. например, если я запускаю этот запрос выберите transkey, gentime, location, age из Mydb.test limit 5;

  +-----------------------------------+------------------------+-----------------+-----------------+--+
|          transkey                 |         gentime        |      location   | age              |
+-----------------------------------+------------------------+-----------------+-----------------+--+
| asxxxxx                           | 2019-07-xx 04:24:19.0  | india           | 25               |
| rtyxxxxxxx                        | 2019-07-04 04:24:19.0  | afg             | 45               |
| uuinxxxxxx                        | 2019-xx-04 04:24:20.0  | test            | 67               |
| ghjkxxxxxxx                       | 2017-xx-06 09:01:14.0  | NULL            | NULL             |
| uuuixxxxxxx                       | 2017-xx-06 09:01:xxx   | NULL            | NULL             |
| xxxxyyxxx                         | 2017-xx-06 09:01:1xxxx | NULL            | NULL             |

Но когда я беру определенный транскрипцию из старых данных (я могу узнать, являются ли данные старыми или новыми, просматривая gentime для записи) и запускаю запрос например, выберите возраст, местоположение из Mydb.test, где transkey = 'xxxxyyxxx' (согласно gentime xxxxyyxxx - старые данные, имеющие оба вновь добавленных поля как NULL), они выдают следующие ошибки

java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row 
    at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:179)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:459)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343)
    at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:164)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:422)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1924)
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row 
    at org.apache.hadoop.hive.ql.exec.vector.VectorMapOperator.process(VectorMapOperator.java:52)
    at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMa

pper.java:170)
    ... 8 more
Caused by: java.lang.NullPointerException
    at java.lang.System.arraycopy(Native Method)
    at org.apache.hadoop.io.Text.set(Text.java:225)
    at org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpressionWriterFactory$6.writeValue(VectorExpressionWriterFactory.java:686)
    at org.apache.hadoop.hive.ql.exec.vector.expressions.VectorExpressionWriterFactory$VectorExpressionWriterBytes.writeValue(VectorExpressionWriterFactory.java:272)

После запуска этого запроса, в идеале, я должен получить значения NULL для этих столбцов, но вместо этого я получаю эту ошибку. Пожалуйста, помогите.

P.S -Все эти запросы прекрасно работают с новыми данными, имеющими эти два новых столбца

...