MCPcopy Create free account
hub / github.com/rilldata/rill / executeSearchInDruid

Method executeSearchInDruid

runtime/metricsview/executor/executor.go:725–870  ·  view source on GitHub ↗
(ctx context.Context, qry *metricsview.SearchQuery, executionTime *time.Time)

Source from the content-addressed store, hash-verified

723}
724
725func (e *Executor) executeSearchInDruid(ctx context.Context, qry *metricsview.SearchQuery, executionTime *time.Time) ([]metricsview.SearchResult, error) {
726 if qry.TimeRange == nil {
727 return nil, errDruidNativeSearchUnimplemented
728 }
729
730 dimensions := make([]metricsview.Dimension, len(qry.Dimensions))
731 for i, d := range qry.Dimensions {
732 dimensions[i] = metricsview.Dimension{Name: d}
733 }
734 q := &metricsview.Query{
735 MetricsView: qry.MetricsView,
736 Dimensions: dimensions,
737 Measures: nil,
738 PivotOn: nil,
739 Spine: nil,
740 Sort: nil,
741 TimeRange: qry.TimeRange,
742 ComparisonTimeRange: nil,
743 Where: qry.Where,
744 Having: qry.Having,
745 Limit: qry.Limit,
746 Offset: nil,
747 TimeZone: "",
748 UseDisplayNames: false,
749 Rows: false,
750 QueryLimits: &metricsview.QueryLimits{
751 RequireTimeRange: false,
752 MaxTimeRangeDays: 0, // not enforced
753 },
754 UnusedFields: nil,
755 } //exhaustruct:enforce
756
757 if err := e.RewriteQueryTimeRanges(ctx, q, executionTime); err != nil {
758 return nil, err
759 }
760
761 a, err := metricsview.NewAST(e.metricsView, e.security, q, e.olap.Dialect())
762 if err != nil {
763 return nil, err
764 }
765
766 if err := e.rewriteLimitsIntoSubqueries(a); err != nil {
767 return nil, err
768 }
769
770 if a.Root.FromSelect != nil {
771 // This means either the dimension uses an unnest or measure filters which are not directly supported by native search.
772 // This can be supported in future using query datasource in future if performance turns out to be a concern.
773 return nil, errDruidNativeSearchUnimplemented
774 }
775 var query map[string]interface{}
776 if a.Root.Where != nil {
777 // NOTE :: this does not work for measure filters.
778 // The query planner resolves them to joins instead of filters.
779 rows, err := e.olap.Query(ctx, &drivers.Statement{
780 Query: fmt.Sprintf("EXPLAIN PLAN FOR SELECT 1 FROM %s WHERE %s", *a.Root.FromTable, a.Root.Where.Expr),
781 Args: a.Root.Where.Args,
782 Priority: e.priority,

Callers 1

SearchMethod · 0.95

Calls 13

LookupDimensionMethod · 0.95
SearchMethod · 0.95
NewASTFunction · 0.92
NewNativeClientFunction · 0.92
DialectMethod · 0.65
QueryMethod · 0.65
CloseMethod · 0.65
NextMethod · 0.65
ErrorfMethod · 0.65

Tested by

no test coverage detected