将 table 的属性从 avro.schema.literal 设置为 avro.schema.url 后,Hive avro table 架构未更新

Hive avro table schema not updated after setting properties of table from avro.schema.literal to avro.schema.url

首先,我创建了一个 avro 蜂巢 table,如下所示。

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"}

架构未更新。 Table 仅显示 2 个字段,即 user_id 和用户名。

当以如下文字形式提供模式时,同样的事情会起作用。

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 如上所述。

但这不起作用。 Table 架构未更新。

avro 模式文件需要在 hdfs 中,参考如下。

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