You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2021/07/07 02:27:24 UTC
[incubator-doris] branch master updated: [Feature] Add update time
to show table status (#6117)
This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
The following commit(s) were added to refs/heads/master by this push:
new 198ba78 [Feature] Add update time to show table status (#6117)
198ba78 is described below
commit 198ba785958871a3faa013a04a25031714732b74
Author: Zhengguo Yang <ya...@gmail.com>
AuthorDate: Wed Jul 7 10:27:14 2021 +0800
[Feature] Add update time to show table status (#6117)
Add update time to show table status
```
MySQL [test_query_qa]> show table status;
+----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-----------+----------+----------------+---------+
| Name | Engine | Version | Row_format | Rows | Avg_row_length | Data_length | Max_data_length | Index_length | Data_free | Auto_increment | Create_time | Update_time | Check_time | Collation | Checksum | Create_options | Comment |
+----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-----------+----------+----------------+---------+
| bigtable | Doris | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 2021-06-29 17:09:28 | 2021-06-29 17:17:28 | 1970-01-01 07:59:59 | utf-8 | NULL | NULL | OLAP |
| test | Doris | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 2021-06-29 17:09:26 | 2021-06-29 17:17:28 | 1970-01-01 07:59:59 | utf-8 | NULL | NULL | OLAP |
| baseall | Doris | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 2021-06-29 17:09:26 | 2021-06-29 17:17:26 | 1970-01-01 07:59:59 | utf-8 | NULL | NULL | OLAP |
+----------+--------+---------+------------+------+----------------+-------------+-----------------+--------------+-----------+----------------+---------------------+---------------------+---------------------+-----------+----------+----------------+---------+
3 rows in set (0.002 sec)
```
---
.../exec/schema_scanner/schema_tables_scanner.cpp | 48 +++++++++++++++++++---
.../java/org/apache/doris/catalog/OlapTable.java | 36 ++++++++++++++++
.../main/java/org/apache/doris/catalog/Table.java | 17 ++++++++
.../org/apache/doris/catalog/TempPartitions.java | 9 ++++
.../java/org/apache/doris/qe/ShowExecutor.java | 41 ++++++++++++++++--
.../apache/doris/service/FrontendServiceImpl.java | 6 +++
gensrc/thrift/FrontendService.thrift | 6 +++
7 files changed, 154 insertions(+), 9 deletions(-)
diff --git a/be/src/exec/schema_scanner/schema_tables_scanner.cpp b/be/src/exec/schema_scanner/schema_tables_scanner.cpp
index 178424e..96e95a5 100644
--- a/be/src/exec/schema_scanner/schema_tables_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_tables_scanner.cpp
@@ -143,12 +143,26 @@ Status SchemaTablesScanner::fill_one_row(Tuple* tuple, MemPool* pool) {
// row_format
{ tuple->set_null(_tuple_desc->slots()[6]->null_indicator_offset()); }
// rows
- { tuple->set_null(_tuple_desc->slots()[7]->null_indicator_offset()); }
+ if (tbl_status.__isset.rows) {
+ void* slot = tuple->get_slot(_tuple_desc->slots()[7]->tuple_offset());
+ *(reinterpret_cast<int64_t*>(slot)) = tbl_status.rows;
+ } else {
+ tuple->set_null(_tuple_desc->slots()[7]->null_indicator_offset());
+ }
// avg_row_length
- { tuple->set_null(_tuple_desc->slots()[8]->null_indicator_offset()); }
+ if (tbl_status.__isset.avg_row_length) {
+ void* slot = tuple->get_slot(_tuple_desc->slots()[8]->tuple_offset());
+ *(reinterpret_cast<int64_t*>(slot)) = tbl_status.avg_row_length;
+ } else {
+ tuple->set_null(_tuple_desc->slots()[8]->null_indicator_offset());
+ }
// data_length
- { tuple->set_null(_tuple_desc->slots()[9]->null_indicator_offset()); }
- // max_data_length
+ if (tbl_status.__isset.avg_row_length) {
+ void* slot = tuple->get_slot(_tuple_desc->slots()[9]->tuple_offset());
+ *(reinterpret_cast<int64_t*>(slot)) = tbl_status.data_length;
+ } else {
+ tuple->set_null(_tuple_desc->slots()[9]->null_indicator_offset());
+ } // max_data_length
{ tuple->set_null(_tuple_desc->slots()[10]->null_indicator_offset()); }
// index_length
{ tuple->set_null(_tuple_desc->slots()[11]->null_indicator_offset()); }
@@ -169,7 +183,17 @@ Status SchemaTablesScanner::fill_one_row(Tuple* tuple, MemPool* pool) {
}
}
// update_time
- { tuple->set_null(_tuple_desc->slots()[15]->null_indicator_offset()); }
+ if (tbl_status.__isset.update_time) {
+ int64_t update_time = tbl_status.update_time;
+ if (update_time <= 0) {
+ tuple->set_null(_tuple_desc->slots()[15]->null_indicator_offset());
+ } else {
+ tuple->set_not_null(_tuple_desc->slots()[15]->null_indicator_offset());
+ void* slot = tuple->get_slot(_tuple_desc->slots()[15]->tuple_offset());
+ DateTimeValue* time_slot = reinterpret_cast<DateTimeValue*>(slot);
+ time_slot->from_unixtime(update_time, TimezoneUtils::default_time_zone);
+ }
+ }
// check_time
if (tbl_status.__isset.last_check_time) {
int64_t check_time = tbl_status.last_check_time;
@@ -183,7 +207,19 @@ Status SchemaTablesScanner::fill_one_row(Tuple* tuple, MemPool* pool) {
}
}
// collation
- { tuple->set_null(_tuple_desc->slots()[17]->null_indicator_offset()); }
+ if (tbl_status.__isset.collation) {
+ void* slot = tuple->get_slot(_tuple_desc->slots()[17]->tuple_offset());
+ StringValue* str_slot = reinterpret_cast<StringValue*>(slot);
+ const std::string* src = &tbl_status.collation;
+ str_slot->len = src->length();
+ str_slot->ptr = (char*)pool->allocate(str_slot->len);
+ if (NULL == str_slot->ptr) {
+ return Status::InternalError("Allocate memcpy failed.");
+ }
+ memcpy(str_slot->ptr, src->c_str(), str_slot->len);
+ } else {
+ tuple->set_null(_tuple_desc->slots()[17]->null_indicator_offset());
+ }
// checksum
{ tuple->set_null(_tuple_desc->slots()[18]->null_indicator_offset()); }
// create_options
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
index 72b0d9c..478e076 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/OlapTable.java
@@ -387,6 +387,17 @@ public class OlapTable extends Table {
return null;
}
+ @Override
+ public long getUpdateTime() {
+ long updateTime = tempPartitions.getUpdateTime();
+ for (Partition p : idToPartition.values()) {
+ if (p.getVisibleVersionTime() > updateTime) {
+ updateTime = p.getVisibleVersionTime();
+ }
+ }
+ return updateTime;
+ }
+
// this is only for schema change.
public void renameIndexForSchemaChange(String name, String newName) {
long idxId = indexNameToId.remove(name);
@@ -922,6 +933,7 @@ public class OlapTable extends Table {
return tTableDescriptor;
}
+ @Override
public long getRowCount() {
long rowCount = 0;
for (Map.Entry<Long, Partition> entry : idToPartition.entrySet()) {
@@ -931,6 +943,30 @@ public class OlapTable extends Table {
}
@Override
+ public long getAvgRowLength() {
+ long rowCount = 0;
+ long dataSize = 0;
+ for (Map.Entry<Long, Partition> entry : idToPartition.entrySet()) {
+ rowCount += entry.getValue().getBaseIndex().getRowCount();
+ dataSize += entry.getValue().getBaseIndex().getDataSize();
+ }
+ if (rowCount > 0) {
+ return dataSize / rowCount;
+ } else {
+ return 0;
+ }
+ }
+
+ @Override
+ public long getDataLength() {
+ long dataSize = 0;
+ for (Map.Entry<Long, Partition> entry : idToPartition.entrySet()) {
+ dataSize += entry.getValue().getBaseIndex().getDataSize();
+ }
+ return dataSize;
+ }
+
+ @Override
public CreateTableStmt toCreateTableStmt(String dbName) {
throw new RuntimeException("Don't support anymore");
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
index ec7e281..152b085 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/Table.java
@@ -232,6 +232,23 @@ public class Table extends MetaObject implements Writable {
return createTime;
}
+ public long getUpdateTime() {
+ return -1L;
+ }
+
+ public long getRowCount() {
+ return 0;
+ }
+
+ public long getAvgRowLength() {
+ return 0;
+ }
+
+ public long getDataLength() {
+ return 0;
+ }
+
+
public TTableDescriptor toThrift() {
return null;
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/catalog/TempPartitions.java b/fe/fe-core/src/main/java/org/apache/doris/catalog/TempPartitions.java
index b5fb03c..fc52513 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/catalog/TempPartitions.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/catalog/TempPartitions.java
@@ -57,6 +57,15 @@ public class TempPartitions implements Writable, GsonPostProcessable {
idToPartition.put(partition.getId(), partition);
nameToPartition.put(partition.getName(), partition);
}
+ public long getUpdateTime() {
+ long updateTime = -1l;
+ for (Partition p : idToPartition.values()) {
+ if (p.getVisibleVersionTime() > updateTime) {
+ updateTime = p.getVisibleVersionTime();
+ }
+ }
+ return updateTime;
+ }
/*
* Drop temp partitions.
diff --git a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
index bc2e8d4..e526b00 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/qe/ShowExecutor.java
@@ -125,6 +125,7 @@ import org.apache.doris.common.util.LogKey;
import org.apache.doris.common.util.OrderByPair;
import org.apache.doris.common.util.ProfileManager;
import org.apache.doris.common.util.RuntimeProfile;
+import org.apache.doris.common.util.TimeUtils;
import org.apache.doris.load.DeleteHandler;
import org.apache.doris.load.ExportJob;
import org.apache.doris.load.ExportMgr;
@@ -631,16 +632,50 @@ public class ShowExecutor {
PrivPredicate.SHOW)) {
continue;
}
-
List<String> row = Lists.newArrayList();
// Name
row.add(table.getName());
// Engine
row.add(table.getEngine());
- // version, ra
- for (int i = 0; i < 15; ++i) {
+ // version
+ row.add(null);
+ // Row_format
+ row.add(null);
+ // Rows
+ row.add(String.valueOf(table.getRowCount()));
+ // Avg_row_length
+ row.add(String.valueOf(table.getAvgRowLength()));
+ // Data_length
+ row.add(String.valueOf(table.getDataLength()));
+ // Max_data_length
+ row.add(null);
+ // Index_length
+ row.add(null);
+ // Data_free
+ row.add(null);
+ // Auto_increment
+ row.add(null);
+ // Create_time
+ row.add(TimeUtils.longToTimeString(table.getCreateTime() * 1000));
+ // Update_time
+ if (table.getUpdateTime() > 0) {
+ row.add(TimeUtils.longToTimeString(table.getUpdateTime()));
+ } else {
+ row.add(null);
+ }
+ // Check_time
+ if (table.getLastCheckTime() > 0) {
+ row.add(TimeUtils.longToTimeString(table.getLastCheckTime() * 1000));
+ } else {
row.add(null);
}
+ // Collation
+ row.add("utf-8");
+ // Checksum
+ row.add(null);
+ // Create_options
+ row.add(null);
+
row.add(table.getComment());
rows.add(row);
}
diff --git a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index 260a641..1bc16e7 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -285,6 +285,12 @@ public class FrontendServiceImpl implements FrontendService.Iface {
status.setComment(table.getComment());
status.setCreateTime(table.getCreateTime());
status.setLastCheckTime(table.getLastCheckTime());
+ status.setUpdateTime(table.getUpdateTime()/1000);
+ status.setCheckTime(table.getLastCheckTime());
+ status.setCollation("utf-8");
+ status.setRows(table.getRowCount());
+ status.setDataLength(table.getDataLength());
+ status.setAvgRowLength(table.getAvgRowLength());
tablesResult.add(status);
} finally {
table.readUnlock();
diff --git a/gensrc/thrift/FrontendService.thrift b/gensrc/thrift/FrontendService.thrift
index 8c1328a..9246392 100644
--- a/gensrc/thrift/FrontendService.thrift
+++ b/gensrc/thrift/FrontendService.thrift
@@ -314,6 +314,12 @@ struct TTableStatus {
5: optional i64 last_check_time
6: optional i64 create_time
7: optional string ddl_sql
+ 8: optional i64 update_time
+ 9: optional i64 check_time
+ 10: optional string collation
+ 11: optional i64 rows;
+ 12: optional i64 avg_row_length
+ 13: optional i64 data_length;
}
struct TListTableStatusResult {
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org