【发布时间】:2020-12-12 16:39:12
【问题描述】:
标题可能有点混乱。让我解释一下这个问题。我有一个每天加载新记录的管道。此记录包含销售额。关键是。这些数据被加载到红移表中,然后通过系统读取的视图公开。这个系统有一个限制,票的列是 varchar(10) 但票是 30 个字符的字符串。如果系统只取前10个字符会产生重复。票号可以是“假”号。如果它不等于实数也没关系。所以我正在考虑在 redshift 表上添加一个包含渐进数字的新列。问题是我不能使用标识列,因为属于同一张票的记录必须具有相同的“累进编号”。然后我会公开这个新列(ticket_id)而不是原来的列。
这就是我想要的:
| day | location | ticket | line | amount | ticket_id |
|---|---|---|---|---|---|
| 12/12/2020 | 67 | 123...GH | 1 | 10 | 1 |
| 12/12/2020 | 67 | 123...GH | 2 | 5 | 1 |
| 12/12/2020 | 67 | 123...GH | 3 | 23 | 1 |
| 12/12/2020 | 23 | 123...GB | 1 | 13 | 2 |
| 12/12/2020 | 23 | 123...GB | 2 | 45 | 2 |
| ... | ... | ... | ... | ... | ... |
| 12/12/2020 | 78 | 123...AG | 5 | 100 | 153 |
第二天加载新数据时,我希望从ticket_id 154 开始,依此类推。
每一行都有一列指定插入的时刻。同一天插入的行具有相同的 insert_time。
我的解决办法是:
- 插入带有ticket_id 作为dense_rank 的记录。但是每次(我加载新记录,所以每天)ticket_id 都从一个开始,所以...
- ... 将刚刚插入的行更新为 ticket_id = ticket_id + 我在其中 insert_time != max(insert_time) 的 ticket_id 列下找到的最大数量
您认为有更好的解决方案吗?如果存在一个以
【问题讨论】:
-
看来您应该修复数据模型,以便存储原始票证的正确长度。
-
生成自定义顺序标识符是一个常见的话题。但是,不知道如何在 Redshift 中编程(我已经用 VBA 完成了)。否则,在需要时计算查询中的序列。
-
戈登,存储这些数据的系统不想改变他的模型
标签: sql amazon-redshift data-pipeline