标题可能有点混乱。让我解释一下这个问题。我有一个每天加载新记录的管道。此记录包含销售额。关键是<日期、位置、票证、线路>。这些数据被加载到红移表中,然后通过系统读取的视图公开。这个系统有一个限制,票的列是 varchar(10) 但票是 30 个字符的字符串。如果系统只取前10个字符会产生重复。票号可以是“假”号。如果它不等于实数也没关系。所以我正在考虑在 redshift 表上添加一个包含渐进数字的新列。问题是我不能使用标识列,因为属于同一张票的记录必须具有相同的“累进编号”。
这就是我想要的:
天 | 地点 | 票 | 线 | 数量 | 票号 |
---|---|---|---|---|---|
2020 年 12 月 12 日 | 67 | 123...生长激素 | 1 | 10 | 1 |
2020 年 12 月 12 日 | 67 | 123...生长激素 | 2 | 5 | 1 |
2020 年 12 月 12 日 | 67 | 123...生长激素 | 3 | 23 | 1 |
2020 年 12 月 12 日 | 23 | 123...国标 | 1 | 13 | 2 |
2020 年 12 月 12 日 | 23 | 123...国标 | 2 | 45 | 2 |
... | ... | ... | ... | ... | ... |
2020 年 12 月 12 日 | 78 | 123...AG | 5 | 100 | 153 |
第二天加载新数据时,我想从 ticket_id 154 开始,依此类推。
每行都有一列,指定插入的时刻。同一天插入的行具有相同的 insert_time。
我的解决方案是:
- 插入带有ticket_id 作为dense_rank 的记录。但是每次(我加载新记录,所以每天)ticket_id 都从一个开始,所以......
- ...将刚刚插入的行更新为 ticket_id = ticket_id + 我在 ticket_id 列下找到的最大数量 insert_time != max(insert_time)
你认为有更好的解决方案吗?如果存在一个以 <day, location, ticket> 作为输入并返回最多 10 个字符的哈希函数,那就太好了。