This is an automated email from the ASF dual-hosted git repository.
caolu pushed a commit to branch kylin5
in repository https://gitbox.apache.org/repos/asf/kylin.git
The following commit(s) were added to refs/heads/kylin5 by this push:
new 2ced249833 KYLIN-6053 Add OpenAPI to show internaltable details
2ced249833 is described below
commit 2ced2498338c7894cc6fdd115ce37121576472c6
Author: Yan Xin <[email protected]>
AuthorDate: Fri Nov 29 11:22:08 2024 +0800
KYLIN-6053 Add OpenAPI to show internaltable details
---
.../kylin/metadata/table/InternalTableManager.java | 25 ++++++++++
.../rest/service/InternalTableServiceTest.java | 56 ++++++++++++++++------
.../kylin/rest/service/InternalTableService.java | 20 +++-----
.../rest/controller/InternalTableController.java | 11 +----
.../open/OpenInternalTableController.java | 2 +-
5 files changed, 75 insertions(+), 39 deletions(-)
diff --git
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/table/InternalTableManager.java
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/table/InternalTableManager.java
index ab6da16e8c..4848a219ef 100644
---
a/src/core-metadata/src/main/java/org/apache/kylin/metadata/table/InternalTableManager.java
+++
b/src/core-metadata/src/main/java/org/apache/kylin/metadata/table/InternalTableManager.java
@@ -19,13 +19,20 @@
package org.apache.kylin.metadata.table;
import static java.util.stream.Collectors.groupingBy;
+import static
org.apache.kylin.common.persistence.RawResourceFilter.Operator.EQUAL_CASE_INSENSITIVE;
+import static
org.apache.kylin.common.persistence.RawResourceFilter.Operator.LIKE_CASE_INSENSITIVE;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.apache.commons.lang3.StringUtils;
import org.apache.kylin.common.KylinConfig;
import org.apache.kylin.common.persistence.MetadataType;
+import org.apache.kylin.common.persistence.RawResourceFilter;
import org.apache.kylin.common.persistence.ResourceStore;
import org.apache.kylin.metadata.cachesync.CachedCrudAssist;
@@ -125,4 +132,22 @@ public class InternalTableManager {
void modify(InternalTableDesc copyForWrite);
}
+ public List<InternalTableDesc> getInternalTableDescInfos(String
databaseName, String tableName, boolean isFuzzy) {
+ RawResourceFilter combinedFilter = new RawResourceFilter();
+ if (!StringUtils.isBlank(databaseName)) {
+ if (isFuzzy) {
+ combinedFilter.addConditions("dbName",
Collections.singletonList(databaseName), LIKE_CASE_INSENSITIVE);
+ } else {
+ combinedFilter.addConditions("dbName",
Collections.singletonList(databaseName), EQUAL_CASE_INSENSITIVE);
+ }
+ }
+ if (!StringUtils.isBlank(tableName)) {
+ if (isFuzzy) {
+ combinedFilter.addConditions("name",
Collections.singletonList(tableName), LIKE_CASE_INSENSITIVE);
+ } else {
+ combinedFilter.addConditions("name",
Collections.singletonList(tableName), EQUAL_CASE_INSENSITIVE);
+ }
+ }
+ return
internalTableCrud.listByFilter(combinedFilter).stream().distinct().collect(Collectors.toList());
+ }
}
diff --git
a/src/data-loading-service/src/test/java/org/apache/kylin/rest/service/InternalTableServiceTest.java
b/src/data-loading-service/src/test/java/org/apache/kylin/rest/service/InternalTableServiceTest.java
index c81b251c93..14980cff88 100644
---
a/src/data-loading-service/src/test/java/org/apache/kylin/rest/service/InternalTableServiceTest.java
+++
b/src/data-loading-service/src/test/java/org/apache/kylin/rest/service/InternalTableServiceTest.java
@@ -282,7 +282,8 @@ public class InternalTableServiceTest extends
AbstractTestCase {
partitionCols, dateFormat, tblProperties,
InternalTableDesc.StorageType.PARQUET.name());
// check internal table metadata
- List<InternalTableDescResponse> internalTables =
internalTableService.getTableList(PROJECT, false, false, "");
+ List<InternalTableDescResponse> internalTables =
internalTableService.getTableList(PROJECT, false, false, "",
+ "");
Assertions.assertEquals(1, internalTables.size());
InternalTableDescResponse response = internalTables.get(0);
Assertions.assertEquals(DATE_COL, response.getTimePartitionCol());
@@ -580,7 +581,7 @@ public class InternalTableServiceTest extends
AbstractTestCase {
internalTableService.createInternalTable(PROJECT, table.getName(),
table.getDatabase(), null, null,
new HashMap<>(), InternalTableDesc.StorageType.PARQUET.name());
- List<InternalTableDescResponse> tables =
internalTableService.getTableList(PROJECT, false, false, "");
+ List<InternalTableDescResponse> tables =
internalTableService.getTableList(PROJECT, false, false, "", "");
Assertions.assertEquals(1, tables.size());
Assertions.assertNull(tables.get(0).getTimePartitionCol());
@@ -590,7 +591,7 @@ public class InternalTableServiceTest extends
AbstractTestCase {
internalTableService.updateInternalTable(PROJECT,
tables.get(0).getTableName(), tables.get(0).getDatabaseName(),
new String[] { DATE_COL }, "yyyy-MM-dd", new HashMap<>(),
InternalTableDesc.StorageType.PARQUET.name());
- tables = internalTableService.getTableList(PROJECT, false, false, "");
+ tables = internalTableService.getTableList(PROJECT, false, false, "",
"");
Assertions.assertEquals(1, tables.size());
Assertions.assertEquals(DATE_COL, tables.get(0).getTimePartitionCol());
@@ -782,7 +783,6 @@ public class InternalTableServiceTest extends
AbstractTestCase {
TableDesc table = tManager.getTableDesc(TABLE_INDENTITY);
String[] partitionCols = new String[] { DATE_COL };
Map<String, String> tblProperties = new HashMap<>();
- String tableIdentity = table.getDatabase() + "." + table.getName();
boolean isFuzzy = true;
boolean needDetails = true;
when(tableService.getPartitionColumnFormat(any(), any(), any(),
any())).thenReturn("yyyy-MM-dd");
@@ -796,7 +796,7 @@ public class InternalTableServiceTest extends
AbstractTestCase {
Assertions.assertTrue(internalTableFolder.exists() &&
internalTableFolder.isDirectory());
List<InternalTableDescResponse> tables =
internalTableService.getTableList(PROJECT, isFuzzy, needDetails,
- tableIdentity);
+ table.getDatabase(), table.getName());
Assertions.assertEquals(tables.get(0).getTableName(), table.getName());
Assertions.assertEquals(DATE_COL, tables.get(0).getTimePartitionCol());
List<ColumnDesc> tableColumn = tables.get(0).getColumns();
@@ -809,19 +809,17 @@ public class InternalTableServiceTest extends
AbstractTestCase {
Assertions.assertEquals(columns[i].getDatatype(),
columninfo.getDatatype());
}
- tableIdentity = "E.S";
tables.clear();
- tables = internalTableService.getTableList(PROJECT, isFuzzy,
needDetails, tableIdentity);
+ tables = internalTableService.getTableList(PROJECT, isFuzzy,
needDetails, "E", "S");
Assertions.assertEquals(tables.get(0).getTableName(), table.getName());
Assertions.assertEquals(DATE_COL, tables.get(0).getTimePartitionCol());
tableColumn = tables.get(0).getColumns();
Assertions.assertEquals(tableColumn.size(), columns.length);
- tableIdentity = "DEFAULT2.DUMMY";
KylinException notExistException = null;
tables.clear();
try {
- tables = internalTableService.getTableList(PROJECT, isFuzzy,
needDetails, tableIdentity);
+ tables = internalTableService.getTableList(PROJECT, isFuzzy,
needDetails, "DEFAULT2", "DUMMY");
} catch (KylinException e) {
notExistException = e;
}
@@ -830,10 +828,9 @@ public class InternalTableServiceTest extends
AbstractTestCase {
null != notExistException &&
notExistException.getErrorCode().getCodeString().equals("KE-010007014"));
//Illegal string
- tableIdentity = "DEFAULT.1";
notExistException = null;
try {
- tables = internalTableService.getTableList(PROJECT, isFuzzy,
needDetails, tableIdentity);
+ tables = internalTableService.getTableList(PROJECT, isFuzzy,
needDetails, "DEFAULT", "1");
} catch (KylinException e) {
notExistException = e;
}
@@ -850,7 +847,6 @@ public class InternalTableServiceTest extends
AbstractTestCase {
TableDesc table = tManager.getTableDesc(TABLE_INDENTITY);
String[] partitionCols = new String[] { DATE_COL };
Map<String, String> tblProperties = new HashMap<>();
- String tableIdentity = table.getDatabase() + "." + table.getName();
boolean isFuzzy = false;
boolean needDetails = true;
when(tableService.getPartitionColumnFormat(any(), any(), any(),
any())).thenReturn("yyyy-MM-dd");
@@ -864,7 +860,7 @@ public class InternalTableServiceTest extends
AbstractTestCase {
Assertions.assertTrue(internalTableFolder.exists() &&
internalTableFolder.isDirectory());
List<InternalTableDescResponse> tables =
internalTableService.getTableList(PROJECT, isFuzzy, needDetails,
- tableIdentity);
+ table.getDatabase(), table.getName());
Assertions.assertEquals(tables.get(0).getTableName(), table.getName());
Assertions.assertEquals(DATE_COL, tables.get(0).getTimePartitionCol());
List<ColumnDesc> tableColumn = tables.get(0).getColumns();
@@ -877,11 +873,10 @@ public class InternalTableServiceTest extends
AbstractTestCase {
Assertions.assertEquals(columns[i].getDatatype(),
columninfo.getDatatype());
}
- tableIdentity = "DEFAULT.T";
KylinException notExistException = null;
tables.clear();
try {
- tables = internalTableService.getTableList(PROJECT, isFuzzy,
needDetails, tableIdentity);
+ tables = internalTableService.getTableList(PROJECT, isFuzzy,
needDetails, "DEFAULT", "T");
} catch (KylinException e) {
notExistException = e;
}
@@ -889,4 +884,35 @@ public class InternalTableServiceTest extends
AbstractTestCase {
Assertions.assertTrue(
null != notExistException &&
notExistException.getErrorCode().getCodeString().equals("KE-010007014"));
}
+
+ @Test
+ public void testGetInternalTableInfoByFuzzyKey() throws Exception {
+ KylinConfig config = KylinConfig.getInstanceFromEnv();
+ NTableMetadataManager tManager =
NTableMetadataManager.getInstance(config, PROJECT);
+ InternalTableManager internalTableManager =
InternalTableManager.getInstance(config, PROJECT);
+ TableDesc table = tManager.getTableDesc(TABLE_INDENTITY);
+ String[] partitionCols = new String[] { DATE_COL };
+ Map<String, String> tblProperties = new HashMap<>();
+ when(tableService.getPartitionColumnFormat(any(), any(), any(),
any())).thenReturn("yyyy-MM-dd");
+
+ internalTableService.createInternalTable(PROJECT, table.getName(),
table.getDatabase(), partitionCols,
+ "yyyy-MM-dd", tblProperties,
InternalTableDesc.StorageType.PARQUET.name());
+
+ List<InternalTableDesc> tables =
internalTableManager.getInternalTableDescInfos("", "", true);
+ Assert.assertEquals(1, tables.size());
+ tables = internalTableManager.getInternalTableDescInfos("", "", false);
+ Assert.assertEquals(1, tables.size());
+ tables = internalTableManager.getInternalTableDescInfos("D", "",
false);
+ Assert.assertEquals(0, tables.size());
+ tables = internalTableManager.getInternalTableDescInfos("D", "T",
true);
+ Assert.assertEquals(1, tables.size());//DEFAULT.TEST_KYLIN_FACT
+ tables = internalTableManager.getInternalTableDescInfos("D", "T",
false);
+ Assert.assertEquals(0, tables.size());
+ tables = internalTableManager.getInternalTableDescInfos("",
"TEST_KYLIN_FACT", false);
+ Assert.assertEquals(1, tables.size());
+ tables = internalTableManager.getInternalTableDescInfos("", "TEST",
true);
+ Assert.assertEquals(1, tables.size());
+ tables = internalTableManager.getInternalTableDescInfos("D", "", true);
+ Assert.assertEquals(1, tables.size());
+ }
}
diff --git
a/src/datasource-service/src/main/java/org/apache/kylin/rest/service/InternalTableService.java
b/src/datasource-service/src/main/java/org/apache/kylin/rest/service/InternalTableService.java
index cc6913b8c3..706efe96a7 100644
---
a/src/datasource-service/src/main/java/org/apache/kylin/rest/service/InternalTableService.java
+++
b/src/datasource-service/src/main/java/org/apache/kylin/rest/service/InternalTableService.java
@@ -402,23 +402,17 @@ public class InternalTableService extends BasicService {
}
public List<InternalTableDescResponse> getTableList(String project,
boolean isFuzzy, boolean needDetails,
- String fuzzyKey) {
+ String databaseName, String tableName) {
InternalTableManager internalTableManager =
getManager(InternalTableManager.class, project);
- List<InternalTableDesc> tableList =
internalTableManager.listAllTables();
- if (StringUtils.isNotBlank(fuzzyKey)) {
- if (isFuzzy) {
- String regex = fuzzyKey.replace(".", ".*");
- tableList = tableList.stream().filter(table ->
table.getIdentity().matches("(?i).*" + regex + ".*"))
- .collect(Collectors.toList());
- } else {
- tableList = tableList.stream()
- .filter(table ->
StringUtils.equalsIgnoreCase(table.getIdentity(), fuzzyKey))
- .collect(Collectors.toList());
- }
+ List<InternalTableDesc> tableList;
+ if (StringUtils.isNotBlank(databaseName) ||
StringUtils.isNotBlank(tableName)) {
+ tableList =
internalTableManager.getInternalTableDescInfos(databaseName, tableName,
isFuzzy);
if (tableList.isEmpty()) {
throw new KylinException(INTERNAL_TABLE_NOT_EXIST,
- String.format(Locale.ROOT,
MsgPicker.getMsg().getInternalTableNotFound(), fuzzyKey));
+ String.format(Locale.ROOT,
MsgPicker.getMsg().getInternalTableNotFound(), tableName));
}
+ } else {
+ tableList = internalTableManager.listAllTables();
}
return tableList.stream().map(table ->
InternalTableDescResponse.convertToResponse(table, needDetails))
.collect(Collectors.toList());
diff --git
a/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/InternalTableController.java
b/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/InternalTableController.java
index d514bfc6e9..85e1d3e6b9 100644
---
a/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/InternalTableController.java
+++
b/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/InternalTableController.java
@@ -168,16 +168,7 @@ public class InternalTableController extends
NBasicController {
@RequestParam(value = "page_size", required = false, defaultValue
= "10") Integer limit) {
project = checkProjectName(project);
- String fuzzyKey = "";
- if (StringUtils.isNotBlank(database) && StringUtils.isNotBlank(table))
{
- fuzzyKey = StringUtils.trim(database) + "." +
StringUtils.trim(table);
- } else if (StringUtils.isBlank(database)) {
- fuzzyKey = StringUtils.trim(table);
- } else if (StringUtils.isBlank(table)) {
- fuzzyKey = StringUtils.trim(database);
- }
-
- val rep = internalTableService.getTableList(project, isFuzzy,
needDetails, fuzzyKey);
+ val rep = internalTableService.getTableList(project, isFuzzy,
needDetails, database, table);
return new EnvelopeResponse<>(KylinException.CODE_SUCCESS,
DataResult.get(rep, offset, limit), "");
}
diff --git
a/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/open/OpenInternalTableController.java
b/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/open/OpenInternalTableController.java
index c54d7ed853..31755e0188 100644
---
a/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/open/OpenInternalTableController.java
+++
b/src/metadata-server/src/main/java/org/apache/kylin/rest/controller/open/OpenInternalTableController.java
@@ -94,7 +94,7 @@ public class OpenInternalTableController extends
NBasicController {
if (StringUtils.isBlank(table) && StringUtils.isBlank(database) &&
isFuzzy) {
throw new KylinException(EMPTY_PARAMETER,
MsgPicker.getMsg().getTableOrDatabaseNameCannotEmpty());
}
- return internalTableController.getTableList(projectName, isFuzzy,
needDetails, database, table, offset, limit);
+ return internalTableController.getTableList(projectName, needDetails,
isFuzzy, database, table, offset, limit);
}
@ApiOperation(value = "get_table_detail", tags = { "AI" })