@@ -48,8 +48,7 @@ use super::{
4848 utils:: { apply_label_selector, apply_matchers} ,
4949} ;
5050use crate :: service:: promql:: {
51- DEFAULT_MAX_SERIES_PER_QUERY , aggregations, binaries, functions, micros,
52- rewrite:: remove_filter_all, value:: * ,
51+ aggregations, binaries, functions, micros, rewrite:: remove_filter_all, value:: * ,
5352} ;
5453
5554pub struct Engine {
@@ -1122,7 +1121,6 @@ async fn selector_load_data_from_datafusion(
11221121label_selector : & Option < HashSet < String > > ,
11231122query_exemplars : bool ,
11241123) ->Result < HashMap < HashLabelValue , RangeValue > > {
1125- let cfg = config:: get_config ( ) ;
11261124let table_name = selector. name . as_ref ( ) . unwrap ( ) ;
11271125let mut df_group =match ctx. table ( table_name) . await {
11281126Ok ( v) => v. filter (
@@ -1150,7 +1148,8 @@ async fn selector_load_data_from_datafusion(
11501148}
11511149}
11521150
1153- let label_cols = df_group
1151+ // get label columns
1152+ let mut label_cols = df_group
11541153. schema ( )
11551154. fields ( )
11561155. iter ( )
@@ -1163,16 +1162,13 @@ async fn selector_load_data_from_datafusion(
11631162{
11641163None
11651164} else {
1166- Some ( col ( name) )
1165+ Some ( name)
11671166}
11681167} )
11691168. collect :: < Vec < _ > > ( ) ;
1170-
1171- let max_series =if cfg. limit . metrics_max_series_per_query >0 {
1172- cfg. limit . metrics_max_series_per_query
1173- } else {
1174- DEFAULT_MAX_SERIES_PER_QUERY
1175- } ;
1169+ // sort labels to have a consistent order
1170+ label_cols. sort ( ) ;
1171+ let label_cols = label_cols. into_iter ( ) . map ( col) . collect :: < Vec < _ > > ( ) ;
11761172
11771173// get hash & timestamp
11781174let start_time = std:: time:: Instant :: now ( ) ;
@@ -1182,13 +1178,11 @@ async fn selector_load_data_from_datafusion(
11821178vec ! [ col( HASH_LABEL ) ] ,
11831179vec ! [ max( col( TIMESTAMP_COL_NAME ) ) . alias( TIMESTAMP_COL_NAME ) ] ,
11841180) ?
1185- . sort ( vec ! [ col( HASH_LABEL ) . sort( true , true ) ] ) ?
1186- . limit ( 0 , Some ( max_series) ) ?
11871181. collect ( )
11881182. await ?;
11891183
11901184let hash_field_type = schema. field_with_name ( HASH_LABEL ) . unwrap ( ) . data_type ( ) ;
1191- let ( mut timestamp_values, hash_value_set) : ( Vec < _ > , HashSet < HashLabelValue > ) =
1185+ let ( timestamp_values, hash_value_set) : ( HashSet < i64 > , HashSet < HashLabelValue > ) =
11921186if hash_field_type ==& DataType :: UInt64 {
11931187 sub_batch
11941188. iter ( )
@@ -1232,8 +1226,6 @@ async fn selector_load_data_from_datafusion(
12321226} )
12331227. unzip ( )
12341228} ;
1235- timestamp_values. sort ( ) ;
1236- timestamp_values. dedup ( ) ;
12371229let timestamp_values = timestamp_values. into_iter ( ) . map ( lit) . collect :: < Vec < _ > > ( ) ;
12381230
12391231 log:: info!(
@@ -1251,11 +1243,12 @@ async fn selector_load_data_from_datafusion(
12511243
12521244let mut metrics: HashMap < HashLabelValue , RangeValue > =
12531245HashMap :: with_capacity ( hash_value_set. len ( ) ) ;
1246+ let mut labels =Vec :: new ( ) ;
12541247for batchin series{
12551248let columns = batch. columns ( ) ;
12561249let schema = batch. schema ( ) ;
12571250let fields = schema. fields ( ) ;
1258- let mut cols = fields
1251+ let cols = fields
12591252. iter ( )
12601253. zip ( columns)
12611254. filter_map ( |( field, col) |{
@@ -1268,8 +1261,6 @@ async fn selector_load_data_from_datafusion(
12681261}
12691262} )
12701263. collect :: < Vec < ( _ , _ ) > > ( ) ;
1271- cols. sort_by ( |a, b| a. 0 . cmp ( b. 0 ) ) ;
1272- let mut labels =Vec :: with_capacity ( columns. len ( ) ) ;
12731264if hash_field_type ==& DataType :: UInt64 {
12741265let hash_values = batch
12751266. column_by_name ( HASH_LABEL )