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.
    
    
![image](https://github.com/user-attachments/assets/886ccc77-7cd5-47ee-872a-653207c8d329)
    
    
![image](https://github.com/user-attachments/assets/403d5aec-4bc0-44a4-9f84-1d655be1bb7d)
    
    
![image](https://github.com/user-attachments/assets/385e16d1-de10-48af-8559-b816363ed78a)
    
    ---------
    
    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

Reply via email to