如何在hive中查找最近更新的值而不使用时间戳

f2uvfpb9  于 2021-06-01  发布在  Hadoop
关注(0)|答案(2)|浏览(471)

我有一张像这样的table

id name sal 
1  Saa  45000
2  aaa  33000

增量加载后

id name sal
3  bbb  55000

如何只获取最近更新的值而不带时间戳

0qx6xfy6

0qx6xfy61#

最简单、最有效的方法是使用分区。您可以拥有一个分区表,并在每次执行增量加载时创建一个新分区。这样,最新的分区将只有最新的记录。
请注意,非常频繁的增量加载可能会导致许多小分区,这可能不是最佳的数据设计。
有很多其他方法可以做到这一点,但这完全取决于您的用例、数据速率和容量。
希望有帮助!

gzszwxb4

gzszwxb42#

创建一个表。

hive> create table student(id int, name string);
OK
Time taken: 3.503 seconds

在表中插入一条记录。

hive> insert into student values(1, 'first');

hive> select * from student;
OK
1   first
Time taken: 0.109 seconds, Fetched: 1 row(s)

在配置单元终端上使用以下命令查找表的位置。i、 e学生表的元存储位置。

hive> describe formatted student;

You should get the details as shown below.

# Detailed Table Information

Database:               retaildb                 
Owner:                  root                     
CreateTime:             Thu Mar 08 15:52:47 PST 2018     
LastAccessTime:         UNKNOWN                  
Protect Mode:           None                     
Retention:              0                        
Location:               hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student

现在检查内容

[root@quickstart cloudera]# hdfs dfs -ls hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student
Found 1 items
-rwxr-xr-x   1 root supergroup          8 2018-03-08 15:53 hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student/000000_0
[root@quickstart cloudera]# hdfs dfs -cat hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student/*
1first

再插入一条记录。

hive> select * from student;
OK
1   first
1   second
Time taken: 0.095 seconds, Fetched: 2 row(s)

检查元存储位置。

[root@quickstart cloudera]# hdfs dfs -ls hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student/
Found 2 items
-rwxr-xr-x   1 root supergroup          8 2018-03-08 15:53 hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student/000000_0
-rwxr-xr-x   1 root supergroup          9 2018-03-08 15:57 hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student/000000_0_copy_1

[root@quickstart cloudera]# hdfs dfs -cat hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student/000000_0_copy_1
1second
[root@quickstart cloudera]# hdfs dfs -cat hdfs://quickstart.cloudera:8020/user/hive/warehouse/retaildb.db/student/*
1first
1second

相关问题