Google bigquery Google Bigquery连接速度非常慢

Google bigquery Google Bigquery连接速度非常慢,google-bigquery,google-data-studio,Google Bigquery,Google Data Studio,我有一张大约有2百万行的桌子 关键是,当我与另一个有60行的表进行左连接时,查询速度会非常慢。 我正在DataStudio中编写一份报告,在加入Bigquery之后,该报告不再有用,这已经不是第一次了。 每次更改参数都要花费40秒或1分钟以上的时间才能连接表。 如果未加入表,则查询需要6到8秒的时间。就像一个普通的查询。 我不知道问题是在DataStudio还是在BigQuery中。有人能帮我吗? 因为现在不可能在DataStudio中使用Bigquery创建带有连接的仪表板 这里有两个查询:

我有一张大约有2百万行的桌子 关键是,当我与另一个有60行的表进行左连接时,查询速度会非常慢。 我正在DataStudio中编写一份报告,在加入Bigquery之后,该报告不再有用,这已经不是第一次了。 每次更改参数都要花费40秒或1分钟以上的时间才能连接表。 如果未加入表,则查询需要6到8秒的时间。就像一个普通的查询。 我不知道问题是在DataStudio还是在BigQuery中。有人能帮我吗? 因为现在不可能在DataStudio中使用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'
与Join一起

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秒的时间。但无论如何,有很多陌生人的事情,DataStudio中的报告没有任何用处。每次更改参数都要花费一分钟以上的时间。我试着把更多的细节放在这里

第一个结论 在《泰晤士报》上做一些测试,我可以说带有CASE子句的查询并不比没有CASE子句的查询慢。事实上,有些时候,我们花的时间更少

第二个结论 当我查询表A(2百万行)的所有数据时,时间几乎与我查询表A的所有数据并与表B(60行)左连接时相同。因此,对于整个表,有连接或没有连接的时间几乎相同,只有400 MB的时间非常多。只有在使用Where子句一个月后,差异才会显现出来

第三个结论 在我更改参数后,google data studio报告需要90秒来检索数据。Google Data Studio正在自动生成不同的查询,以完成参数、记分卡和图表中的数据。每次我更改一个参数,Google Data Studio都会发送6个不同的查询来检索这些数据。我分析了这六个查询,并将每个查询的时间放在这个google文档中,在控制台中手动运行。这六个查询中的每一个都需要2.5秒左右的时间。我复制它们并手动运行每一个。因此,如果他们需要一个接一个地处理,那么总的秒数必须在12秒左右。因此,这似乎是Google Data Studio从BigQuery检索数据的问题。需要一分钟以上的时间。不可能将此提供给客户。在加入之前,我一直在用合理的时间响应来处理仪表盘。但这种加入似乎正在扼杀谷歌数据工作室。我不知道

我在这里留下了支持结论1和结论2的数字,以及所有的查询和变化,以分析join、case子句和where子句的影响

联接前的查询联接前的查询和本月的Where子句带有联接的查询和本月的Where子句带有联接的查询用于所有表带有联接的查询和本月的Where子句和CASE子句带有联接的查询用于所有表和CASE子句

其他问题: 差异:使用大查询控制台手动运行时,我发现在运行同一查询时存在很多差异。我运行相同的查询三次

运行1)查询完成(经过12.955秒,处理490.83 MB)

运行2)查询完成(运行20.782秒,处理490.83 MB)


运行3)查询完成(经过10.814秒,处理490.83 MB)

您正在加入两个表,创建一个将所有数据发送到一个插槽的表。加上你做了很多(案例)。所有这些加在一起就是查询耗时更长的原因。我建议和/或


为了更好地理解BigQuery是如何工作的,您可以回顾一下。

您将加入两个表,创建一个将所有数据发送到一个插槽中的表。加上你做了很多(案例)。所有这些加在一起就是查询耗时更长的原因。我建议和/或


为了更好地了解BigQuery是如何工作的,您可以回顾一下。

Nathan,这个案例与否没有区别。看看Google文档中的所有数字。另外,我复制了这个表,按日期进行分区,按流和工作者id进行聚类,但没有任何改进。这份报告毫无用处。那么我需要做什么呢?停止使用suit Bigquery+DataStudio?如果可能的话,我建议打开一个支持案例,因为我们需要检查Jobid并可能复制。Nathan,这个案例与否没有区别。看看Google文档中的所有数字。另外,我复制了这个表,按日期进行分区,按流和工作者id进行聚类,但没有任何改进。这份报告毫无用处。那么我需要做什么呢?停止使用suit Bigquery+DataStudio?如果可能的话,我建议打开一个支持案例,因为我们需要检查Jobid并可能重新生成。