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を指定することはできません。
しかし、これは機能しません。テーブルスキーマが更新されません。
解決策を見つけましたか? –
答えは見つかりましたか? literalとurlの両方のスキーマは、ハイブテーブルで使用できます。 –
答えを見つけました。ALTER TABLE UNSET TBLPROPERTIES( 'avro.schema.literal');これを行うと、 'avro.schema.url'が有効になります。 –