This is an automated email from the ASF dual-hosted git repository.
tcodehuber028 pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/amoro.git
The following commit(s) were added to refs/heads/master by this push:
new 329d920b4 [AMORO-2988] Add more base info for the table detail page
(#2989)
329d920b4 is described below
commit 329d920b4e6dd4f9be6041bb2b23102c7eadb0eb
Author: tcodehuber <[email protected]>
AuthorDate: Fri Jul 5 15:25:51 2024 +0800
[AMORO-2988] Add more base info for the table detail page (#2989)
* [AMORO-2988] Add more base info for the table detail page
* code refactor
* code refactor
* code refactor
* code refactor
* remove some code
---
.../src/views/tables/components/Details.vue | 6 ++----
.../amoro-ams-dashboard/src/views/tables/index.vue | 17 ++++++++-------
.../dashboard/MixedAndIcebergTableDescriptor.java | 24 ++++++++++++++++++++++
.../server/dashboard/PaimonTableDescriptor.java | 1 +
.../dashboard/controller/TableController.java | 6 ++++++
5 files changed, 41 insertions(+), 13 deletions(-)
diff --git
a/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Details.vue
b/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Details.vue
index a5bcba3c9..a4caa6b11 100644
--- a/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Details.vue
+++ b/amoro-ams/amoro-ams-dashboard/src/views/tables/components/Details.vue
@@ -62,12 +62,10 @@ const changeMetricsMap: IMap<string | number> = {
const state = reactive({
detailLoading: false,
baseDetailInfo: {
+ optimizingStatus: '',
tableType: '',
tableName: '',
createTime: '',
- size: '',
- file: '',
- averageFile: '',
tableFormat: '',
hasPartition: false, // Whether there is a partition, if there is no
partition, the file list will be displayed
} as IBaseDetailInfo,
@@ -93,7 +91,7 @@ async function getTableDetails() {
state.baseDetailInfo = {
...tableSummary,
tableType,
- tableName: tableIdentifier?.tableName || '',
+ tableName: `${tableIdentifier?.catalog ||
''}.${tableIdentifier?.database || ''}.${tableIdentifier?.tableName || ''}`,
createTime: createTime ? dateFormat(createTime) : '',
hasPartition: !!(partitionColumnList?.length),
}
diff --git a/amoro-ams/amoro-ams-dashboard/src/views/tables/index.vue
b/amoro-ams/amoro-ams-dashboard/src/views/tables/index.vue
index 55d9b8c32..5e5eca29a 100644
--- a/amoro-ams/amoro-ams-dashboard/src/views/tables/index.vue
+++ b/amoro-ams/amoro-ams-dashboard/src/views/tables/index.vue
@@ -53,12 +53,10 @@ export default defineComponent({
activeKey: 'Details',
isSecondaryNav: false,
baseInfo: {
+ optimizingStatus: '',
tableType: '',
tableName: '',
createTime: '',
- size: '',
- file: '',
- averageFile: '',
tableFormat: '',
hasPartition: false,
} as IBaseDetailInfo,
@@ -141,15 +139,16 @@ export default defineComponent({
<div class="g-flex-col">
<div class="g-flex">
<span :title="baseInfo.tableName" class="table-name
g-text-nowrap">{{ baseInfo.tableName }}</span>
- <span v-if="!isIceberg" class="create-time">{{
`${$t('createTime')}: ${baseInfo.createTime}` }}</span>
</div>
<div class="table-info g-flex-ac">
- <p>{{ `${$t('table')}${$t('size')}` }}: <span
class="text-color">{{ baseInfo.size }}</span></p>
+ <p>{{ $t('optimizingStatus') }}: <span class="text-color">{{
baseInfo.optimizingStatus }}</span></p>
<a-divider type="vertical" />
- <p>{{ $t('file') }}: <span class="text-color">{{ baseInfo.file
}}</span></p>
- <a-divider type="vertical" />
- <p>{{ $t('averageFileSize') }}: <span class="text-color">{{
baseInfo.averageFile }}</span></p>
+ <p>{{ $t('records') }}: <span class="text-color">{{
baseInfo.records }}</span></p>
<a-divider type="vertical" />
+ <template v-if="!isIceberg">
+ <p>{{ $t('createTime') }}: <span class="text-color">{{
baseInfo.createTime }}</span></p>
+ <a-divider type="vertical" />
+ </template>
<p>{{ $t('tableFormat') }}: <span class="text-color">{{
baseInfo.tableFormat }}</span></p>
</div>
</div>
@@ -194,7 +193,7 @@ export default defineComponent({
font-size: 24px;
line-height: 1.5;
margin-right: 16px;
- max-width: 400px;
+ max-width: 600px;
padding-left: 24px;
}
.table-info {
diff --git
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/MixedAndIcebergTableDescriptor.java
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/MixedAndIcebergTableDescriptor.java
index 16b223135..bc456a0d6 100644
---
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/MixedAndIcebergTableDescriptor.java
+++
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/MixedAndIcebergTableDescriptor.java
@@ -155,6 +155,8 @@ public class MixedAndIcebergTableDescriptor extends
PersistentBase
tableSummary.put("file", tableFileCnt);
tableSummary.put(
"averageFile", AmsUtil.byteToXB(tableFileCnt == 0 ? 0 : tableSize /
tableFileCnt));
+
+ tableSummary.put("records", getRecordsOfTable(table));
tableSummary.put("tableFormat", tableFormat);
serverTableMeta.setTableSummary(tableSummary);
return serverTableMeta;
@@ -173,6 +175,28 @@ public class MixedAndIcebergTableDescriptor extends
PersistentBase
return sb.toString();
}
+ private long getRecordsOfTable(MixedTable mixedTable) {
+ long totalRecords;
+ if (mixedTable.isKeyedTable()) {
+ Snapshot changeSnapshot =
+ SnapshotUtil.latestSnapshot(mixedTable.asKeyedTable().changeTable(),
null);
+ Snapshot baseSnapshot =
+ SnapshotUtil.latestSnapshot(mixedTable.asKeyedTable().baseTable(),
null);
+ totalRecords =
+ PropertyUtil.propertyAsLong(
+ changeSnapshot.summary(),
SnapshotSummary.TOTAL_RECORDS_PROP, 0L)
+ + PropertyUtil.propertyAsLong(
+ baseSnapshot.summary(), SnapshotSummary.TOTAL_RECORDS_PROP,
0L);
+ } else {
+ totalRecords =
+ PropertyUtil.propertyAsLong(
+ SnapshotUtil.latestSnapshot(mixedTable.asUnkeyedTable(),
null).summary(),
+ SnapshotSummary.TOTAL_RECORDS_PROP,
+ 0L);
+ }
+ return totalRecords;
+ }
+
private Long snapshotIdOfTableRef(Table table, String ref) {
if (ref == null) {
ref = SnapshotRef.MAIN_BRANCH;
diff --git
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/PaimonTableDescriptor.java
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/PaimonTableDescriptor.java
index 598f991cb..ad878b268 100644
---
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/PaimonTableDescriptor.java
+++
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/PaimonTableDescriptor.java
@@ -151,6 +151,7 @@ public class PaimonTableDescriptor implements
FormatTableDescriptor {
tableSummary.put("averageFile", averageFileSize);
tableSummary.put("file", fileCount);
tableSummary.put("size", totalSize);
+ tableSummary.put("records", snapshotsOfTable.getRecords());
baseMetric.put("totalSize", totalSize);
baseMetric.put("fileCount", fileCount);
diff --git
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/controller/TableController.java
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/controller/TableController.java
index 2efa3315f..30c367f1f 100644
---
a/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/controller/TableController.java
+++
b/amoro-ams/amoro-ams-server/src/main/java/org/apache/amoro/server/dashboard/controller/TableController.java
@@ -137,6 +137,12 @@ public class TableController {
ServerTableMeta serverTableMeta =
tableDescriptor.getTableDetail(
TableIdentifier.of(catalog, database,
tableName).buildTableIdentifier());
+ ServerTableIdentifier serverTableIdentifier =
+ tableService.getServerTableIdentifier(
+ TableIdentifier.of(catalog, database,
tableName).buildTableIdentifier());
+ Map<String, Object> tableSummary = serverTableMeta.getTableSummary();
+ tableSummary.put(
+ "optimizingStatus",
tableService.getRuntime(serverTableIdentifier).getOptimizingStatus());
ctx.json(OkResponse.of(serverTableMeta));
}