gpt4 book ai didi

sql - redshift select distinct 返回重复值

转载 作者:行者123 更新时间:2023-12-03 16:59:25 24 4
gpt4 key购买 nike

我有一个数据库,其中每个对象属性都存储在单独的行中。附加的查询不会在 redshift 数据库中返回不同的值,但在任何与 mysql 兼容的数据库中测试时都按预期工作。

SELECT DISTINCT distinct_value 
FROM
(
SELECT
uri,
( SELECT DISTINCT value_string
FROM `test_organization__app__testsegment` AS X
WHERE X.uri = parent.uri AND name = 'hasTestString' AND parent.value_string IS NOT NULL ) AS distinct_value
FROM `test_organization__app__testsegment` AS parent
WHERE
uri IN ( SELECT uri
FROM `test_organization__app__testsegment`
WHERE name = 'types' AND value_uri_multivalue = 'Document'
)
) AS T
WHERE distinct_value IS NOT NULL
ORDER BY distinct_value ASC
LIMIT 10000 OFFSET 0

最佳答案

这不是错误,行为是有意的,尽管并不简单。

在 Redshift 中,您可以在表上声明约束,但 Redshift 不会强制执行它们,即如果您插入它们,它允许重复值。这里唯一的区别是当你运行 SELECT DISTINCT 时对没有声明主键的列进行查询,它将扫描整个列并获取唯一值,如果您在具有主键约束的列上运行相同的查询,它将只返回输出 不执行唯一列表过滤 .如果您插入它们,这就是您可以获得重复条目的方式。

为什么要这样做? Redshift 针对大型数据集进行了优化,如果您不需要检查复制或插入的每一行的约束有效性,则复制数据的速度要快得多。如果您愿意,您可以将主键约束声明为数据模型的一部分,但您需要通过删除重复项或以没有这样的方式设计 ETL 来明确支持它。

这篇 Heap 博文 Redshift Pitfalls And How To Avoid Them 中的具体示例的更多信息

关于sql - redshift select distinct 返回重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32875895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com