是否会在 ORC 文件中读取所有嵌套列?
Will all nested columns be read in an ORC file?
假设我有一个像这样的 Hive 查询:
CREATE TABLE student (key string, name string, course struct<class_name:string, class_teacher:string>)
STORED AS ORC;
由于 ORC 文件格式,这将创建 5 个不同的列:
| key | name | course | course.class_name | course.class_teacher |
当尝试只读取 course.class_name
列时,是否每次都会读取 course
的两个子列?就像 course.class_name
和 course.class_teacher
一样?据我所知,ORC 文件格式允许 Hive 仅加载查询所需的列。那么它实际上会做什么?
你的理解是对的。它将读取 select 查询中指定的唯一列。
如果 select 查询是:
Select course.class_name from student
它将 return 仅 class_name。
如果您想查询结构的所有列,可以使用以下内容。
select key, name, c.* from students
lateral view inline (array(course)) c
假设我有一个像这样的 Hive 查询:
CREATE TABLE student (key string, name string, course struct<class_name:string, class_teacher:string>)
STORED AS ORC;
由于 ORC 文件格式,这将创建 5 个不同的列:
| key | name | course | course.class_name | course.class_teacher |
当尝试只读取 course.class_name
列时,是否每次都会读取 course
的两个子列?就像 course.class_name
和 course.class_teacher
一样?据我所知,ORC 文件格式允许 Hive 仅加载查询所需的列。那么它实际上会做什么?
你的理解是对的。它将读取 select 查询中指定的唯一列。
如果 select 查询是:
Select course.class_name from student
它将 return 仅 class_name。
如果您想查询结构的所有列,可以使用以下内容。
select key, name, c.* from students
lateral view inline (array(course)) c