You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kylin.apache.org by xx...@apache.org on 2023/02/09 08:13:00 UTC
[kylin] 01/04: KYLIN-5407 CH query total_scan_count issue
This is an automated email from the ASF dual-hosted git repository.
xxyu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git
commit e104fa10519c44d9c93b3765882df6385d60b859
Author: Qian Xia <la...@gmail.com>
AuthorDate: Thu Feb 2 17:59:23 2023 +0800
KYLIN-5407 CH query total_scan_count issue
---
.../src/components/query/query_history_table.vue | 23 +++++++++++---
kystudio/src/components/query/query_result.vue | 36 +++++++++++++++++++---
kystudio/src/store/model.js | 3 ++
kystudio/src/store/system.js | 3 ++
kystudio/src/store/types.js | 1 +
5 files changed, 58 insertions(+), 8 deletions(-)
diff --git a/kystudio/src/components/query/query_history_table.vue b/kystudio/src/components/query/query_history_table.vue
index 270a9686c3..a39154844d 100644
--- a/kystudio/src/components/query/query_history_table.vue
+++ b/kystudio/src/components/query/query_history_table.vue
@@ -136,11 +136,11 @@
<span class="label">{{$t('kylinLang.query.snapshot')}}:</span>
<span class="text">{{getSnapshots(props.row.realizations)}}</span>
</p>
- <p class="list">
+ <p class="list" v-if="!isHaveStorageQuery(props.row.realizations) || (isHaveStorageQuery(props.row.realizations) && storageQueryMetricCollect)">
<span class="label">{{$t('kylinLang.query.total_scan_count')}}:</span>
<span class="text">{{props.row.total_scan_count | filterNumbers}}</span>
</p>
- <p class="list">
+ <p class="list" v-if="!isHaveStorageQuery(props.row.realizations) || (isHaveStorageQuery(props.row.realizations) && storageQueryMetricCollect)">
<span class="label">{{$t('kylinLang.query.total_scan_bytes')}}:</span>
<span class="text">{{props.row.total_scan_bytes | filterNumbers}}</span>
</p>
@@ -326,7 +326,8 @@ import Diagnostic from 'components/admin/Diagnostic/index'
'currentSelectedProject',
'briefMenuGet',
'queryHistoryFilter',
- 'isNonAdminGenQueryDiagPackage'
+ 'isNonAdminGenQueryDiagPackage',
+ 'storageQueryMetricCollect' // 系统逃生通道:是否可以获取统计分层存储扫描行数、扫描字节数
])
},
components: {
@@ -376,7 +377,8 @@ import Diagnostic from 'components/admin/Diagnostic/index'
downloadQueryDiagnosticPackage: 'Download Query Diagnostic Package',
queryError: 'Query error.',
viewDetails: 'View Details',
- errorTitle: 'Error Details'
+ errorTitle: 'Error Details',
+ fetchError: 'Can\'t get the result as the record is missing'
}
},
filters: {
@@ -460,6 +462,19 @@ export default class QueryHistoryTable extends Vue {
return [{text: this.$t('allModels'), value: 'modelName', icon: 'el-icon-ksd-cube'}]
}
+ isHaveStorageQuery (realizations) {
+ let isStorageQuery = false
+ if (realizations && realizations.length) {
+ for (let r of realizations) {
+ if (r.secondStorage) {
+ isStorageQuery = true
+ break
+ }
+ }
+ }
+ return isStorageQuery
+ }
+
// 排除击中 snapshot 的查询对象
getRealizations (row) {
return row.filter(item => item.indexType !== 'Table Snapshot' && item.layoutId !== 0 && item.layoutId !== -1)
diff --git a/kystudio/src/components/query/query_result.vue b/kystudio/src/components/query/query_result.vue
index d22f5103b9..45a1aa539b 100644
--- a/kystudio/src/components/query/query_result.vue
+++ b/kystudio/src/components/query/query_result.vue
@@ -83,9 +83,15 @@
</span>
<span class="text" v-else>{{Math.round(extraoption.duration / 1000 * 100) / 100 || 0.00}}s</span>
</p>
- <p class="resultText" v-if="!extraoption.pushDown">
+ <p class="resultText" v-if="!extraoption.pushDown&&(isHaveStorageQuery&&storageQueryMetricCollect || !isHaveStorageQuery)">
<span class="label">{{$t('kylinLang.query.total_scan_count')}}: </span>
- <span class="text">{{extraoption.totalScanRows | filterNumbers}}</span>
+ <span class="text" v-if="!isHaveStorageQuery">{{extraoption.totalScanRows | filterNumbers}}</span>
+ <span class="text" v-else>
+ <span v-if="isLoadingScanRows"><i class="el-ksd-icon-refresh_16"></i><span class="refresh-loading">{{$t('loading')}}</span></span>
+ <span v-else-if="extraoption.totalScanRows === 0" @click="fetchTotalScanRows"><i class="el-ksd-icon-refresh_16"></i><span class="refresh-label">{{$t('refreshManual')}}</span></span>
+ <span v-else-if="extraoption.totalScanRows === -1"><span class="refresh-error">{{$t('fetchError')}}</span></span>
+ <span v-else>{{extraoption.totalScanRows | filterNumbers}}</span>
+ </span>
</p>
<p class="resultText" v-if="!extraoption.pushDown">
<span class="label">{{$t('kylinLang.query.result_row_count')}}: </span>
@@ -209,7 +215,8 @@ import echarts from 'echarts'
...mapActions({
query: 'QUERY_BUILD_TABLES',
postToExportCSV: 'EXPORT_CSV',
- loadAllIndex: 'LOAD_ALL_INDEX'
+ loadAllIndex: 'LOAD_ALL_INDEX',
+ loadSecondStorageScanRows: 'LOAD_SECOND_STORAGE_SCAN_ROWS'
}),
...mapActions('DetailDialogModal', {
callGlobalDetailDialog: 'CALL_MODAL'
@@ -219,7 +226,8 @@ import echarts from 'echarts'
...mapGetters([
'currentSelectedProject',
'insightActions',
- 'datasourceActions'
+ 'datasourceActions',
+ 'storageQueryMetricCollect' // 系统逃生通道:是否可以获取统计分层存储扫描行数
])
},
components: {
@@ -327,6 +335,8 @@ export default class queryResult extends Vue {
model = {
uuid: ''
}
+ isHaveStorageQuery = false
+ isLoadingScanRows = false
// 增加可视化按钮
get insightBtnGroups () {
return [
@@ -493,11 +503,15 @@ export default class queryResult extends Vue {
}
}
get realizations () {
+ this.isHaveStorageQuery = false
if (this.extraoption.realizations && this.extraoption.realizations.length) {
let realizations = []
for (let i of this.extraoption.realizations) {
if (i.layoutId !== -1 && i.layoutId !== null && i.layoutId !== 0) {
realizations.push(i)
+ if (i.secondStorage) {
+ this.isHaveStorageQuery = true
+ }
}
}
return realizations
@@ -535,6 +549,20 @@ export default class queryResult extends Vue {
return this.$store.state.project.multi_partition_enabled ? this.$t('noModelRangeTips2') : this.$t('noModelRangeTips')
}
+ async fetchTotalScanRows () {
+ try {
+ this.isLoadingScanRows = true
+ const { queryId } = this.extraoption
+ const res = await this.loadSecondStorageScanRows({ project: this.currentSelectedProject, query_id: queryId })
+ const data = await handleSuccessAsync(res)
+ this.extraoption.totalScanRows = data.total_scan_count
+ this.isLoadingScanRows = false
+ } catch (e) {
+ this.isLoadingScanRows = false
+ handleError(e)
+ }
+ }
+
// 展示 layout 详情
async openLayoutDetails (item) {
const {modelId, layoutId} = item
diff --git a/kystudio/src/store/model.js b/kystudio/src/store/model.js
index cbcf4e1615..b2df301cd0 100644
--- a/kystudio/src/store/model.js
+++ b/kystudio/src/store/model.js
@@ -407,6 +407,9 @@ export default {
},
[types.CHECK_INTERNAL_MEASURE] (_, params) {
return api.model.checkInternalMeasure(params)
+ },
+ [types.LOAD_SECOND_STORAGE_SCAN_ROWS] (_, params) {
+ return api.model.loadSecondStorageScanRows(params)
}
},
getters: {
diff --git a/kystudio/src/store/system.js b/kystudio/src/store/system.js
index b662f17c36..1d80cd71c7 100644
--- a/kystudio/src/store/system.js
+++ b/kystudio/src/store/system.js
@@ -239,6 +239,9 @@ export default {
},
isStreamingEnabled: (state) => {
return state.streamingEnabled === 'true'
+ },
+ storageQueryMetricCollect: (state) => {
+ return state.storageQuery === 'true'
}
}
}
diff --git a/kystudio/src/store/types.js b/kystudio/src/store/types.js
index b403930e33..d02a703296 100644
--- a/kystudio/src/store/types.js
+++ b/kystudio/src/store/types.js
@@ -286,6 +286,7 @@ export const GET_JOB_SIMPLE_LOG = 'GET_JOB_SIMPLE_LOG'
export const VALIDATE_DATE_FORMAT = 'VALIDATE_DATE_FORMAT'
export const CHECK_INTERNAL_MEASURE = 'CHECK_INTERNAL_MEASURE'
export const UPDATE_FILTER_MODEL_NAME_CLOUD = 'UPDATE_FILTER_MODEL_NAME_CLOUD'
+export const LOAD_SECOND_STORAGE_SCAN_ROWS = 'LOAD_SECOND_STORAGE_SCAN_ROWS'
// table index
export const GET_TABLE_INDEX = 'GET_TABLE_INDEX'
export const EDIT_TABLE_INDEX = 'EDIT_TABLE_INDEX'