Skip to content

Commit

Permalink
Fix aggreagation query
Browse files Browse the repository at this point in the history
  • Loading branch information
AdityaHegde committed Dec 21, 2023
1 parent 8c92875 commit ab7ace2
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 31 deletions.
18 changes: 5 additions & 13 deletions runtime/queries/metricsview_aggregation.go
Original file line number Diff line number Diff line change
Expand Up @@ -159,20 +159,12 @@ func (q *MetricsViewAggregation) buildMetricsAggregationSQL(mv *runtimev1.Metric
if err != nil {
return "", nil, err
}
rawColName := metricsViewDimensionColumn(dim)
col := safeName(rawColName)
expr := metricsViewDimensionExpression(dim)

if dim.Unnest && dialect != drivers.DialectDruid {
// TODO: handle unnest for expressions
// select "unnested_colName" as "colName" ... FROM "mv_table", LATERAL UNNEST("mv_table"."colName") tbl("unnested_colName") ...
unnestColName := safeName(tempName(fmt.Sprintf("%s_%s_", "unnested", d.Name)))
selectCols = append(selectCols, fmt.Sprintf(`%s as %s`, unnestColName, safeName(d.Name)))
unnestClauses = append(unnestClauses, fmt.Sprintf(`, LATERAL UNNEST(%s.%s) tbl(%s)`, safeName(mv.Table), col, unnestColName))
} else {
selectCols = append(selectCols, fmt.Sprintf("%s as %s", expr, safeName(d.Name)))
groupCols = append(groupCols, safeName(d.Name))
dimSel, unnestClause := dimensionSelect(mv, dim, dialect)
selectCols = append(selectCols, dimSel)
if unnestClause != "" {
unnestClauses = append(unnestClauses, unnestClause)
}
groupCols = append(groupCols, safeName(d.Name))
continue
}

Expand Down
6 changes: 3 additions & 3 deletions runtime/queries/metricsview_toplist_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ func TestMetricsViewsToplist_measure_filters(t *testing.T) {
require.NoError(t, err)
require.NotEmpty(t, q.Result)
require.Len(t, q.Result.Data, 3)
require.Equal(t, "sports.yahoo.com", q.Result.Data[0].AsMap()["domain"])
require.Equal(t, "news.google.com", q.Result.Data[1].AsMap()["domain"])
require.Equal(t, "instagram.com", q.Result.Data[2].AsMap()["domain"])
require.Equal(t, "sports.yahoo.com", q.Result.Data[0].AsMap()["dom"])
require.Equal(t, "news.google.com", q.Result.Data[1].AsMap()["dom"])
require.Equal(t, "instagram.com", q.Result.Data[2].AsMap()["dom"])
}
53 changes: 42 additions & 11 deletions runtime/server/queries_metrics_aggregation_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ func TestMetricsViewAggregation_dimension_expression(t *testing.T) {
MetricsView: "ad_bids_metrics",
Dimensions: []*runtimev1.MetricsViewAggregationDimension{
{Name: "domain"},
{Name: "domain_parts"},
{Name: "tld"},
},
Measures: []*runtimev1.MetricsViewAggregationMeasure{
Expand All @@ -127,21 +128,36 @@ func TestMetricsViewAggregation_dimension_expression(t *testing.T) {
},
Sort: []*runtimev1.MetricsViewAggregationSort{
{Name: "tld", Desc: true},
{Name: "domain_parts", Desc: true},
},
})
require.NoError(t, err)
require.Equal(t, 2, len(tr.Data))
require.Equal(t, 4, len(tr.Data[0].Fields))
require.Equal(t, 4, len(tr.Data))
require.Equal(t, 5, len(tr.Data[0].Fields))

require.Equal(t, 1.0, tr.Data[0].Fields["__count"].GetNumberValue())
require.Equal(t, 1.0, tr.Data[0].Fields["measure_2"].GetNumberValue())
require.Equal(t, "yahoo.com", tr.Data[0].Fields["domain"].GetStringValue())
require.Equal(t, "yahoo", tr.Data[0].Fields["domain_parts"].GetStringValue())
require.Equal(t, "yahoo.com", tr.Data[0].Fields["tld"].GetStringValue())

require.Equal(t, 1.0, tr.Data[1].Fields["__count"].GetNumberValue())
require.Equal(t, 2.0, tr.Data[1].Fields["measure_2"].GetNumberValue())
require.Equal(t, "msn.com", tr.Data[1].Fields["domain"].GetStringValue())
require.Equal(t, "msn.com", tr.Data[1].Fields["tld"].GetStringValue())
require.Equal(t, 1.0, tr.Data[1].Fields["measure_2"].GetNumberValue())
require.Equal(t, "yahoo.com", tr.Data[1].Fields["domain"].GetStringValue())
require.Equal(t, "com", tr.Data[1].Fields["domain_parts"].GetStringValue())
require.Equal(t, "yahoo.com", tr.Data[1].Fields["tld"].GetStringValue())

require.Equal(t, 1.0, tr.Data[2].Fields["__count"].GetNumberValue())
require.Equal(t, 2.0, tr.Data[2].Fields["measure_2"].GetNumberValue())
require.Equal(t, "msn.com", tr.Data[2].Fields["domain"].GetStringValue())
require.Equal(t, "msn", tr.Data[2].Fields["domain_parts"].GetStringValue())
require.Equal(t, "msn.com", tr.Data[2].Fields["tld"].GetStringValue())

require.Equal(t, 1.0, tr.Data[3].Fields["__count"].GetNumberValue())
require.Equal(t, 2.0, tr.Data[3].Fields["measure_2"].GetNumberValue())
require.Equal(t, "msn.com", tr.Data[3].Fields["domain"].GetStringValue())
require.Equal(t, "com", tr.Data[3].Fields["domain_parts"].GetStringValue())
require.Equal(t, "msn.com", tr.Data[3].Fields["tld"].GetStringValue())
}

func TestMetricsViewAggregation_dimension_expression_filters(t *testing.T) {
Expand All @@ -153,6 +169,7 @@ func TestMetricsViewAggregation_dimension_expression_filters(t *testing.T) {
MetricsView: "ad_bids_metrics",
Dimensions: []*runtimev1.MetricsViewAggregationDimension{
{Name: "domain"},
{Name: "domain_parts"},
{Name: "tld"},
},
Measures: []*runtimev1.MetricsViewAggregationMeasure{
Expand All @@ -161,18 +178,32 @@ func TestMetricsViewAggregation_dimension_expression_filters(t *testing.T) {
},
Sort: []*runtimev1.MetricsViewAggregationSort{
{Name: "tld", Desc: true},
{Name: "domain_parts", Desc: true},
},
Where: expressionpb.In(
expressionpb.Identifier("tld"),
[]*runtimev1.Expression{expressionpb.Value(structpb.NewStringValue("msn.com"))},
),
Where: expressionpb.And([]*runtimev1.Expression{
expressionpb.In(
expressionpb.Identifier("tld"),
[]*runtimev1.Expression{expressionpb.Value(structpb.NewStringValue("msn.com"))},
),
expressionpb.In(
expressionpb.Identifier("domain_parts"),
[]*runtimev1.Expression{expressionpb.Value(structpb.NewStringValue("com"))},
),
}),
})
require.NoError(t, err)
require.Equal(t, 1, len(tr.Data))
require.Equal(t, 4, len(tr.Data[0].Fields))
require.Equal(t, 2, len(tr.Data))
require.Equal(t, 5, len(tr.Data[0].Fields))

require.Equal(t, 1.0, tr.Data[0].Fields["__count"].GetNumberValue())
require.Equal(t, 2.0, tr.Data[0].Fields["measure_2"].GetNumberValue())
require.Equal(t, "msn.com", tr.Data[0].Fields["domain"].GetStringValue())
require.Equal(t, "msn", tr.Data[0].Fields["domain_parts"].GetStringValue())
require.Equal(t, "msn.com", tr.Data[0].Fields["tld"].GetStringValue())

require.Equal(t, 1.0, tr.Data[1].Fields["__count"].GetNumberValue())
require.Equal(t, 2.0, tr.Data[1].Fields["measure_2"].GetNumberValue())
require.Equal(t, "msn.com", tr.Data[1].Fields["domain"].GetStringValue())
require.Equal(t, "com", tr.Data[1].Fields["domain_parts"].GetStringValue())
require.Equal(t, "msn.com", tr.Data[1].Fields["tld"].GetStringValue())
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,10 +20,10 @@ dimensions:
property: device
- label: Ad Words
property: ad words
# - label: Domain Parts
# name: domain_parts
# expression: "string_split(domain, '.')"
# unnest: true
- label: Domain Parts
name: domain_parts
expression: "string_split(domain, '.')"
unnest: true
- label: TLD
name: tld
expression: "regexp_extract(domain, '(.*\\.)?(.*\\.com)', 2)"
Expand Down

0 comments on commit ab7ace2

Please sign in to comment.