0
下面是我用我的Postgres的原始查询 -如何在Amazon Redshift中编写此postgres查询,使其与postgres中的优化程序一样优化?
SELECT a.id,
(SELECT val
FROM database.detail x
WHERE name = 'blablah'
AND x.id = b.id) AS myGroup,
c.username,
a.someCode,
a.timeTaken,
a.date ::timestamp WITH time ZONE AT time ZONE 'PST' AS date,
SUM (CASE WHEN (b.name = 'name1') THEN b.val ::INTEGER ELSE 0 END) AS name11,
SUM (CASE WHEN (b.name = 'name2') THEN b.val ::INTEGER ELSE 0 END) AS name12
FROM
database.myTable a,
database.detail b,
database.client c
WHERE
a.id = b.id
AND a.c_id = c.c_id
AND a.date > current_date - interval '2 weeks'
GROUP BY 1, 2, 3, 4, 5, 6
以下是我如何转换此查询到亚马逊红移查询。
SELECT a.id,
b.val AS myGroup,
c.username,
a.someCode,
a.timeTaken,
convert_timezone('PST', a.date) AS date,
SUM (CASE WHEN (b.name = 'name1') THEN b.val ::INTEGER ELSE 0 END) AS name11,
SUM (CASE WHEN (b.name = 'name2') THEN b.val ::INTEGER ELSE 0 END) AS name12
FROM
database.myTable a,
database.detail b,
database.client c
WHERE
a.id = b.id
AND b.name = 'blablah'
AND a.c_id = c.c_id
AND a.date > current_date - interval '2 weeks'
GROUP BY 1, 2, 3, 4, 5, 6 LIMIT 10
CASE语句似乎没有执行预期的方式,基本上name11和name12的值都是零。我的postgres查询返回这些值的有效值,但红移查询不。
另外,这个查询非常慢。 Postgres查询需要大约150毫秒,这个查询需要2分钟。
我们该如何做得更好?
我得到一个错误 - 字符不存在---为myGroupSet为(SELECT b.val AS ....看起来它是不能够访问表b? – Tisha
朋友,SQL只是一个基于你的输入的模拟SQL。请根据你的实际表格和列调整SQL。我分享了一个有关Redshift如何有效的概念以及如何将ANSI SQL转换为兼容Redshift SQL。 – kadalamittai