Skip to content

Commit aa45b18

Browse files
authored
chore(query): add new session setting: query_tag (#17430)
set session query_tag=query-tag1; all query in this session will be recored into system table query_log.
1 parent 346966e commit aa45b18

File tree

9 files changed

+58
-8
lines changed

9 files changed

+58
-8
lines changed

src/query/service/src/interpreters/common/query_log.rs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,11 @@ impl InterpreterQueryLog {
143143
.expect("write to string must succeed");
144144
}
145145

146+
let query_tag = if let Ok(tag) = current_session.get_settings().get_query_tag() {
147+
tag
148+
} else {
149+
"".to_string()
150+
};
146151
session_settings.push_str("scope: SESSION");
147152

148153
// Error
@@ -213,6 +218,7 @@ impl InterpreterQueryLog {
213218
exception_text,
214219
stack_trace,
215220
server_version: DATABEND_COMMIT_VERSION.to_string(),
221+
query_tag,
216222
session_settings,
217223
extra: "".to_string(),
218224
has_profiles: false,
@@ -309,6 +315,12 @@ impl InterpreterQueryLog {
309315
.expect("write to string must succeed");
310316
}
311317

318+
// Session
319+
let query_tag = if let Ok(tag) = current_session.get_settings().get_query_tag() {
320+
tag
321+
} else {
322+
"".to_string()
323+
};
312324
session_settings.push_str("scope: SESSION");
313325

314326
// Error
@@ -380,6 +392,7 @@ impl InterpreterQueryLog {
380392
exception_text,
381393
stack_trace,
382394
server_version: DATABEND_COMMIT_VERSION.to_string(),
395+
query_tag,
383396
session_settings,
384397
extra: "".to_string(),
385398
has_profiles,

src/query/service/tests/it/storages/testdata/columns_table.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,7 @@ DB.Table: 'system'.'columns', Table: columns-table_id:1, ver:0, Engine: SystemCo
368368
| 'query_parameterized_hash' | 'system' | 'query_log' | 'String' | 'VARCHAR' | '' | '' | 'NO' | '' |
369369
| 'query_queued_duration_ms' | 'system' | 'query_log' | 'Int64' | 'BIGINT' | '' | '' | 'NO' | '' |
370370
| 'query_start_time' | 'system' | 'query_log' | 'Timestamp' | 'TIMESTAMP' | '' | '' | 'NO' | '' |
371+
| 'query_tag' | 'system' | 'query_log' | 'String' | 'VARCHAR' | '' | '' | 'NO' | '' |
371372
| 'query_text' | 'system' | 'query_log' | 'String' | 'VARCHAR' | '' | '' | 'NO' | '' |
372373
| 'range' | 'system' | 'settings' | 'String' | 'VARCHAR' | '' | '' | 'NO' | '' |
373374
| 'referenced_column_name' | 'information_schema' | 'key_column_usage' | 'NULL' | 'NULL' | '' | '' | 'NO' | '' |

src/query/settings/src/settings_default.rs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,6 +296,13 @@ impl DefaultSettings {
296296
scope: SettingScope::Both,
297297
range: Some(SettingRange::String(vec!["PostgreSQL".into(), "MySQL".into(), "Experimental".into(), "Hive".into(), "Prql".into()])),
298298
}),
299+
("query_tag", DefaultSettingValue {
300+
value: UserSettingValue::String("".to_owned()),
301+
desc: "Sets the query tag for this session.",
302+
mode: SettingMode::Both,
303+
scope: SettingScope::Session,
304+
range: None,
305+
}),
299306
("enable_dphyp", DefaultSettingValue {
300307
value: UserSettingValue::UInt64(1),
301308
desc: "Enables dphyp join order algorithm.",

src/query/settings/src/settings_getter_setter.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -412,6 +412,10 @@ impl Settings {
412412
self.try_get_string("sandbox_tenant")
413413
}
414414

415+
pub fn get_query_tag(&self) -> Result<String> {
416+
self.try_get_string("query_tag")
417+
}
418+
415419
pub fn get_hide_options_in_show_create_table(&self) -> Result<bool> {
416420
Ok(self.try_get_u64("hide_options_in_show_create_table")? != 0)
417421
}

src/query/storages/system/src/query_log_table.rs

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,8 @@ pub struct QueryLogElement {
164164
// Server.
165165
pub server_version: String,
166166

167-
// Session settings
167+
// Session
168+
pub query_tag: String,
168169
#[serde(skip_serializing)]
169170
pub session_settings: String,
170171

@@ -311,7 +312,8 @@ impl SystemLogElement for QueryLogElement {
311312
TableField::new("stack_trace", TableDataType::String),
312313
// Server.
313314
TableField::new("server_version", TableDataType::String),
314-
// Session settings
315+
// Session
316+
TableField::new("query_tag", TableDataType::String),
315317
TableField::new("session_settings", TableDataType::String),
316318
// Extra.
317319
TableField::new("extra", TableDataType::String),
@@ -548,7 +550,11 @@ impl SystemLogElement for QueryLogElement {
548550
.next()
549551
.unwrap()
550552
.push(Scalar::String(self.server_version.clone()).as_ref());
551-
// Session settings
553+
// Session
554+
columns
555+
.next()
556+
.unwrap()
557+
.push(Scalar::String(self.query_tag.clone()).as_ref());
552558
columns
553559
.next()
554560
.unwrap()

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
statement error 1001
2+
set global query_tag = 'x';
3+
14
statement ok
25
unset max_threads;
36

tests/sqllogictests/suites/mode/cluster/explain_v2.test

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -428,20 +428,20 @@ query T
428428
EXPLAIN SELECT a.cluster_node, b.query_node FROM (SELECT name as cluster_node FROM system.clusters) AS a LEFT JOIN (SELECT DISTINCT node_id as query_node FROM system.query_log) AS b ON a.cluster_node = b.query_node
429429
----
430430
Exchange
431-
├── output columns: [clusters.name (#0), query_node (#62)]
431+
├── output columns: [clusters.name (#0), query_node (#63)]
432432
├── exchange type: Merge
433433
└── HashJoin
434-
├── output columns: [clusters.name (#0), query_node (#62)]
434+
├── output columns: [clusters.name (#0), query_node (#63)]
435435
├── join type: LEFT OUTER
436-
├── build keys: [b.query_node (#62)]
436+
├── build keys: [b.query_node (#63)]
437437
├── probe keys: [CAST(a.cluster_node (#0) AS String NULL)]
438438
├── filters: []
439439
├── estimated rows: 0.00
440440
├── Exchange(Build)
441-
│ ├── output columns: [query_node (#62)]
441+
│ ├── output columns: [query_node (#63)]
442442
│ ├── exchange type: Broadcast
443443
│ └── EvalScalar
444-
│ ├── output columns: [query_node (#62)]
444+
│ ├── output columns: [query_node (#63)]
445445
│ ├── expressions: [CAST(b.query_node (#10) AS String NULL)]
446446
│ ├── estimated rows: 0.00
447447
│ └── AggregateFinal
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
1
2+
2
3+
true
4+
true
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/usr/bin/env bash
2+
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
3+
. "$CURDIR"/../../../shell_env.sh
4+
5+
$BENDSQL_CLIENT_CONNECT --query="set query_tag = 'test-query_tag'; select 1; create database if not exists c;"
6+
$BENDSQL_CLIENT_CONNECT --query="set query_tag = 'test-query_tag-2'; select 2; create database if not exists b;"
7+
8+
# count % 5 = 0 because (set command + select start/finished + create start/finished) must be a positive multiple of 5
9+
$BENDSQL_CLIENT_CONNECT --query="select count(query_text) % 5 = 0 from system.query_log group by query_tag having query_tag='test-query_tag'"
10+
$BENDSQL_CLIENT_CONNECT --query="select count(query_text) % 5 = 0 from system.query_log group by query_tag having query_tag='test-query_tag-2'"
11+
12+
$BENDSQL_CLIENT_CONNECT --query="drop database if exists b;drop database if exists c;"

0 commit comments

Comments
 (0)