BigQuery:加入日期非常慢 _table_suffix
BigQuery: very slow join on date and _table_suffix
在我的查询中,我希望从分区 table 中获取数据,其中每个用户都需要不同的分区,具体取决于用户特定的日期。这需要我加入用户和日期 = 分区。这个连接非常非常慢。大约需要 12 分钟才能到达 运行!
查询的基本结构如下:
SELECT
t1.user_id
,t1.date
,t2.some_field
FROM `t1` AS t1
JOIN `t2_*` AS t2
ON t1.user_id = t2.user_id
AND t2._table_suffix = FORMAT_DATE("%Y%m%d", t1.date)
如何更快地获得相同的结果?
一些加快查询速度的事情(从 12 分钟到 1 分钟):
- 将 t2 table 预过滤到与 t1
连接相关的分区
- 将日期字段添加到 t2 的 CTE 以加快与 t1 的连接
看起来像这样:
WITH t1_dates AS (
SELECT
MIN(date) min_date
,MAX(date max_date
FROM
`t1`
)
, t2_v2 AS (
SELECT
user_id
,some_field
,PARSE_DATE("%Y%m%d", t2._table_suffix) date
from t2_*
,t1_dates
where _table_suffix BETWEEN FORMAT_DATE("%Y%m%d",t1_dates.min_date)
AND FORMAT_DATE("%Y%m%d",t1_dates.max_date)
)
SELECT
t1.user_id
,t1.date
,t2.some_field
FROM `t1` AS t1
JOIN t2_v2 AS t2
ON t1.user_id = t2.user_id
AND t2.date = t1.date
在我的查询中,我希望从分区 table 中获取数据,其中每个用户都需要不同的分区,具体取决于用户特定的日期。这需要我加入用户和日期 = 分区。这个连接非常非常慢。大约需要 12 分钟才能到达 运行!
查询的基本结构如下:
SELECT
t1.user_id
,t1.date
,t2.some_field
FROM `t1` AS t1
JOIN `t2_*` AS t2
ON t1.user_id = t2.user_id
AND t2._table_suffix = FORMAT_DATE("%Y%m%d", t1.date)
如何更快地获得相同的结果?
一些加快查询速度的事情(从 12 分钟到 1 分钟):
- 将 t2 table 预过滤到与 t1 连接相关的分区
- 将日期字段添加到 t2 的 CTE 以加快与 t1 的连接
看起来像这样:
WITH t1_dates AS (
SELECT
MIN(date) min_date
,MAX(date max_date
FROM
`t1`
)
, t2_v2 AS (
SELECT
user_id
,some_field
,PARSE_DATE("%Y%m%d", t2._table_suffix) date
from t2_*
,t1_dates
where _table_suffix BETWEEN FORMAT_DATE("%Y%m%d",t1_dates.min_date)
AND FORMAT_DATE("%Y%m%d",t1_dates.max_date)
)
SELECT
t1.user_id
,t1.date
,t2.some_field
FROM `t1` AS t1
JOIN t2_v2 AS t2
ON t1.user_id = t2.user_id
AND t2.date = t1.date