2016-03-20 18 views
2

Bölümlenmiş Avro Hive tabloları için, Avro şemasında büyük harf karakterleri olan alan adları boş olarak geri çekiliyor. Eksik olduğum bazı ayarların/çözümlerin olup olmadığını merak ettim, ya da bu sadece Hive Context ile bir hataysa.Spark Hive Bağlam - Bölümler ve büyük harf alan adlarıyla Avro tablosu

Zaten DDL aşağıdaki ekleyerek denedim

:

WITH SERDEPROPERTIES ('casesensitive'='FieldName') 

... ve spark.sql.caseSensitive ayarı doğru/yanlış

Kıvılcım sürüm 1.5.0 Kovanı sürüm 1.1 0,0

Sen Hive aşağıdaki DDL çalıştırarak sorunu yeniden oluşturabilirsiniz:

-- 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'); 

... & sonra Spark SQL (kıvılcım-kabuk) kullanarak tablolardan seçmek için çalışıyor: Bu büyük isim için bir takma ad eklemeyi & küçük harfli ismini yaparak şema tanımında çözülebilir

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

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

cevap

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'); 

Kıvılcım sürüm 1.6.0