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'