2016-10-08 25 views
2

首先,我創建了一個avro配置表,如下所示。將表的屬性從avro.schema.literal設置爲avro.schema.url後未更新Hive avro表架構

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

架構未更新。表只顯示了兩個字段,即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。

但這不起作用。表架構沒有得到更新。

+0

您是否找到了解決方法? –

+0

你找到了這個答案嗎?在hive表中可以使用文字和網址架構。 –

+0

找到答案ALTER TABLE UNSET TBLPROPERTIES('avro.schema.literal');如果你這樣做,那麼'avro.schema.url'將被放寬。 –

回答

1

avro模式文件需要在hdfs中,引用可能如下所示。

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