【发布时间】:2017-02-17 05:54:56
【问题描述】:
首先我创建了一个如下所示的 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 和用户名。
当模式以如下文字形式提供时,同样的事情也有效。
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。
但这不起作用。表架构未更新。
【问题讨论】:
-
你找到解决办法了吗?
-
你找到答案了吗?文本和 url 模式都在 hive 表中可用。
-
找到答案 ALTER TABLE
. UNSET TBLPROPERTIES('avro.schema.literal');如果你这样做,那么“avro.schema.url”将被启用。