Für partitionierte Avro Hive-Tabellen werden Feldnamen, die im Avro-Schema Großbuchstaben enthalten, als null zurück gezogen. Ich habe mich gefragt, ob es ein Setting/Workaround gibt, das mir fehlt, oder ob das nur ein Fehler mit dem Hive Context ist.Spark Hive Context - Avro-Tabelle mit Partitionen und Großbuchstaben Feldnamen
ich schon versucht habe folgendes DDL Zugabe:
WITH SERDEPROPERTIES ('casesensitive'='FieldName')
... und Einstellung spark.sql.caseSensitive auf true/false
Spark-Version 1.5.0 Hive-Version 1.1 0,0
können Sie das Problem neu erstellen, indem Sie die folgenden DDL in Hive ausgeführt wird:
-- 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');
... & dann versuchen, aus den Tabellen SQL (Funken Shell) mit Funken wählen:
sqlContext.sql("select * from default.avro_partitions").show
+-----+----+
|field|part|
+-----+----+
| null| 01|
+-----+----+
sqlContext.sql("select * from default.avro_no_partitions").show
+-----+
|field|
+-----+
| test|
+-----+