#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')