Я создал таблицу в 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 при создании схемы, так почему я сталкиваюсь с этой ошибкой? что можно сделать, чтобы ее избежать?