我的 SQL 编辑器和 Python psycopg2 查询之间的记录计数差异

Difference in record counts between my SQL editor and Python psycopg2 query

提问人:vizyourdata 提问时间:11/10/2023 更新时间:11/10/2023 访问量:69

问:

我正在运行从 sql 编辑器复制到 python 的完全相同的 redshift 查询。在 python 中,我测试了来自 pandas.read_sql 的计数,并直接 psycopg2 cursor.execute 查询。在 SQL 编辑器方面,我已经测试了 dbeaver、beekeeper 和 mysqlworkbench 中的计数。我去除了所有联接,以简化查询,环境类型之间发生相同的差异。我已经检查了所有环境中的getdate(),并看到了相同的时间戳,以排除环境之间时区的任何差异。如果是几条记录,我可以将其归因于时间,但在 20 个月的窗口期内,它在 30-6k 范围内。我还应该检查什么?

简化查询:

select count(distinct u.customerid)
from users u   

Python 设置:

conn = psycopg2.connect(f"dbname={DB} host={HOST} port={PORT} 
user={USER} password={PWD}")
cursor = conn.cursor()

cursor.execute('''  select count(distinct u.customerid)
                    from users u
        ''')
result = cursor.fetchone()
print(result)
conn.close()
python sql amazon-redshift psycopg2

评论

0赞 Quassnoi 11/10/2023
您提到了 6 个月的窗口,但您的查询都没有使用这些东西。您忘记添加条件了吗?GETDATE()
0赞 vizyourdata 11/10/2023
当我第一次注意到差异时,我在原始查询中有日期。为了进一步排除任何日期计算问题,我删除了它们,并将其反映在简化的查询中。
1赞 Quassnoi 11/10/2023
只是为了排除显而易见的问题:您在两个设置中使用相同的数据库、主机、端口和用户吗?Redshift 具有行级安全性,这可能会影响不同用户看到的数据。你能在你的两个客户中运行,看看计划是否匹配吗?EXPLAIN
0赞 Quassnoi 11/10/2023
另外,您的 CustomerID 是什么类型?如果它是任何类型的字符类型,则可能是排序问题,这对 .计数不匹配吗?DISTINCTDISTINCT
0赞 vizyourdata 11/10/2023
这是一个varchar。我测试了 count(*)、count(customerid) 以及所有与原始查询具有相同方差的select customerid

答: 暂无答案