0

次のjsonコンテンツに基づいて作成した寄木細工のテーブルの上にハイブテーブルを配置しようとしています:
{"user_id":"4513","providers":[{"id":"4220","name" :"dbmvl","behaviors":{"b1":"gxybq","b2":"ntfmx"}},{"id":"4173","name":"dvjke","behaviors":{ "b1":"sizow","b2":"knuuc"}}]}

{"user_id":"3960","providers":[{"id":"1859","name":"ponsv", "behaviors":{"b1":"ahfgc","b2":"txpea"}},{"id":"103","name":"uhqqo","behaviors":{"b1":" lktyo","b2":"ituxy"}}]}

{"user_id":"567","providers":[{"id":"9622","name":"crjju","behaviors":{ "b1":"rhaqc","b2":"npnot"}},{"id":"6965","name":"fnheh","behaviors":{"b1":"eipse","b2 ":"nvxqk"}}]}"nvxqk"}}]}"nvxqk"}}]}

基本的に、spark sql を使用して json を読み取り、寄木細工のファイルを書き出しました。

生成された寄木細工ファイルの上にハイブを配置する際に問題が発生しています。これが私が持っているハイブhqlです:
create table test (mycol STRUCT<user_id:String, providers:ARRAY<STRUCT<id:String, name:String, behaviors:MAP<String, String>>>>) stored as parquet; Alter table test set location 'hdfs:///tmp/test.parquet'; 上記のステートメントは正常に実行されますが、テーブルでselect *を実行しようとするとエラーが発生します:
例外java.io.IOException:java.lang.IllegalStateExceptionで失敗しました:インデックス0の列mycol {providers=providers, user_id=user_id} に存在しません

4

1 に答える 1

1

クエリを次のように変更してみてください。

create table test (user_id:String, providers:ARRAY<STRUCT<id:String, name:String, behaviors:MAP<String, String>>>) stored as parquet;

Parquet ファイルが格納されると、ルート JSON オブジェクトがフラット化されます。

于 2015-03-16T18:57:56.763 に答える