Sql 通过将id分配给物化视图来配对长字符串
我试图用ID替换大字符串(几百个字符),以创建一个简单的物化视图配对序列,而不需要保留原始字符串。我在PostgreSQL中创建了一个子查询,其输出类似于下面的示例(为了简单起见,使用缩写字符串): 我试图将其浓缩成如下所示:Sql 通过将id分配给物化视图来配对长字符串,sql,postgresql,Sql,Postgresql,我试图用ID替换大字符串(几百个字符),以创建一个简单的物化视图配对序列,而不需要保留原始字符串。我在PostgreSQL中创建了一个子查询,其输出类似于下面的示例(为了简单起见,使用缩写字符串): 我试图将其浓缩成如下所示: feat_uniquename | segment1 | segment2 | segment3 -----------------+---------------------+---------- SEQ000001.1 | 1 | 1
feat_uniquename | segment1 | segment2 | segment3
-----------------+---------------------+----------
SEQ000001.1 | 1 | 1 | 1
-----------------+---------------------+----------
SEQ000001.2 | 2 | 2 | 1
-----------------+---------------------+----------
SEQ000001.3 | 3 | 2 | 1
-----------------+---------------------+----------
SEQ000001.4 | 4 | 1 | 1
在物化视图中保留长字符串可能会导致内存效率低下,并且行关联速度可能较慢,但我不知道如何仅使用SQL继续。如果不使用迭代过程(在SQL中也可能吗?),似乎不可能链接这些值。作为最后一种手段,我可以使用Python字典压缩字符串,写入分隔文本文件,然后解析以创建物化视图。如果只有三列这样的数据,可以通过将每个唯一值映射到任意索引来创建查找表,然后在每次查找时加入表并选择索引列。比如说,
WITH lookup1 AS (SELECT DISTINCT
segment1,
row_number() over(partition by segment1) as index1
)
SELECT
feat_uniquename,
index1
FROM
original_table t1
INNER JOIN
lookup1 t2
ON t1.segment1 = t2.segment1
好主意,但是当一个新密码子被添加到数据集中时会发生什么呢?或者是否应该从数据集中删除一个密码子?我会尝试一下。我计划在数据集更改时重新创建物化视图。谢谢更新:行分区接近我想要的,但我最终使用了行计数。我投票赞成保留序列的当前状态。毕竟,它代表了您的实际数据。试图将它们映射到数字序列存在各种各样的陷阱。
WITH lookup1 AS (SELECT DISTINCT
segment1,
row_number() over(partition by segment1) as index1
)
SELECT
feat_uniquename,
index1
FROM
original_table t1
INNER JOIN
lookup1 t2
ON t1.segment1 = t2.segment1