我有下面提到的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
查询输出每个记录的最新版本。
对于exmaple:existing表显示了以下信息(同时也是 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完全陌生,不知道如何做到这一点。
有人能帮我吗?
1条答案
按热度按时间iecba09b1#
您可以在配置单元中使用input\u file\u name虚拟列,并使用最大文件名记录。
新文件如下:
EXAM_RESULTS_2019-08-20_12-55-10.985.orc
包含可排序格式的日期,并且可以对整个文件名进行排序。像这样的旧文件part-m-00000
也可以排序,但问题是与新文件比较时'part-m-00000'<'EXAM_RESULTS_2019-08-20_12-55-10.985.orc' = false
. 我提议撤职part-m-
从文件名进行排序,以便以适当的方式进行排序,所以'00000'< 'EXAM_RESULTS_2019-08-20_12-55-10.985.orc'
. 这样就可以使用row_number
要查找最新记录: