【发布时间】:2019-04-07 05:07:43
【问题描述】:
我有一张大约有 2 百万行的桌子 关键是当我与其他有 60 行的表进行左连接时,查询会变得非常慢。 我正在 Data Studio 中做一份报告,这不是第一次在 Bigquery 中加入后报告不再有用。 每次更改一个参数都需要超过 40 秒或 1 分钟才能加入表。 如果表未连接,则查询需要 6 或 8 秒。像普通查询一样。 我不知道问题出在 Data Studio 还是 BigQuery 中。有人可以帮助我吗? 因为现在不可能在 Data Studio 中使用 Bigquery 来创建仪表板
这里有两个查询: 不加入
SELECT
Tag_Id,
Image_Id,
Stream,
Tagging_Worker_Id,
Tagging_Worker_Name,
Tagging_Task_Id,
CASE WHEN Tagging_Time_Per_Tag > 200 THEN 200 ELSE Tagging_Time_Per_Tag END AS Tagging_Time_Per_Tag,
Tagging_Date,
Tagging_Class_Name,
Tagging_Class_Id,
Tagging_Template_Id,
Tagging_Top,
Tagging_Left,
Tagging_Width,
Tagging_Height,
Is_Tag_Adjusted,
Is_Class_Adjusted,
CASE WHEN (Is_Tag_Adjusted+Is_Class_Adjusted > 0) THEN 1 ELSE 0 END AS TagsAdjusted
FROM Stats.TaggingStats
where Tagging_Date>= '2018-10-01'
加入
SELECT
st.Tag_Id,
st.Image_Id,
st.Stream,
st.Tagging_Worker_Id,
st.Tagging_Worker_Name,
st.Tagging_Task_Id,
st.Tagging_Time_Per_Tag,
st.Tagging_Date,
st.Tagging_Class_Name,
st.Tagging_Class_Id,
st.Tagging_Template_Id,
st.Tagging_Top,
st.Tagging_Left,
st.Tagging_Width,
st.Tagging_Height,
st.Is_Tag_Adjusted,
st.Is_Class_Adjusted,
st.TagsAdjusted,
CASE
WHEN (sal.Type_Salary=2 AND (st.Is_Tag_Adjusted=1 OR st.Is_Tag_Adjusted=1)) THEN 0
WHEN sal.Type_Salary=1 THEN st.Tagging_Time_Per_Tag*sal.Salary_Per_Second
WHEN sal.Type_Salary=2 AND st.Is_Tag_Adjusted=0 AND st.Is_Tag_Adjusted=0 THEN 3
ELSE st.Tagging_Time_Per_Tag
END AS CostPerTag,
CASE
WHEN sal.Type_Salary IS NULL THEN 'Workers Without Costing'
WHEN Type_Salary=1 THEN 'Workers With Salary Per Hour'
WHEN Type_Salary=2 THEN 'Workers With Fixed Price Per Tag'
ELSE 'Error'
END AS Costing_Method
FROM (
SELECT
Tag_Id,
Image_Id,
Stream,
Tagging_Worker_Id,
Tagging_Worker_Name,
Tagging_Task_Id,
CASE
WHEN Tagging_Time_Per_Tag > 200 THEN 200
ELSE Tagging_Time_Per_Tag
END AS Tagging_Time_Per_Tag,
Tagging_Date,
Tagging_Class_Name,
Tagging_Class_Id,
Tagging_Template_Id,
Tagging_Top,
Tagging_Left,
Tagging_Width,
Tagging_Height,
Is_Tag_Adjusted,
Is_Class_Adjusted,
CASE
WHEN (Is_Tag_Adjusted+Is_Class_Adjusted > 0) THEN 1
ELSE 0
END AS TagsAdjusted
FROM
Stats.TaggingStats) st
LEFT JOIN
Stats.Salary sal
ON
sal.Tagging_Worker_Id=st.Tagging_Worker_Id
WHERE
Tagging_Date>= '2018-10-01'
但现在看了一些数字后,我比以前更困惑了。手动运行查询,我可以看到所有不同的变化都需要不到 20 秒的时间。但是不管怎样,有很多陌生的东西,Data Studio 中的报表也没什么用。每次更改参数时都会花费一分钟以上。我试着把所有的细节都放在这里。
第一个结论 有时做一些测试,我可以说带有 CASE 子句的查询并不比没有 CASE 子句的查询慢。事实上,有时花费的时间更少。
第二个结论 当我查询表 A 的所有数据(2 百万行)时,时间几乎与查询表 A 的所有数据并与表 B(60 行)进行左连接时相同。因此,对于整个表来说,有或没有加入的时间几乎相同,而且只有 400 MB 的时间很多。仅当我使用 Where 子句 1 个月时才能看到差异。
第三个结论 更改参数后,谷歌数据工作室报告需要 90 秒来检索数据。 Google Data Studio 会自动生成不同的查询来完成参数、记分卡和图表中的数据。每次我更改参数时,Google Data Studio 都会发送 6 个不同的查询来检索这些数据。我分析了六个查询,并将每个查询的时间放在控制台中手动运行的时间。 https://docs.google.com/document/d/1z_y5CqJW-LrLY5YyLXjSrc455RLUbklPxhnKmAS5zFk/edit?usp=sharing 这六个查询中的每一个都需要(大约 2.5 秒)。我复制它们并手动运行每一个。因此,如果他们需要一个接一个地处理,那么总秒数必须在 12 秒左右。因此,这似乎是 Google Data Studio 从 BigQuery 检索数据的问题。耗时超过一分钟。不可能把这个提供给客户。在我加入之前,我正在使用仪表板以合理的时间响应。但 JOIN 似乎正在扼杀 Google Data Studio。我不知道。
我在这里留下支持结论 1 和 2 https://docs.google.com/document/d/1sc3qjVpQrETofIgToJPIhZVs9HTjHsjTcrZvbt2NYcI/edit?usp=sharing 的数字以及所有查询和变体,以分析联接、case 子句和 where 子句的影响。
JOIN 之前的查询 JOIN 之前的查询和本月的 Where 子句 带有 JOIN 的查询和本月的 Where 子句 带有 JOIN 的所有 TABLE 的查询 带有 JOIN 和 Where 子句的查询对于本月和 CASE 子句所有 TABLE 和 CASE 子句的 JOIN 查询
其他问题: 差异:使用 Big Query 控制台手动运行我发现运行相同查询的时间有很多差异。我运行相同的查询 3 次。
RUN 1) 查询完成(经过 12.955 秒,已处理 490.83 MB)
RUN 2) 查询完成(经过 20.782 秒,已处理 490.83 MB)
RUN 3) 查询完成(经过 10.814 秒,已处理 490.83 MB)
【问题讨论】:
标签: google-bigquery google-data-studio