Схема таблицы Hive avro не обновляется после установки свойств таблицы из avro.schema.литерал в avro.schema.url

#hadoop #hive #schema #avro

#hadoop #улей #схема #avro

Вопрос:

Сначала я создал таблицу avro hive, как показано ниже.

 CREATE EXTERNAL TABLE user
STORED AS AVRO
LOCATION '/work/user'
TBLPROPERTIES  ('avro.schema.literal'='{"type":"record","name":"user", "fields": [{ "name":"user_id", "type":["null","int"], "default":null, "columnName":"user_id", "sqlType":"4" }, { "name":"username", "type":["null","string"], "default":null, "columnName":"username", "sqlType":"-1" }], "tableName":"user"}')
  

Я смог увидеть данные.

Я изменил некоторую схему, но на этот раз, используя приведенный ниже код.

 ALTER TABLE user SET TBLPROPERTIES ('avro.schema.url'='/work/avro/user_schema.avsc')
  

Новая схема в URL, как показано ниже.

 {"type":"record","name":"user", "fields": [{ "name":"user_id", "type":["null","int"], "default":null, "columnName":"user_id", "sqlType":"4" }, { "name":"username", "type":["null","string"], "default":null, "columnName":"username", "sqlType":"-1" }, { "name":"city", "type":"string", "default":"Pune", "columnName":"city" }], "tableName":"user"}
  

Схема не обновляется. В таблице отображаются только 2 поля, т.е. user_id и username.

То же самое работает, когда схема указана в литерале, как показано ниже.

 ALTER TABLE user SET TBLPROPERTIES ('avro.schema.literal'='{"type":"record","name":"user", "fields": [{ "name":"user_id", "type":["null","int"], "default":null, "columnName":"user_id", "sqlType":"4" }, { "name":"username", "type":["null","string"], "default":null, "columnName":"username", "sqlType":"-1" }, { "name":"city", "type":"string", "default":"Pune", "columnName":"city" }], "tableName":"user"}');
  

Но не путем указания URL, как указано выше.

Но это не работает. Схема таблицы не обновляется.

Комментарии:

1. вы нашли решение для этого?

2. Вы нашли ответ на этот вопрос? В таблице hive доступны как литеральная, так и URL-схема.

3. Найден ответ ALTER TABLE <db_name> .<имя_таблицы> СБРОСИТЬ TBLPROPERTIES(‘avro.schema. литерал’); Если вы это сделаете, то ‘avro.schema. url’ будет включен.

Ответ №1:

Файл схемы avro должен быть в формате hdfs, и ссылка может быть такой, как показано ниже.

 TBLPROPERTIES ('avro.schema.url'='hdfs:///user/cloudera/categories.avsc')