hadoop - Hive 中区分大小写的列名称

标签 hadoop hive parquet

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

最佳答案

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

路径“/columnname=value/”总是不同于 unix 中的路径“/columnName=value/”

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

关于hadoop - Hive 中区分大小写的列名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24767158/

相关文章:

hadoop - 如何Hadoop Map Reduce整个文件

hive - Hive 自定义 SerDe 可以生成多行吗?

apache-spark - presto 是否需要 Hive Metastore 才能从 S3 读取 Parquet 文件?

hadoop - Hive 是否可以在不分区或不编辑 hive-site.xml 的情况下递归下降到子目录?

scala - 在 Flink 的 DataStream API 中将 Parquet 文件作为数据流进行连续处理

hadoop - HBase 集群在 HDFS 上有损坏的区域文件

java - 在 Java 中加入 Hadoop

scala - openshift云计算配置,是否可能在云上完成?

hadoop - 大数据信号分析 : better way to store and query signal data

c++ - 构建 parquet-cpp 时如何静态链接 Arrow?