Hive 如何仅从多个ORC文件(通过配置单元表)中检索记录的最新版本,这些文件包含每个记录的多个版本?

Hive 如何仅从多个ORC文件(通过配置单元表)中检索记录的最新版本,这些文件包含每个记录的多个版本?,hive,hdfs,orc,Hive,Hdfs,Orc,我有下面提到的orc文件,用于一个名为检查结果的表。此表首先有一个初始负载,然后会有增量负载。通过增量加载产生的新记录可能会将新记录带入考试结果表或现有记录的更新版本 前四个ORC文件(文件结尾为part-m-00000至00003的文件)来自初始加载,另一个来自在不同日期和时间执行的不同增量加载,可以在文件名的日期时间信息中看到 -rw-r--r-- 3 mysql hdfs 15808 2019-08-19 11:55 /INFO/CLASSROOM/TEST_MARKS/EX

我有下面提到的orc文件,用于一个名为
检查结果的表。
此表首先有一个初始负载,然后会有增量负载。通过增量加载产生的新记录可能会将新记录带入考试结果表或现有记录的更新版本

前四个
ORC
文件(文件结尾为
part-m-00000
00003
的文件)来自初始加载,另一个来自在不同日期和时间执行的不同增量加载,可以在文件名的日期时间信息中看到

-rw-r--r--   3 mysql hdfs      15808 2019-08-19 11:55 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_11-55-49.355.orc
-rw-r--r--   3 mysql hdfs      22068 2019-08-19 12:33 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_12-33-37.642.orc
-rw-r--r--   3 mysql hdfs      15714 2019-08-19 12:42 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_12-42-10.203.orc
-rw-r--r--   3 mysql hdfs      20297 2019-08-19 12:52 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_12-52-08.658.orc
-rw-r--r--   3 mysql hdfs      17082 2019-08-19 18:11 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_18-11-53.338.orc
-rw-r--r--   3 mysql hdfs      14446 2019-08-20 07:59 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-20_07-59-31.911.orc
-rw-r--r--   3 mysql hdfs      27128 2019-08-20 12:55 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-20_12-55-10.985.orc
-rw-r--r--   3 hdfs   hdfs   18652678 2019-07-30 14:37 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/part-m-00000
-rw-r--r--   3 hdfs   hdfs   22259778 2019-07-30 14:37 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/part-m-00001
-rw-r--r--   3 hdfs   hdfs   16816786 2019-07-30 14:37 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/part-m-00002
-rw-r--r--   3 hdfs   hdfs   18608955 2019-07-30 14:37 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/part-m-00003
现在,我想从这个表中查询记录,以便我的
SELECT
query输出每个记录的最新版本

对于exmaple: 现有表格显示了以下信息(同时也是从考试分数.考试结果查询中选择*的输出):

在这里,学生们更新了他们的分数,
ABC
XYZ
,而
PQR
的数据没有变化-这些更新后的记录是通过增量加载插入表中的
ABC
XYZ

我试图实现的是,我希望有一个
SELECT
查询只显示每个记录的最新记录。例如,我的查询结果应显示以下数据:

Student_Name    marks_sub1  marks_sub2  marks_sub3  marks_sub4  total_marks avg_marks
 ABC            67          92          78          93          329         82.25
 XYZ            88          61          76          56          281         70.25
 PQR            50          67          98          44          259         64.75
我不知道该怎么做,因为我的表中没有可以用来过滤最新数据的列。我需要使用文件名中的日期和时间信息,以便在我的
SELECT
query中进行过滤

我对Hive和HDFS完全陌生,不知道如何实现这一点


有人能帮我吗?

您可以使用配置单元中的输入文件名虚拟列,并以最大文件名记录

-rw-r--r--   3 mysql hdfs      15808 2019-08-19 11:55 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_11-55-49.355.orc
-rw-r--r--   3 mysql hdfs      22068 2019-08-19 12:33 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_12-33-37.642.orc
-rw-r--r--   3 mysql hdfs      15714 2019-08-19 12:42 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_12-42-10.203.orc
-rw-r--r--   3 mysql hdfs      20297 2019-08-19 12:52 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_12-52-08.658.orc
-rw-r--r--   3 mysql hdfs      17082 2019-08-19 18:11 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-19_18-11-53.338.orc
-rw-r--r--   3 mysql hdfs      14446 2019-08-20 07:59 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-20_07-59-31.911.orc
-rw-r--r--   3 mysql hdfs      27128 2019-08-20 12:55 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/EXAM_RESULTS_2019-08-20_12-55-10.985.orc
-rw-r--r--   3 hdfs   hdfs   18652678 2019-07-30 14:37 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/part-m-00000
-rw-r--r--   3 hdfs   hdfs   22259778 2019-07-30 14:37 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/part-m-00001
-rw-r--r--   3 hdfs   hdfs   16816786 2019-07-30 14:37 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/part-m-00002
-rw-r--r--   3 hdfs   hdfs   18608955 2019-07-30 14:37 /INFO/CLASSROOM/TEST_MARKS/EXAM_RESULTS/part-m-00003
像这样的新文件:
example\u RESULTS\u 2019-08-20\u 12-55-10.985。orc
以可排序的格式包含日期,并且可以对整个文件名进行排序。 像这样的旧文件
part-m-00000
也可以排序,但问题是与新文件相比
“part-m-00000”
select Student_Name    marks_sub1  marks_sub2  marks_sub3  marks_sub4  total_marks avg_marks
from 
(
select e.*, row_number() over(partition by Student_Name order by filename desc) rn
from
(select regexp_replace(INPUT__FILE__NAME,'part-m-','') filename, e.* from TEST_MARKS.EXAM_RESULTS e )e
)s
where rn=1;