这是一个典型的问题,我们通过用 Python 编写 SQL 生成器来解决它。如果指标的定义相同(如count(*)),但您有不同的维度和过滤器,您可以将其声明为 JSON 并编写生成 SQL 的生成器。浏览量示例:
{
metric: "unique pageviews"
,definition: "count(distinct cookie_id)"
,source: "public.pageviews"
,tscol: "timestamp"
,dimensions: [
['day']
,['day','country']
}
可以相对容易地翻译成 2 个脚本 - 这个:
drop table metrics_daily.pageviews;
create table metrics_daily.pageviews as
select
date_trunc('day',"timestamp") as date
,count(distinct cookie_id) as "unique_pageviews"
from public.pageviews
group by 1;
还有这个:
drop table metrics_daily.pageviews_by_country;
create table metrics_daily.pageviews_by_country as
select
date_trunc('day',"timestamp") as date
,country
,count(distinct cookie_id) as "unique_pageviews"
from public.pageviews
group by 1,2;
从这样的配置生成这样的 sql 所需的生成器的复杂性非常低,但随着您需要添加新的连接等而呈指数增长。最好将维度保持在编码形式并只使用单个宽表作为聚合源,或者为您可能需要的每个连接生成视图并将它们用作源。