2016-03-20 21 views
2

パーティション化されたAvro Hiveテーブルの場合、Avroスキーマの大文字を持つフィールド名はnullとして取り戻されます。私はいくつかの設定/回避策があるかどうか、またはこれがHive Contextのバグに過ぎないかどうか疑問に思っていました。Spark Hive Context - パーティションと大文字のフィールド名を持つAvroテーブル

私はすでにDDLに次の追加しようとしました:

WITH SERDEPROPERTIES ('casesensitive'='FieldName') 

を...そして真/偽

スパークバージョン1.5.0 ハイブバージョン1.1にspark.sql.caseSensitiveを設定します0.0

あなたはハイブで次のDDLを実行して、問題を再作成することができます

-- Hive DDL using partitions 
CREATE TABLE avro_partitions (Field string) 
PARTITIONED BY (part string) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' 
TBLPROPERTIES ('avro.schema.literal'= 
    '{ "type":"record", "name":"avro_partitions", "namespace":"default", "fields":[ {"name":"Field", "type":"string"} ] }'); 
INSERT INTO avro_partitions PARTITION (part='01') VALUES('test'); 

-- Hive DDL without partitions 
CREATE TABLE avro_no_partitions (Field string) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' 
TBLPROPERTIES ('avro.schema.literal'= 
    '{ "type":"record", "name":"avro_no_partitions", "namespace":"default", "fields":[ {"name":"Field", "type":"string"} ] }'); 
INSERT INTO avro_no_partitions VALUES('test'); 

... &は、スパークSQL(スパーク・シェル)を使用して表から選択しようとしている:これは大文字の名前のエイリアスを追加&を小文字の名前を作ることによって、スキーマ定義に解決することができます

sqlContext.sql("select * from default.avro_partitions").show 
+-----+----+ 
|field|part| 
+-----+----+ 
| null| 01| 
+-----+----+ 

sqlContext.sql("select * from default.avro_no_partitions").show 
+-----+ 
|field| 
+-----+ 
| test| 
+-----+ 

答えて

0

CREATE TABLE avro_partitions (Field string) 
PARTITIONED BY (part string) 
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe' 
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat' 
TBLPROPERTIES ('avro.schema.literal'= 
    '{ "type":"record", "name":"avro_partitions", "namespace":"default", "fields":[ {"name":"field", "aliases":["Field"], "type":"string"} ] }'); 
INSERT INTO avro_partitions PARTITION (part='01') VALUES('test'); 

スパークバージョン1.6.0

関連する問題