优化产品范围查询的性能
Posted
技术标签:
【中文标题】优化产品范围查询的性能【英文标题】:Optimize the performance of product scoped query 【发布时间】:2019-02-15 16:03:13 【问题描述】:我想每天建立下表,以存储有关网站页面性能的一些汇总数据。但是,每天的数据价值超过 1500 万行。
我可以采取哪些步骤来提高性能?我打算将它们保存为分片表,但我想进一步改进,我可以将数据嵌套在每个表中以进一步提高性能吗?最好的方法是什么?
SELECT
device.devicecategory AS device,
hits_product.productListName AS list_name,
UPPER(hits_product.productSKU) AS SKU,
AVG(hits_product.productListPosition) AS avg_plp_position
FROM `mindful-agency-136314.43786551.ga_sessions_20*` AS t
CROSS JOIN UNNEST(hits) AS hits
CROSS JOIN UNNEST(hits.product) AS hits_product
WHERE parse_date('%y%m%d', _table_suffix) between
DATE_sub(current_date(), interval 1 day) and
DATE_sub(current_date(), interval 1 day)
AND hits_product.productListName != "(not set)"
GROUP BY
device,
list_name,
SKU
【问题讨论】:
【参考方案1】:由于您使用productSku
和productListName
作为维度/组,因此无法与product
数组交叉连接。
您还与 product
交叉连接,这可能很危险,因为有时该数组丢失并且您破坏了整行 - 通常您会使用左连接。但是在这种情况下,这很好,因为您只对产品领域感兴趣。
但是,您应该明确使用hits.product.isImpression
和hits.product.isClick
查看列表点击次数还是列表展示次数。 Atm 我看不出有什么区别。在列表视图的情况下过滤WHERE hits_product.isImpression
?
您可能要考虑添加日期字段和PARTITION BY date
以及CLUSTER BY list_name
,而不是分片。更新见INSERT Statement
和DDL Syntax 启动表格。在稍后查询表时,这比分片更高效。
启动表可能如下所示:
CREATE TABLE `x.y.z`
PARTITION BY date
CLUSTER BY list_name
AS (
SELECT
PARSE_DATE('%Y%m%d',date) AS date,
device.devicecategory AS device,
hits_product.productListName AS list_name,
UPPER(hits_product.productSKU) AS SKU,
AVG(IF(hits_product.isClick, hits_product.productListPosition, NULL)) AS avg_plp_click_position,
AVG(IF(hits_product.isImpression, hits_product.productListPosition, NULL)) AS avg_plp_view_position
FROM `bigquery-public-data.google_analytics_sample.ga_sessions_20*` AS t
CROSS JOIN UNNEST(hits) AS hits
CROSS JOIN UNNEST(hits.product) AS hits_product
WHERE
parse_date('%y%m%d', _table_suffix)
between
DATE_sub(current_date(), interval 1 day)
and DATE_sub(current_date(), interval 1 day)
AND hits_product.productListName != "(not set)"
GROUP BY
date,
device,
list_name,
SKU
)
插入新记录非常相似,您只需按照文档中的说明预先提及字段即可。
【讨论】:
以上是关于优化产品范围查询的性能的主要内容,如果未能解决你的问题,请参考以下文章