パーティションを持つ外部 HIVE テーブルを作成しようとしています。一部の列名には大文字が含まれています。これにより、大文字の列名の値が NULL として返されるため、テーブルの作成中に問題が発生しました。次に、SERDEPROPERTIES を使用してこれを処理するために ParquetSerDe を変更しましたが、これは外部テーブル (パーティション分割されていません) で動作していました。今、外部テーブル WITH パーティションを作成しようとしていますが、大文字の列 (例: FieldName) にアクセスしようとすると、このエラーが発生します。tablename から FieldName を選択します。
FAILED: RuntimeException Java. Lang.RuntimeException: cannot find field
FieldName from
[org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@4f45884b,
org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@8f11f27,
org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@77e8eb0e,
org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@1dae4cd,
org.apache.hadoop.hive.serde2.objectinspector.UnionStructObjectInspector$MyField@623e336d
]
考えられる提案はありますか?データ ソースのスキーマを変更できません。
これは、テーブルを作成するために使用するコマンドです-
CREATE EXTERNAL TABLE tablename (fieldname string)
PARTITIONED BY (partion_name string)
ROW FORMAT SERDE 'path.ModifiedParquetSerDeLatest'
WITH SERDEPROPERTIES ("casesensitive"="FieldName")
STORED AS INPUTFORMAT 'parquet.hive.DeprecatedParquetInputFormat'
OUTPUTFORMAT 'parquet.hive.DeprecatedParquetOutputFormat'
次に、パーティションを追加します。
ALTER TABLE tablename ADD PARTITION (partition_name='partitionvalue')
LOCATION '/path/to/data'