【问题标题】:Google Bigquery join Extremely SlowGoogle Bigquery 加入速度极慢
【发布时间】: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


    【解决方案1】:

    您正在加入两个创建 broadcast join 的表,它将所有数据发送到一个插槽。另外,您正在做很多computation (CASE)。所有这一切都是查询花费更长的时间的原因。我推荐reduce the data before the join 和/或materialize the data

    要更好地了解 BigQuery 的工作原理,您可以查看此link

    【讨论】:

    • Nathan,与 CASE 没有区别。查看 Google 文档中的所有数字。
    • 另外,我复制了表,按日期分区并按流和工作人员 ID 进行集群,但根本没有改进。报告没有用。那么我需要做什么?停止使用套装 Bigquery + DataStudio?
    • 我建议尽可能打开一个支持案例,因为我们需要查看 jobID 并可能重现。
    猜你喜欢
    • 1970-01-01
    • 2015-02-07
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    相关资源
    最近更新 更多