Hive中区分大小写的列名称

时间:2014-07-15 20:03:21

标签: hadoop hive parquet

我正在尝试使用分区创建外部HIVE表。我的一些 列名称包含大写字母。这在创建时引起了问题 表,因为大写字母的列名的值是 返回为NULL。然后我修改了ParquetSerDe以便它 通过使用SERDEPROPERTIES来处理这个问题,而这正在使用外部表(未分区)。现在我 尝试创建一个带有分区的外部表,每当我尝试时 访问大写列(例如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'

1 个答案:

答案 0 :(得分:1)

这是一个老问题,但分区列必须区分大小写,因为存储它的unix文件系统。

路径" / collumnname = value /"总是不同于路径" / collumnName = value /"在unix中

因此,依赖Hive的不区分大小写的列名称应该被认为是一种不好的做法。