2016-10-08 12 views
2

まず、以下のようにavroハイブテーブルを作成しました。テーブルのプロパティをavro.schema.literalからavro.schema.urlに設定した後、ハイブの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"}') 

私はデータを見ることができました。

私はいくつかのスキーマを変更しましたが、今回は以下のコードを使用しました。

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という2つのフィールドのみが表示されています。

以下のように、リテラルでスキーマが提供されている場合も同様です。

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

答えは見つかりましたか? literalとurlの両方のスキーマは、ハイブテーブルで使用できます。 –

+0

答えを見つけました。ALTER TABLE UNSET TBLPROPERTIES( 'avro.schema.literal');これを行うと、 'avro.schema.url'が有効になります。 –

答えて

1

avroスキーマファイルはhdfsに存在する必要があり、参照は以下のようになります。

TBLPROPERTIES ('avro.schema.url'='hdfs:///user/cloudera/categories.avsc') 
関連する問題