查看我的下一个Vertica查询:
WITH groupA AS (
SELECT
userId,
color
FROM worldUsers
WHERE DayPartition = 409
AND Hour = 12
)
SELECT
color = 12 AS userColor,
REGEXP_LIKE(familyName, '[a-z]+ish', 'i') ishPeople,
REGEXP_LIKE(familyName, '[a-z]+lem', 'i') lemPeople,
count(*) AS peopleCount,
round(count(*) / sum(count(*))
OVER (), 5.0) * 100 || '%' AS peoplePercentage
FROM PlanetUsers
JOIN groupA USING (userId)
WHERE DayPartition = 409
GROUP BY 1, 2, 3
ORDER BY 4 DESC
表格 worldUsers 和 PlanetUsers 都有字段Hour
,它们都由DayPartition
字段分区。如果我们更改以下查询的where语句
这
WHERE DayPartition = 409
要
WHERE DayPartition = 409 and AND Hour = 12
或更改使用声明
这
USING (userId)
要
USING (userId, Hour)
假设除DayPartition
上的分区外没有主键且没有投影
答案 0 :(得分:0)
该分区仅用于CTE的初始提取。 我建议你删除CTE,因为你有它们,并确保你有两个表由连接键排序(这表明你加入将是哈希或合并)。
分区将应用分区修剪并限制查询中使用的ROS数量。
因此,您的两个表都应按(userid,hour)排序。
在初始sql之上运行explain,确保你有stas,在查询中进行更改并再次查看解释。
在此处发布您的计划,我们可能会帮助您。