Hive 不支持数据的update 和 delete, 有什么方法可以实现关系型数据库的增删改查功能,下面是自己的一点探索
主要从两个方面着手: 一是数据怎么存储? 二是数据怎么查询?
存储: 设置2层动态分区, record 的create_time 转换成day 作为第一层分区 和 record 更新记录标识flag作为第二层记录 (N-表示新记录, U-表示更新记录, D- 表示删除记录)
例如 一张 用户购买记录表test_user, 字段如下:
![7043647e66b3e4625367a79faf95c6c3.png](https://img-blog.csdnimg.cn/img_convert/7043647e66b3e4625367a79faf95c6c3.png)
(其中 day和f 表示分区字段)
假设 2019-01-01 有3条用户记录, 模拟数据生成的SQL 如下
![e7f654eb4c4cab6fdeaac66eac9b3f92.png](https://img-blog.csdnimg.cn/img_convert/e7f654eb4c4cab6fdeaac66eac9b3f92.png)
生成数据如下
![20d12bbe2b70e00ce5603e50f36d8e54.png](https://img-blog.csdnimg.cn/img_convert/20d12bbe2b70e00ce5603e50f36d8e54.png)
当在 2019-01-02 时间, 用户01 的金额 发生了变化 由 100 变成 150 模拟数据生成的SQL 如下
![265d4630d1e094a8856846822c4251ae.png](https://img-blog.csdnimg.cn/img_convert/265d4630d1e094a8856846822c4251ae.png)
这时候 test_user 表 数据 变成如下:
![a5ff20c6591b3ecfd167f4194aa6b967.png](https://img-blog.csdnimg.cn/img_convert/a5ff20c6591b3ecfd167f4194aa6b967.png)
当在 2019-01-02 时间, 用户02 的金额 发生了变化 由 200 变成 250, 用户03 的记录删除了 模拟数据生成的SQL 如下
![36f2b9a11a4bb9a225c171b686586ef6.png](https://img-blog.csdnimg.cn/img_convert/36f2b9a11a4bb9a225c171b686586ef6.png)
![606ba03524d2e12783061b87d1630e59.png](https://img-blog.csdnimg.cn/img_convert/606ba03524d2e12783061b87d1630e59.png)
这时候 test_user 表 数据 变成如下:
![08414ca6e69ed5c6bd43b5b0f85e2f4d.png](https://img-blog.csdnimg.cn/img_convert/08414ca6e69ed5c6bd43b5b0f85e2f4d.png)
现在要展示 用户 1,2,3 他们最终的状态, 查询SQL的写法
![775b92415fe67509faa12accb8ad73e6.png](https://img-blog.csdnimg.cn/img_convert/775b92415fe67509faa12accb8ad73e6.png)
结果如下:
![97916ca6d7d3440e5144a45ba08a592f.png](https://img-blog.csdnimg.cn/img_convert/97916ca6d7d3440e5144a45ba08a592f.png)