当前位置: 首页 > 知识库问答 >
问题:

带有ORC格式的Hive外部表-如何将orc文件中的列名映射到hive表列?

宗政燕七
2023-03-14

在使用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能够根据列名选择正确的顺序。如有任何解决此问题的建议,我们将不胜感激。

我没有选择更改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/';

共有1个答案

翟鹏
2023-03-14

Hive 2.1的ORC支持模式演化。来自Hive 2.3。通过设置这个属性,您可以同时执行位置演化和模式演化。武力位置。evolution请注意,所述属性的默认值为false

 类似资料:
  • 问题内容: 有没有办法查看配置单元大于等于0.11的orc文件的内容。我通常将cat gz文件解压缩,以查看其内容,例如:cat part-0000.gz | Pigz -d | 更多说明:pigz是并行的gz程序。 我想知道orc文件是否与此类似。 问题答案: 2020年更新的答案 : 根据@Owen的回答,ORC已经成长并成熟为自己的Apache项目。一个完整的ORC采纳者列表显示了现在它在多

  • 我正在从s3读取csv文件,并以ORC的身份写入配置单元表。在写的同时,它也在写大量的小文件。我需要合并所有这些文件。我设置了以下属性: 除了这些配置之外,我尝试了repartition(1)和coalesce(1),这将合并到单个文件中,但它会删除配置单元表并重新创建它。 如果我使用追加模式而不是覆盖模式,它会在每个分区下创建重复文件。 在这两种情况下,spark作业运行两次,在第二次执行时失败

  • 我有一些困难,以确保我利用已排序的数据在一个配置单元表。(使用ORC文件格式) 我知道我们可以通过在create DDL中声明子句来影响数据从配置单元表中读取的方式。 这意味着每次查询该表时,数据将通过在各个映射器之间分发,然后对其进行排序。 我的问题是: 我不希望数据被拆分为文件(桶),因为卷不是那么多,我会保留小文件。 但是,我确实想利用排序插入。 我真的需要在create DLL语句中使用吗

  • 我可以更新单个列,但不能更新从另一个表引用的多个列。 我启用了所有ACID属性以支持配置单元(1.2.1)表更新 我有两张桌子, 表1: 模式: 创建表table1(emp_id int,emp_name string,etime timestamp) 数据: emp_id | emp_name | etime 1|大卫|2016-01-08 12:27:30 约翰2016-01-08 12:27

  • 本文向大家介绍hive内部表和外部表的区别相关面试题,主要包含被问及hive内部表和外部表的区别时的应答技巧和注意事项,需要的朋友参考一下 解答: 内部表:加载数据到hive所在的hdfs目录,删除时,元数据和数据文件都删除 外部表:不加载数据到hive所在的hdfs目录,删除时,只删除表结构。