Skip to content

Commit 21edb8b

Browse files
zhyassdantengsky
andauthored
feat: add settings to control analyze table (#18642)
* add settings to control analyze table * fix test * fix * fix test * rename * Update src/query/settings/src/settings_default.rs * Update src/query/settings/src/settings_getter_setter.rs * Update src/query/settings/src/settings_getter_setter.rs --------- Co-authored-by: dantengsky <[email protected]>
1 parent b6423c0 commit 21edb8b

File tree

8 files changed

+48
-22
lines changed

8 files changed

+48
-22
lines changed

src/query/service/src/interpreters/interpreter_table_analyze.rs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,9 @@ impl Interpreter for AnalyzeTableInterpreter {
150150
.get_settings()
151151
.get_sql_dialect()?
152152
.default_ident_quote();
153-
if self.ctx.get_settings().get_enable_analyze_histogram()? {
153+
if self.ctx.get_settings().get_enable_analyze_histogram()?
154+
&& self.ctx.get_settings().get_enable_table_snapshot_stats()?
155+
{
154156
let histogram_sqls = table
155157
.schema()
156158
.fields()

src/query/service/src/test_kits/fixture.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -943,7 +943,7 @@ impl TestFixture {
943943
self.default_table_name()
944944
);
945945
let ctx = self.new_query_ctx().await?;
946-
ctx.get_settings().set_enable_analyze_histogram(1)?;
946+
ctx.get_settings().set_enable_table_snapshot_stats(1)?;
947947
let mut planner = Planner::new(ctx.clone());
948948
let (plan, _) = planner.plan_sql(&query).await?;
949949
let executor = InterpreterFactory::get(ctx.clone(), &plan).await?;

src/query/settings/src/settings_default.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1016,6 +1016,13 @@ impl DefaultSettings {
10161016
scope: SettingScope::Both,
10171017
range: Some(SettingRange::Numeric(0..=1)),
10181018
}),
1019+
("enable_table_snapshot_stats", DefaultSettingValue {
1020+
value: UserSettingValue::UInt64(0),
1021+
desc: "Enable analyze table statistics for snapshots",
1022+
mode: SettingMode::Both,
1023+
scope: SettingScope::Both,
1024+
range: Some(SettingRange::Numeric(0..=1)),
1025+
}),
10191026
("enable_experimental_row_access_policy", DefaultSettingValue {
10201027
value: UserSettingValue::UInt64(0),
10211028
desc: "experiment setting enable row access policy(disable by default).",

src/query/settings/src/settings_getter_setter.rs

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -641,11 +641,6 @@ impl Settings {
641641
Ok(self.try_get_u64("enable_analyze_histogram")? != 0)
642642
}
643643

644-
/// used for test
645-
pub fn set_enable_analyze_histogram(&self, val: u64) -> Result<()> {
646-
self.try_set_u64("enable_analyze_histogram", val)
647-
}
648-
649644
pub fn get_enable_aggregating_index_scan(&self) -> Result<bool> {
650645
Ok(self.try_get_u64("enable_aggregating_index_scan")? != 0)
651646
}
@@ -1073,4 +1068,12 @@ impl Settings {
10731068
pub fn get_enable_binary_to_utf8_lossy(&self) -> Result<bool> {
10741069
Ok(self.try_get_u64("enable_binary_to_utf8_lossy")? == 1)
10751070
}
1071+
1072+
pub fn get_enable_table_snapshot_stats(&self) -> Result<bool> {
1073+
Ok(self.try_get_u64("enable_table_snapshot_stats")? != 0)
1074+
}
1075+
1076+
pub fn set_enable_table_snapshot_stats(&self, val: u64) -> Result<()> {
1077+
self.try_set_u64("enable_table_snapshot_stats", val)
1078+
}
10761079
}

src/query/storages/fuse/src/operations/analyze.rs

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -225,20 +225,25 @@ impl SinkAnalyzeState {
225225
..Default::default()
226226
});
227227

228-
let table_statistics = TableSnapshotStatistics::new(
229-
self.ndv_states.clone(),
230-
self.histograms.clone(),
231-
self.snapshot_id,
232-
snapshot.summary.row_count,
233-
);
234-
new_snapshot.table_statistics_location = Some(
235-
table
236-
.meta_location_generator
237-
.snapshot_statistics_location_from_uuid(
238-
&table_statistics.snapshot_id,
239-
table_statistics.format_version(),
240-
)?,
241-
);
228+
let table_statistics = if self.ctx.get_settings().get_enable_table_snapshot_stats()? {
229+
let stats = TableSnapshotStatistics::new(
230+
self.ndv_states.clone(),
231+
self.histograms.clone(),
232+
self.snapshot_id,
233+
snapshot.summary.row_count,
234+
);
235+
new_snapshot.table_statistics_location = Some(
236+
table
237+
.meta_location_generator
238+
.snapshot_statistics_location_from_uuid(
239+
&stats.snapshot_id,
240+
stats.format_version(),
241+
)?,
242+
);
243+
Some(stats)
244+
} else {
245+
None
246+
};
242247

243248
let (col_stats, cluster_stats) =
244249
self.regenerate_statistics(table, snapshot.as_ref()).await?;
@@ -251,7 +256,7 @@ impl SinkAnalyzeState {
251256
&table.table_info,
252257
&table.meta_location_generator,
253258
new_snapshot,
254-
Some(table_statistics),
259+
table_statistics,
255260
&None,
256261
&table.operator,
257262
)

tests/sqllogictests/suites/base/06_show/06_0025_show_statistics.test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,9 @@ showstatistics t2 c1 2 2 2 0 4 (empty)
4141
statement ok
4242
set enable_analyze_histogram=1;
4343

44+
statement ok
45+
set enable_table_snapshot_stats = 1;
46+
4447
statement ok
4548
analyze table showstatistics.t2;
4649

tests/sqllogictests/suites/base/09_fuse_engine/09_0020_analyze.test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,9 @@ create or replace table t1 as select number as a from numbers(10);
113113
statement ok
114114
set enable_analyze_histogram=1;
115115

116+
statement ok
117+
set enable_table_snapshot_stats = 1;
118+
116119
statement ok
117120
analyze table t1;
118121

tests/sqllogictests/suites/base/09_fuse_engine/09_0044_issue_17314.test

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,9 @@ use issue_17314
77
statement ok
88
set enable_analyze_histogram=1;
99

10+
statement ok
11+
set enable_table_snapshot_stats = 1;
12+
1013
statement ok
1114
create or replace table t1(a string, biz_date1 string);
1215

0 commit comments

Comments
 (0)