обновление схемы таблицы улья, созданной в avro serde, приводит к ошибке - PullRequest
0 голосов
/ 30 апреля 2019

Я создал таблицу в avro serde в Hive, используя нижеприведенную команду создания

CREATE EXTERNAL TABLE IF NOT EXISTS mydb.mytable(   
  personid string,
  name  string,
  batch string,
  sex string
  )
ROW FORMAT SERDE
  'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION
  '/data/gaurav/test/mytable'
TBLPROPERTIES ('avro.schema.url'='/data/gaurav/schema/mytable.avsc');

Ниже приведена схема

{
         "namespace": "mydb",
         "name": "mytable",
         "type": "record",
         "fields": [
         { "name":"personId", "type":["null","string"], "default": "null" },
         { "name":"name", "type":["null","string"], "default": "null" },
         { "name":"batch", "type":["null","string"], "default": "null" },
         { "name":"sex", "type":["null","string"], "default": "null" }

  ]
}

Я хочу добавить два поля в mytable, поэтому у меня естьобновил файл avro.schema.url, чтобы он указывал на новый файл схемы, содержащий эти 2 дополнительных поля.Ниже приведена команда, которую я использовал для обновления схемы.

alter table mytable set tblproperties('avro.schema.url'='/data/gaurav/schema/mytable_new.schema')

Вот новая схема

 {
         "namespace": "mydb",
         "name": "mytable",
         "type": "record",
         "fields": [
         { "name":"personId", "type":["null","string"], "default": "null" },
         { "name":"name", "type":["null","string"], "default": "null" },
         { "name":"batch", "type":["null","string"], "default": "null" },
         { "name":"sex", "type":["null","string"], "default": "null" },
         { "name":"fname", "type":["null","string"], "default": "null" },
         { "name":"mname", "type":["null","string"], "default": "null" }

  ]
}

Пока все хорошо. Я могу просматривать свои новые поля, когда я описываю mytable, нокогда я запускаю запрос select count(*) к таблице, он выдает ошибку

Ошибка: ошибка при обработке оператора: СБОЙ: Ошибка выполнения, код возврата 2 из org.apache.hadoop.hive.ql.exec.mr.MapRedTask (состояние = 08S01, код = 2).Когда я проверил журналы этой задачи, я обнаружил, что вызвано: org.apache.avro.AvroTypeException: ненулевое значение по умолчанию для нулевого типа: «ноль».

Я четко упомянул значение по умолчаниюЗначение null при создании схемы, так почему я сталкиваюсь с этой ошибкой? что можно сделать, чтобы ее избежать?

...