使用ORC格式的Hive 外部表-如何将ORC文件中的列名映射到Hive表列?



在使用ORC文件格式的Hive中,有没有办法将列名映射到独立于列顺序的Hive表列?

orc 文件的示例架构:

root
|-- age: string (nullable = true)
|-- first_name: string (nullable = true)
|-- last_name: string (nullable = true)
|-- salary: string (nullable = true) 
|-- load_date: date (nullable = true) 

所需的配置单元表列顺序:

first_name
last_name
age
salary

但是当我创建具有所需列顺序的表时,数据无法正确排列。Hive 根据列顺序而不是列名称获取数据。这适用于 Parquet 格式,其中 Hive 能够根据列名称选取正确的顺序。任何解决此问题的建议将不胜感激。

我无法选择更改由外部进程创建的 orc 文件架构。也不想创建任何中间临时表并插入覆盖选项。

Hive Table DDL:
create external table if not exists test.user_profile(
first_name String,
last_name String,
age String,
salary String)
PARTITIONED BY (load_date String)
stored as orc
Location '/test/user_profile_data/';

Hive 2.1 的 ORC 支持架构演变。 从 Hive 2.3.x 开始,您可以通过设置此属性来同时执行位置演变和架构演变orc.force.positional.evolution请注意,所述属性的默认值为 false

最新更新