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|
+-----+