This is an automated email from the ASF dual-hosted git repository.
jshao pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 76f29c99c [#5277] improvement(cli): display index information for
tables in the Gravitino CLI (#5476)
76f29c99c is described below
commit 76f29c99c22f91af8adeb3eb95cb4627d82e39b6
Author: JUN <[email protected]>
AuthorDate: Thu Nov 14 15:08:09 2024 +0800
[#5277] improvement(cli): display index information for tables in the
Gravitino CLI (#5476)
### What changes were proposed in this pull request?
Add `--index` option to display index information on `Tables`.
Fix `TableDetails` command.
Update `cli/README.md` for table commands
### Why are the changes needed?
This change allows users to retrieve additional index information on
`Tables`, providing more insights.
Fix: #5277
### Does this PR introduce _any_ user-facing change?
Yes, it adds the `--index` option to `CommandEntities.TABLE`.
### How was this patch tested?
1. Follow the instructions in the [cli
README](https://github.com/apache/gravitino/tree/main/clients/cli) to
build the CLI sub-project.
2. Start the Gravitino Playground.
To test, use a command like the following:
```
gcli -i table details --metalake metalake_demo --name
catalog_mysql.db.iceberg_namespace_properties
gcli -i table details --metalake metalake_demo --name
catalog_mysql.db.iceberg_namespace_properties --index
gcli -i table details --metalake metalake_demo --name
catalog_postgres.hr.employee_performance
```
Check that the output matches the expected audit information.



---------
Co-authored-by: Justin Mclean <[email protected]>
---
.../apache/gravitino/cli/GravitinoCommandLine.java | 5 ++-
.../org/apache/gravitino/cli/GravitinoOptions.java | 2 ++
.../{TableDetails.java => ListIndexes.java} | 38 +++++++++++++++-------
.../gravitino/cli/commands/TableDetails.java | 2 +-
docs/cli.md | 7 ++--
5 files changed, 38 insertions(+), 16 deletions(-)
diff --git
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
index bb4649a09..b113137bd 100644
---
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
+++
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoCommandLine.java
@@ -50,6 +50,7 @@ import org.apache.gravitino.cli.commands.ListCatalogs;
import org.apache.gravitino.cli.commands.ListColumns;
import org.apache.gravitino.cli.commands.ListEntityTags;
import org.apache.gravitino.cli.commands.ListGroups;
+import org.apache.gravitino.cli.commands.ListIndexes;
import org.apache.gravitino.cli.commands.ListMetalakeProperties;
import org.apache.gravitino.cli.commands.ListMetalakes;
import org.apache.gravitino.cli.commands.ListRoles;
@@ -109,7 +110,7 @@ public class GravitinoCommandLine {
*
* @param line Parsed command line object.
* @param options Available options for the CLI.
- * @param entity The entity to apply the command to e.g. metalake, catalog,
schema, table etc etc.
+ * @param entity The entity to apply the command to e.g. metalake, catalog,
schema, table etc.
* @param command The type of command to run i.e. list, details, update,
delete, or create.
*/
public GravitinoCommandLine(CommandLine line, Options options, String
entity, String command) {
@@ -350,6 +351,8 @@ public class GravitinoCommandLine {
if (CommandActions.DETAILS.equals(command)) {
if (line.hasOption(GravitinoOptions.AUDIT)) {
new TableAudit(url, ignore, metalake, catalog, schema, table).handle();
+ } else if (line.hasOption(GravitinoOptions.INDEX)) {
+ new ListIndexes(url, ignore, metalake, catalog, schema,
table).handle();
} else if (line.hasOption(GravitinoOptions.DISTRIBUTION)) {
new TableDistribution(url, ignore, metalake, catalog, schema,
table).handle();
} else {
diff --git
a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoOptions.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoOptions.java
index 5fd34c558..ed0dc41a1 100644
--- a/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoOptions.java
+++ b/clients/cli/src/main/java/org/apache/gravitino/cli/GravitinoOptions.java
@@ -42,6 +42,7 @@ public class GravitinoOptions {
public static final String TAG = "tag";
public static final String ROLE = "role";
public static final String AUDIT = "audit";
+ public static final String INDEX = "index";
public static final String FORCE = "force";
public static final String DISTRIBUTION = "distribution";
@@ -62,6 +63,7 @@ public class GravitinoOptions {
options.addOption(createArgOption("m", METALAKE, "metalake name"));
options.addOption(createSimpleOption("i", IGNORE, "ignore client/sever
version check"));
options.addOption(createSimpleOption("a", AUDIT, "display audit
information"));
+ options.addOption(createSimpleOption("x", INDEX, "Display index
infromation"));
options.addOption(createSimpleOption("d", DISTRIBUTION, "Display
distribution information"));
// Create/update options
diff --git
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TableDetails.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListIndexes.java
similarity index 61%
copy from
clients/cli/src/main/java/org/apache/gravitino/cli/commands/TableDetails.java
copy to
clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListIndexes.java
index 2169ccaaa..330574985 100644
---
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TableDetails.java
+++
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/ListIndexes.java
@@ -19,26 +19,27 @@
package org.apache.gravitino.cli.commands;
+import java.util.Arrays;
import org.apache.gravitino.NameIdentifier;
-import org.apache.gravitino.rel.Table;
+import org.apache.gravitino.rel.indexes.Index;
-/** Displays the details of a table. */
-public class TableDetails extends TableCommand {
+/** Displays the index of a table. */
+public class ListIndexes extends TableCommand {
protected final String schema;
protected final String table;
/**
- * Displays the details of a table.
+ * Displays the index of a table.
*
* @param url The URL of the Gravitino server.
* @param ignoreVersions If true don't check the client/server versions
match.
* @param metalake The name of the metalake.
* @param catalog The name of the catalog.
- * @param schema The name of the schenma.
+ * @param schema The name of the schema.
* @param table The name of the table.
*/
- public TableDetails(
+ public ListIndexes(
String url,
boolean ignoreVersions,
String metalake,
@@ -50,19 +51,32 @@ public class TableDetails extends TableCommand {
this.table = table;
}
- /** Displays the details of a table. */
- @Override
+ /** Displays the details of a table's index. */
public void handle() {
- Table gTable = null;
+ Index[] indexes;
try {
- NameIdentifier name = NameIdentifier.of(table);
- gTable = tableCatalog().loadTable(name);
+ NameIdentifier name = NameIdentifier.of(schema, table);
+ indexes = tableCatalog().loadTable(name).index();
} catch (Exception exp) {
System.err.println(exp.getMessage());
return;
}
- System.out.println(gTable.name() + "," + gTable.comment());
+ StringBuilder all = new StringBuilder();
+ for (Index index : indexes) {
+ // Flatten nested field names into dot-separated strings (e.g., "a.b.c")
+ Arrays.stream(index.fieldNames())
+ // Convert nested fields to a single string
+ .map(nestedFieldName -> String.join(".", nestedFieldName))
+ .forEach(
+ fieldName ->
+ all.append(fieldName)
+ .append(",")
+ .append(index.name())
+ .append(System.lineSeparator()));
+ }
+
+ System.out.print(all);
}
}
diff --git
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TableDetails.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TableDetails.java
index 2169ccaaa..3f8dcfd2b 100644
---
a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TableDetails.java
+++
b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/TableDetails.java
@@ -56,7 +56,7 @@ public class TableDetails extends TableCommand {
Table gTable = null;
try {
- NameIdentifier name = NameIdentifier.of(table);
+ NameIdentifier name = NameIdentifier.of(schema, table);
gTable = tableCatalog().loadTable(name);
} catch (Exception exp) {
System.err.println(exp.getMessage());
diff --git a/docs/cli.md b/docs/cli.md
index 54176a66a..c08ec85c3 100644
--- a/docs/cli.md
+++ b/docs/cli.md
@@ -365,7 +365,7 @@ gcli table list --name catalog_postgres.hr
#### Show tables details
```bash
-gcli column list --name catalog_postgres.hr.departments
+gcli table details --name catalog_postgres.hr.departments
```
#### Show tables audit information
@@ -375,9 +375,12 @@ gcli table details --name catalog_postgres.hr.departments
--audit
```
#### Show tables distribution information
+### Show table indexes
+
```bash
-gcli table details --metalake metalake_demo --name
catalog_postgres.hr.departments --distribution
+gcli table details --name catalog_mysql.db.iceberg_namespace_properties --index
```
+
#### Delete a table
```bash