【发布时间】:2021-04-22 06:18:20
【问题描述】:
我要加入两张表现不佳的牌桌。
表 1:
| Period | Zone | Country | company | product |
|---|---|---|---|---|
| 01/01/2020 | EMEA | DE | WKDM2 | Product1 |
| 01/02/2020 | EMEA | DE | PRL56 | Product1 |
| 01/03/2020 | EMEA | UK | ORD56 | Product2 |
| 01/04/2020 | EMEA | DE | GFDS | Product3 |
| 01/05/2020 | EMEA | FR | 24GFDSGF2 | Product1 |
| 01/06/2020 | EMEA | DE | 2GFSDG37 | Product3 |
| 01/07/2020 | EMEA | IT | 2GFDSG35 | Product1 |
| 01/08/2020 | EMEA | DE | 23GSFDG6 | Product4 |
| 01/09/2020 | EMEA | DE | 23GSFDG5 | Product6 |
| 01/10/2020 | EMEA | IT | 24GSFD1 | Product1 |
| 01/11/2020 | EMEA | DE | 23GSDF6 | Product3 |
| 01/12/2020 | EMEA | FI | 24GFSDG1 | Product8 |
表2:
| Period | Zone | Country | Quarter | Year | company | product |
|---|---|---|---|---|---|---|
| 01/01/2020 | EMEA | DE | 01/01/2020 | 01/01/2020 | WKDM2 | Product1 |
| 01/02/2020 | EMEA | DE | 01/01/2020 | 01/01/2020 | PRL56 | Product1 |
| 01/03/2020 | EMEA | UK | 01/01/2020 | 01/01/2020 | ORD56 | Product2 |
| 01/04/2020 | EMEA | DE | 01/04/2020 | 01/01/2020 | GFDS | Product3 |
| 01/05/2020 | EMEA | FR | 01/04/2020 | 01/01/2020 | 24GFDSGF2 | Product1 |
| 01/06/2020 | EMEA | DE | 01/04/2020 | 01/01/2020 | 2GFSDG37 | Product3 |
| 01/07/2020 | EMEA | IT | 01/07/2020 | 01/01/2020 | 2GFDSG35 | Product1 |
| 01/08/2020 | EMEA | DE | 01/07/2020 | 01/01/2020 | 23GSFDG6 | Product4 |
| 01/09/2020 | EMEA | DE | 01/07/2020 | 01/01/2020 | 23GSFDG5 | Product6 |
| 01/10/2020 | EMEA | IT | 01/10/2020 | 01/01/2020 | 24GSFD1 | Product1 |
| 01/11/2020 | EMEA | DE | 01/10/2020 | 01/01/2020 | 23GSDF6 | Product3 |
| 01/12/2020 | EMEA | FI | 01/10/2020 | 01/01/2020 | 24GFSDG1 | Product8 |
在我的示例中,数据相同,但在 Production ENV 中,表 1 中的公司是事实来源。第二张桌子上的产品是事实的来源。
Table1 有 6M 行,table2 有 600K 行。
当我这样加入时,我的表现很差,我该如何改进?:
SELECT R."Period",R."Zone",R."Country",S."Quarter",S."Year",R."Company",S."Product"
FROM table1 AS R,
table2 AS S
WHERE R."Period" = S."Period"
AND R."Zone" = S."Zone"
AND R."Country"=S."Country"
GROUP BY 1,2,3,4,5,6,7
更新:
测试数据集:
CREATE OR REPLACE TEMPORARY TABLE "TMP_TEST1" (
"Period" TIMESTAMP,
"Country" VARCHAR,
"Quarter" TIMESTAMP,
"Year" TIMESTAMP,
"Company" VARCHAR,
"Product" VARCHAR
);
INSERT INTO "TMP_TEST1"
VALUES
('01/01/2020','DE','01/01/2020 ','01/01/2020 ','WKDM2 ','Product1'),
('01/01/2020','DE','01/01/2020 ','01/01/2020 ','2GFSDG37 ','Product1'),
('01/02/2020','DE','01/01/2020 ','01/01/2020 ','ORD56 ','Product2'),
('01/03/2020','DE','01/01/2020 ','01/01/2020 ','GFDS ','Product3'),
('01/03/2020','DE','01/01/2020 ','01/01/2020 ','24GFDSGF2 ','Product1'),
('01/03/2020','DE','01/01/2020 ','01/01/2020 ','24GSFD1 ','Product1'),
('01/04/2020','DE','01/04/2020 ','01/01/2020 ','2GFSDG37 ','Product4'),
('01/04/2020','DE','01/04/2020 ','01/01/2020 ','23GSFDG5 ','Product6'),
('01/05/2020','DE','01/04/2020 ','01/01/2020 ','23GSDF6 ','Product3'),
('01/06/2020','DE','01/04/2020 ','01/01/2020 ','24GSFD1 ','Product8');
CREATE OR REPLACE TEMPORARY TABLE "TMP_TEST2" (
"Period" TIMESTAMP,
"Country" VARCHAR,
"Quarter" TIMESTAMP,
"Year" TIMESTAMP,
"Company" VARCHAR,
"Product" VARCHAR
);
INSERT INTO "TMP_TEST2"
VALUES
('01/01/2020','DE','01/01/2020 ','01/01/2020 ','WKDM2 ','Product1'),
('01/01/2020','DE','01/01/2020 ','01/01/2020 ','2GFSDG37 ','Product1'),
('01/02/2020','DE','01/01/2020 ','01/01/2020 ','ORD56 ','Product2'),
('01/03/2020','DE','01/01/2020 ','01/01/2020 ','GFDS ','Product3'),
('01/03/2020','DE','01/01/2020 ','01/01/2020 ','24GFDSGF2 ','Product1'),
('01/03/2020','DE','01/01/2020 ','01/01/2020 ','2GFSDG37 ','Product3'),
('01/03/2020','DE','01/01/2020 ','01/01/2020 ','24GSFD1 ','Product1'),
('01/04/2020','DE','01/04/2020 ','01/01/2020 ','2GFSDG37 ','Product4'),
('01/04/2020','DE','01/04/2020 ','01/01/2020 ','23GSFDG5 ','Product6'),
('01/04/2020','DE','01/04/2020 ','01/01/2020 ','24GSFD1 ','Product1'),
('01/05/2020','DE','01/04/2020 ','01/01/2020 ','23GSDF6 ','Product3'),
('01/05/2020','DE','01/04/2020 ','01/01/2020 ','23GSDF6 ','Product9'),
('01/06/2020','DE','01/04/2020 ','01/01/2020 ','24GSFD1 ','Product8');
查询:
SELECT DISTINCT T1."Period",
T1."Country",
T1."Quarter",
T1."Year",
T1."Company",
T2."Product"
FROM TMP_TEST1 AS T1 INNER JOIN TMP_TEST2 AS T2
ON T1."Period" = T2."Period"
AND T1."Country"=T2."Country"
GROUP BY 1,2,3,4,5,6
使用此测试数据集,您将看到在没有公司时我会丢失产品。我不知道如何打破这种关系。我希望我对你来说足够清楚。
【问题讨论】:
标签: performance join snowflake-cloud-data-platform