【发布时间】:2019-08-21 02:16:15
【问题描述】:
我有一个名为EXAM_RESULTS. 的表的下面提到的orc 文件,这个表首先有一个初始加载,然后会有增量加载。通过增量加载而来的新记录可能会将新记录带入 EXAM_RESULTS 表或现有记录的更新版本。
前四个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 查询输出每条记录的最新版本。
例如:
现有表显示以下信息(也将是 SELECT * FROM TEST_MARKS.EXAM_RESULTS 查询的输出):
Student_Name marks_sub1 marks_sub2 marks_sub3 marks_sub4 total_marks avg_marks
ABC 67 89 76 93 325 81.25
XYZ 23 14 80 56 173 43.25
PQR 50 67 98 44 259 64.75
ABC 67 92 78 93 329 82.25
XYZ 88 61 76 56 281 70.25
在这里,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 查询中进行过滤。
我对 Hive 和 HDFS 完全陌生,不知道如何实现这一点。
有人可以帮帮我吗?
【问题讨论】: