diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/AreYouSure.java b/clients/cli/src/main/java/org/apache/gravitino/cli/AreYouSure.java new file mode 100644 index 00000000000..a0893dbad4f --- /dev/null +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/AreYouSure.java @@ -0,0 +1,47 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.gravitino.cli; + +import java.nio.charset.StandardCharsets; +import java.util.Scanner; + +/* Ask are you sure you want to do this? */ +public class AreYouSure { + + /** + * Prompts the user with a confirmation message to confirm an action. + * + * @param force if {@code true}, skips user confirmation and proceeds. + * @return {@code true} if the action is to continue {@code false} otherwise. + */ + public static boolean really(boolean force) { + Scanner scanner = new Scanner(System.in, StandardCharsets.UTF_8.name()); + + /* force option for scripting */ + if (force) { + return true; + } + + System.out.println( + "This command could result in data loss or other issues. Are you sure you want to do this? (Y/N)"); + String answer = scanner.next(); + return answer.equals("Y"); + } +} 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 7e95d59fc7c..b544a6b8028 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 @@ -100,7 +100,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. metlake, catalog, schema, table etc etc. + * @param entity The entity to apply the command to e.g. metalake, catalog, schema, table etc 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) { @@ -204,7 +204,8 @@ private void handleMetalakeCommand() { String comment = line.getOptionValue(GravitinoOptions.COMMENT); new CreateMetalake(url, ignore, metalake, comment).handle(); } else if (CommandActions.DELETE.equals(command)) { - new DeleteMetalake(url, ignore, metalake).handle(); + boolean force = line.hasOption(GravitinoOptions.FORCE); + new DeleteMetalake(url, ignore, force, metalake).handle(); } else if (CommandActions.SET.equals(command)) { String property = line.getOptionValue(GravitinoOptions.PROPERTY); String value = line.getOptionValue(GravitinoOptions.VALUE); @@ -221,7 +222,8 @@ private void handleMetalakeCommand() { } if (line.hasOption(GravitinoOptions.RENAME)) { String newName = line.getOptionValue(GravitinoOptions.RENAME); - new UpdateMetalakeName(url, ignore, metalake, newName).handle(); + boolean force = line.hasOption(GravitinoOptions.FORCE); + new UpdateMetalakeName(url, ignore, force, metalake, newName).handle(); } } } @@ -254,7 +256,8 @@ private void handleCatalogCommand() { Map propertyMap = new Properties().parse(properties); new CreateCatalog(url, ignore, metalake, catalog, provider, comment, propertyMap).handle(); } else if (CommandActions.DELETE.equals(command)) { - new DeleteCatalog(url, ignore, metalake, catalog).handle(); + boolean force = line.hasOption(GravitinoOptions.FORCE); + new DeleteCatalog(url, ignore, force, metalake, catalog).handle(); } else if (CommandActions.SET.equals(command)) { String property = line.getOptionValue(GravitinoOptions.PROPERTY); String value = line.getOptionValue(GravitinoOptions.VALUE); @@ -302,7 +305,8 @@ private void handleSchemaCommand() { String comment = line.getOptionValue(GravitinoOptions.COMMENT); new CreateSchema(url, ignore, metalake, catalog, schema, comment).handle(); } else if (CommandActions.DELETE.equals(command)) { - new DeleteSchema(url, ignore, metalake, catalog, schema).handle(); + boolean force = line.hasOption(GravitinoOptions.FORCE); + new DeleteSchema(url, ignore, force, metalake, catalog, schema).handle(); } else if (CommandActions.SET.equals(command)) { String property = line.getOptionValue(GravitinoOptions.PROPERTY); String value = line.getOptionValue(GravitinoOptions.VALUE); @@ -341,7 +345,8 @@ private void handleTableCommand() { } else if (CommandActions.CREATE.equals(command)) { // TODO } else if (CommandActions.DELETE.equals(command)) { - new DeleteTable(url, ignore, metalake, catalog, schema, table).handle(); + boolean force = line.hasOption(GravitinoOptions.FORCE); + new DeleteTable(url, ignore, force, metalake, catalog, schema, table).handle(); } } @@ -359,7 +364,8 @@ protected void handleUserCommand() { } else if (CommandActions.CREATE.equals(command)) { new CreateUser(url, ignore, metalake, user).handle(); } else if (CommandActions.DELETE.equals(command)) { - new DeleteUser(url, ignore, metalake, user).handle(); + boolean force = line.hasOption(GravitinoOptions.FORCE); + new DeleteUser(url, ignore, force, metalake, user).handle(); } } @@ -377,7 +383,8 @@ protected void handleGroupCommand() { } else if (CommandActions.CREATE.equals(command)) { new CreateGroup(url, ignore, metalake, group).handle(); } else if (CommandActions.DELETE.equals(command)) { - new DeleteGroup(url, ignore, metalake, group).handle(); + boolean force = line.hasOption(GravitinoOptions.FORCE); + new DeleteGroup(url, ignore, force, metalake, group).handle(); } } @@ -400,7 +407,8 @@ protected void handleTagCommand() { String comment = line.getOptionValue(GravitinoOptions.COMMENT); new CreateTag(url, ignore, metalake, tag, comment).handle(); } else if (CommandActions.DELETE.equals(command)) { - new DeleteTag(url, ignore, metalake, tag).handle(); + boolean force = line.hasOption(GravitinoOptions.FORCE); + new DeleteTag(url, ignore, force, metalake, tag).handle(); } else if (CommandActions.SET.equals(command)) { String property = line.getOptionValue(GravitinoOptions.PROPERTY); String value = line.getOptionValue(GravitinoOptions.VALUE); 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 a9449743c3c..cb6cfc43d66 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 @@ -41,6 +41,7 @@ public class GravitinoOptions { public static final String GROUP = "group"; public static final String TAG = "tag"; public static final String AUDIT = "audit"; + public static final String FORCE = "force"; /** * Builds and returns the CLI options for Gravitino. @@ -77,6 +78,9 @@ public Options options() { Option.builder("p").longOpt(PROPERTIES).desc("property name/value pairs").hasArgs().build(); options.addOption(properties); + // Force delete entity and rename metalake operations + options.addOption(createSimpleOption("f", FORCE, "force operation")); + return options; } diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteCatalog.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteCatalog.java index 35658e29cdd..65ebde4e354 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteCatalog.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteCatalog.java @@ -19,6 +19,7 @@ package org.apache.gravitino.cli.commands; +import org.apache.gravitino.cli.AreYouSure; import org.apache.gravitino.cli.ErrorMessages; import org.apache.gravitino.client.GravitinoClient; import org.apache.gravitino.exceptions.NoSuchCatalogException; @@ -28,17 +29,21 @@ public class DeleteCatalog extends Command { protected final String metalake; protected final String catalog; + protected final boolean force; /** * Delete a catalog. * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param force Force operation. * @param metalake The name of the metalake. * @param catalog The name of the catalog. */ - public DeleteCatalog(String url, boolean ignoreVersions, String metalake, String catalog) { + public DeleteCatalog( + String url, boolean ignoreVersions, boolean force, String metalake, String catalog) { super(url, ignoreVersions); + this.force = force; this.metalake = metalake; this.catalog = catalog; } @@ -48,6 +53,10 @@ public DeleteCatalog(String url, boolean ignoreVersions, String metalake, String public void handle() { boolean deleted = false; + if (!AreYouSure.really(force)) { + return; + } + try { GravitinoClient client = buildClient(metalake); deleted = client.dropCatalog(catalog); diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteGroup.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteGroup.java index e1371375223..3c3689dc371 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteGroup.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteGroup.java @@ -19,6 +19,7 @@ package org.apache.gravitino.cli.commands; +import org.apache.gravitino.cli.AreYouSure; import org.apache.gravitino.cli.ErrorMessages; import org.apache.gravitino.client.GravitinoClient; import org.apache.gravitino.exceptions.NoSuchGroupException; @@ -28,17 +29,21 @@ public class DeleteGroup extends Command { protected final String metalake; protected final String group; + protected final boolean force; /** * Delete a group. * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param force Force operation. * @param metalake The name of the metalake. * @param group The name of the group. */ - public DeleteGroup(String url, boolean ignoreVersions, String metalake, String group) { + public DeleteGroup( + String url, boolean ignoreVersions, boolean force, String metalake, String group) { super(url, ignoreVersions); + this.force = force; this.metalake = metalake; this.group = group; } @@ -48,6 +53,10 @@ public DeleteGroup(String url, boolean ignoreVersions, String metalake, String g public void handle() { boolean deleted = false; + if (!AreYouSure.really(force)) { + return; + } + try { GravitinoClient client = buildClient(metalake); deleted = client.removeGroup(group); diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteMetalake.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteMetalake.java index 951d8e16ba0..2162d181837 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteMetalake.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteMetalake.java @@ -19,22 +19,26 @@ package org.apache.gravitino.cli.commands; +import org.apache.gravitino.cli.AreYouSure; import org.apache.gravitino.cli.ErrorMessages; import org.apache.gravitino.client.GravitinoAdminClient; import org.apache.gravitino.exceptions.NoSuchMetalakeException; public class DeleteMetalake extends Command { protected final String metalake; + protected final boolean force; /** * Delete a metalake. * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param force Force operation. * @param metalake The name of the metalake. */ - public DeleteMetalake(String url, boolean ignoreVersions, String metalake) { + public DeleteMetalake(String url, boolean ignoreVersions, boolean force, String metalake) { super(url, ignoreVersions); + this.force = force; this.metalake = metalake; } @@ -42,6 +46,11 @@ public DeleteMetalake(String url, boolean ignoreVersions, String metalake) { @Override public void handle() { boolean deleted = false; + + if (!AreYouSure.really(force)) { + return; + } + try { GravitinoAdminClient client = buildAdminClient(); deleted = client.dropMetalake(metalake); diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteSchema.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteSchema.java index f011acbc8a8..e1676a076c1 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteSchema.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteSchema.java @@ -19,6 +19,7 @@ package org.apache.gravitino.cli.commands; +import org.apache.gravitino.cli.AreYouSure; import org.apache.gravitino.cli.ErrorMessages; import org.apache.gravitino.client.GravitinoClient; import org.apache.gravitino.exceptions.NoSuchCatalogException; @@ -30,19 +31,27 @@ public class DeleteSchema extends Command { protected final String metalake; protected final String catalog; protected final String schema; + protected final boolean force; /** * Delete a schema. * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param force Force operation. * @param metalake The name of the metalake. * @param catalog The name of the catalog. * @param schema The name of the schema. */ public DeleteSchema( - String url, boolean ignoreVersions, String metalake, String catalog, String schema) { + String url, + boolean ignoreVersions, + boolean force, + String metalake, + String catalog, + String schema) { super(url, ignoreVersions); + this.force = force; this.metalake = metalake; this.catalog = catalog; this.schema = schema; @@ -53,6 +62,10 @@ public DeleteSchema( public void handle() { boolean deleted = false; + if (!AreYouSure.really(force)) { + return; + } + try { GravitinoClient client = buildClient(metalake); deleted = client.loadCatalog(catalog).asSchemas().dropSchema(schema, false); diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTable.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTable.java index 879dacb3ca9..ee46d7f385e 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTable.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTable.java @@ -20,6 +20,7 @@ package org.apache.gravitino.cli.commands; import org.apache.gravitino.NameIdentifier; +import org.apache.gravitino.cli.AreYouSure; import org.apache.gravitino.cli.ErrorMessages; import org.apache.gravitino.client.GravitinoClient; import org.apache.gravitino.exceptions.NoSuchCatalogException; @@ -33,12 +34,14 @@ public class DeleteTable extends Command { protected final String catalog; protected final String schema; protected final String table; + protected final boolean force; /** * Delete a table. * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param force Force operation. * @param metalake The name of the metalake. * @param catalog The name of the catalog. * @param schema The name of the schema. @@ -47,11 +50,13 @@ public class DeleteTable extends Command { public DeleteTable( String url, boolean ignoreVersions, + boolean force, String metalake, String catalog, String schema, String table) { super(url, ignoreVersions); + this.force = force; this.metalake = metalake; this.catalog = catalog; this.schema = schema; @@ -63,6 +68,10 @@ public DeleteTable( public void handle() { boolean deleted = false; + if (!AreYouSure.really(force)) { + return; + } + try { GravitinoClient client = buildClient(metalake); NameIdentifier name = NameIdentifier.of(schema, table); diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTag.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTag.java index 83211eb2125..4536897b078 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTag.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteTag.java @@ -19,6 +19,7 @@ package org.apache.gravitino.cli.commands; +import org.apache.gravitino.cli.AreYouSure; import org.apache.gravitino.cli.ErrorMessages; import org.apache.gravitino.client.GravitinoClient; import org.apache.gravitino.exceptions.NoSuchMetalakeException; @@ -28,26 +29,33 @@ public class DeleteTag extends Command { protected final String metalake; protected final String tag; + protected final boolean force; /** * Delete a tag. * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param force Force operation. * @param metalake The name of the metalake. * @param tag The name of the tag. */ - public DeleteTag(String url, boolean ignoreVersions, String metalake, String tag) { + public DeleteTag(String url, boolean ignoreVersions, boolean force, String metalake, String tag) { super(url, ignoreVersions); + this.force = force; this.metalake = metalake; this.tag = tag; } - /** Delete a catalog. */ + /** Delete a tag. */ @Override public void handle() { boolean deleted = false; + if (!AreYouSure.really(force)) { + return; + } + try { GravitinoClient client = buildClient(metalake); deleted = client.deleteTag(tag); diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteUser.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteUser.java index c5ffe69e83a..6a748c9bbcd 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteUser.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/DeleteUser.java @@ -19,6 +19,7 @@ package org.apache.gravitino.cli.commands; +import org.apache.gravitino.cli.AreYouSure; import org.apache.gravitino.cli.ErrorMessages; import org.apache.gravitino.client.GravitinoClient; import org.apache.gravitino.exceptions.NoSuchMetalakeException; @@ -28,17 +29,21 @@ public class DeleteUser extends Command { protected final String metalake; protected final String user; + protected final boolean force; /** * Delete a user. * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param force Force operation. * @param metalake The name of the metalake. * @param user The name of the user. */ - public DeleteUser(String url, boolean ignoreVersions, String metalake, String user) { + public DeleteUser( + String url, boolean ignoreVersions, boolean force, String metalake, String user) { super(url, ignoreVersions); + this.force = force; this.metalake = metalake; this.user = user; } @@ -48,6 +53,10 @@ public DeleteUser(String url, boolean ignoreVersions, String metalake, String us public void handle() { boolean deleted = false; + if (!AreYouSure.really(force)) { + return; + } + try { GravitinoClient client = buildClient(metalake); deleted = client.removeUser(user); diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateMetalakeName.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateMetalakeName.java index 48ef26a9269..acf5470af8d 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateMetalakeName.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/UpdateMetalakeName.java @@ -20,6 +20,7 @@ package org.apache.gravitino.cli.commands; import org.apache.gravitino.MetalakeChange; +import org.apache.gravitino.cli.AreYouSure; import org.apache.gravitino.cli.ErrorMessages; import org.apache.gravitino.client.GravitinoAdminClient; import org.apache.gravitino.exceptions.NoSuchMetalakeException; @@ -29,17 +30,21 @@ public class UpdateMetalakeName extends Command { protected final String metalake; protected final String name; + protected final boolean force; /** * Update the name of a metalake. * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param force Force operation. * @param metalake The name of the metalake. * @param name The new metalake name. */ - public UpdateMetalakeName(String url, boolean ignoreVersions, String metalake, String name) { + public UpdateMetalakeName( + String url, boolean ignoreVersions, boolean force, String metalake, String name) { super(url, ignoreVersions); + this.force = force; this.metalake = metalake; this.name = name; } @@ -47,6 +52,11 @@ public UpdateMetalakeName(String url, boolean ignoreVersions, String metalake, S /** Update the name of a metalake. */ @Override public void handle() { + + if (!AreYouSure.really(force)) { + return; + } + try { GravitinoAdminClient client = buildAdminClient(); MetalakeChange change = MetalakeChange.rename(name); diff --git a/docs/cli.md b/docs/cli.md index 750ab03a23b..14b14cf240a 100644 --- a/docs/cli.md +++ b/docs/cli.md @@ -72,7 +72,7 @@ As dealing with one Metalake is a typical scenario, you can set the Metalake nam The command line option overrides the environment variable and the environment variable overrides the configuration file. -## Setting the Gravitino URL +### Setting the Gravitino URL As you need to set the Gravitino URL for every command, you can set the URL in several ways. @@ -82,7 +82,7 @@ As you need to set the Gravitino URL for every command, you can set the URL in s The command line option overrides the environment variable and the environment variable overrides the configuration file. -## Gravitino CLI configuration file +### Gravitino CLI configuration file The gravitino CLI can read commonly used CLI options from a configuration file. By default, the file is `.gravitino` in the user's home directory. The metalake, URL and ignore parameters can be set in this file. @@ -102,7 +102,11 @@ ignore=true ``` -## Manage metadata +### Potentially unsafe operations + +For operations that delete data or rename a metalake the user with be prompted to make sure they wish to run this command. The `--force` option can be specified to override this behaviour. + +### Manage metadata All the commands are performed by using the [Java API](api/java-api) internally. @@ -150,13 +154,17 @@ For commands that accept multiple properties they can be specified in a couple o ### Setting properties and tags -Different options are needed to add a tag and set a property of a tag with `gcli tag set`. To add a -tag, specify the tag (via --tag) and the entity to tag (via --name). To set the property of a tag -(via --tag) you need to specify the property (via --property) and value (via --value) you want to -set. + Different options are needed to add a tag and set a property of a tag with `gcli tag set`. To add a + tag, specify the tag (via --tag) and the entity to tag (via --name). To set the property of a tag + (via --tag) you need to specify the property (via --property) and value (via --value) you want to + set. + + To delete a tag, again, you need to specify the tag and entity, to remove a tag's property you need + to select the tag and property. + +### CLI commands -To delete a tag, again, you need to specify the tag and entity, to remove a tag's property you need -to select the tag and property. +Please set the metalake in the Gravitino configuration file or the environment variable before running any of these commands. ### Metalake commands @@ -169,13 +177,13 @@ gcli metalake list #### Show a metalake details ```bash -gcli metalake details --metalake metalake_demo +gcli metalake details ``` #### Show a metalake audit information ```bash -gcli metalake details --metalake metalake_demo --audit +gcli metalake details --audit ``` #### Create a metalake @@ -187,37 +195,37 @@ gcli metalake create --metalake my_metalake --comment "This is my metalake" #### Delete a metalake ```bash -gcli metalake delete --metalake my_metalake +gcli metalake delete ``` #### Rename a metalake ```bash -gcli metalake update --metalake metalake_demo --rename demo +gcli metalake update --rename demo ``` #### Update a metalake's comment ```bash -gcli metalake update --metalake metalake_demo --comment "new comment" +gcli metalake update --comment "new comment" ``` #### Display a metalake's properties ```bash -gcli metalake properties --metalake metalake_demo +gcli metalake properties ``` #### Set a metalake's property ```bash -gcli metalake set --metalake metalake_demo --property test --value value +gcli metalake set --property test --value value ``` #### Remove a metalake's property ```bash -gcli metalake remove --metalake metalake_demo --property test +gcli metalake remove --property test ``` ### Catalog commands @@ -225,19 +233,19 @@ gcli metalake remove --metalake metalake_demo --property test #### Show all catalogs in a metalake ```bash -gcli catalog list --metalake metalake_demo +gcli catalog list ``` #### Show a catalog details ```bash -gcli catalog details --metalake metalake_demo --name catalog_postgres +gcli catalog details --name catalog_postgres ``` #### Show a catalog audit information ```bash -gcli catalog details --metalake metalake_demo --name catalog_postgres --audit +gcli catalog details --name catalog_postgres --audit ``` #### Creating a catalog @@ -247,67 +255,67 @@ The type of catalog to be created is specified by the `--provider` option. Diffe ##### Create a Hive catalog ```bash -gcli catalog create --metalake metalake_demo --name hive --provider hive --properties metastore.uris=thrift://hive-host:9083 +gcli catalog create --name hive --provider hive --properties metastore.uris=thrift://hive-host:9083 ``` ##### Create an Iceberg catalog ```bash -gcli catalog create --metalake metalake_demo -name iceberg --provider iceberg --properties uri=thrift://hive-host:9083,catalog-backend=hive,warehouse=hdfs://hdfs-host:9000/user/iceberg/warehouse +gcli catalog create -name iceberg --provider iceberg --properties uri=thrift://hive-host:9083,catalog-backend=hive,warehouse=hdfs://hdfs-host:9000/user/iceberg/warehouse ``` ##### Create a MySQL catalog ```bash -gcli catalog create --metalake metalake_demo -name mysql --provider mysql --properties jdbc-url=jdbc:mysql://mysql-host:3306?useSSL=false,jdbc-user=user,jdbc-password=password,jdbc-driver=com.mysql.cj.jdbc.Driver +gcli catalog create -name mysql --provider mysql --properties jdbc-url=jdbc:mysql://mysql-host:3306?useSSL=false,jdbc-user=user,jdbc-password=password,jdbc-driver=com.mysql.cj.jdbc.Driver ``` ##### Create a Postgres catalog ```bash -gcli catalog create --metalake metalake_demo -name postgres --provider postgres --properties jdbc-url=jdbc:postgresql://postgresql-host/mydb,jdbc-user=user,jdbc-password=password,jdbc-database=db,jdbc-driver=org.postgresql.Driver +gcli catalog create -name postgres --provider postgres --properties jdbc-url=jdbc:postgresql://postgresql-host/mydb,jdbc-user=user,jdbc-password=password,jdbc-database=db,jdbc-driver=org.postgresql.Driver ``` ##### Create a Kafka catalog ```bash -gcli catalog create --metalake metalake_demo -name kafka --provider kafka --properties bootstrap.servers=127.0.0.1:9092,127.0.0.2:9092 +gcli catalog create --name kafka --provider kafka --properties bootstrap.servers=127.0.0.1:9092,127.0.0.2:9092 ``` #### Delete a catalog ```bash -gcli catalog delete --metalake metalake_demo --name hive +gcli catalog delete --name hive ``` #### Rename a catalog ```bash -gcli catalog update --metalake metalake_demo --name catalog_mysql --rename mysql +gcli catalog update --name catalog_mysql --rename mysql ``` #### Change a catalog comment ```bash -gcli catalog update --metalake metalake_demo --name catalog_mysql --comment "new comment" +gcli catalog update --name catalog_mysql --comment "new comment" ``` #### Display a catalog's properties ```bash -gcli catalog properties --metalake metalake_demo --name catalog_mysql +gcli catalog properties --name catalog_mysql ``` #### Set a catalog's property ```bash -gcli catalog set --metalake metalake_demo --name catalog_mysql --property test --value value +gcli catalog set --name catalog_mysql --property test --value value ``` #### Remove a catalog's property ```bash -gcli catalog remove --metalake metalake_demo --name catalog_mysql --property test +gcli catalog remove --name catalog_mysql --property test ``` ### Schema commands @@ -315,31 +323,31 @@ gcli catalog remove --metalake metalake_demo --name catalog_mysql --property tes #### Show all schemas in a catalog ```bash -gcli schema list --metalake metalake_demo --name catalog_postgres +gcli schema list --name catalog_postgres ``` #### Show schema details ```bash -gcli schema details --metalake metalake_demo --name catalog_postgres.hr +gcli schema details --name catalog_postgres.hr ``` #### Show schema audit information ```bash -gcli schema details --metalake metalake_demo --name catalog_postgres.hr --audit +gcli schema details --name catalog_postgres.hr --audit ``` #### Create a schema ```bash -gcli schema create --metalake metalake_demo --name catalog_postgres.new_db +gcli schema create --name catalog_postgres.new_db ``` #### Display schema properties ```bash -gcli schema properties --metalake metalake_demo --name catalog_postgres.hr -i +gcli schema properties --name catalog_postgres.hr -i ``` Setting and removing schema properties is not currently supported by the Java API or the Gravitino CLI. @@ -349,25 +357,25 @@ Setting and removing schema properties is not currently supported by the Java AP #### Show all tables ```bash -gcli table list --metalake metalake_demo --name catalog_postgres.hr +gcli table list --name catalog_postgres.hr ``` #### Show tables details ```bash -gcli column list --metalake metalake_demo --name catalog_postgres.hr.departments +gcli column list --name catalog_postgres.hr.departments ``` #### Show tables audit information ```bash -gcli table details --metalake metalake_demo --name catalog_postgres.hr.departments --audit +gcli table details --name catalog_postgres.hr.departments --audit ``` #### Delete a table ```bash -gcli table delete --metalake metalake_demo --name catalog_postgres.hr.salaries +gcli table delete --name catalog_postgres.hr.salaries ``` ### User commands @@ -375,25 +383,25 @@ gcli table delete --metalake metalake_demo --name catalog_postgres.hr.salaries #### Create a user ```bash -gcli user create --metalake metalake_demo --user new_user +gcli user create --user new_user ``` #### Show a user's details ```bash -gcli user details --metalake metalake_demo --user new_user +gcli user details --user new_user ``` #### List all users ```bash -gcli user list --metalake metalake_demo +gcli user list ``` #### Delete a user ```bash -gcli user delete --metalake metalake_demo --user new_user +gcli user delete --user new_user ``` ### Group commands @@ -401,97 +409,97 @@ gcli user delete --metalake metalake_demo --user new_user #### Create a group ```bash -gcli group create --metalake metalake_demo --group new_group +gcli group create --group new_group ``` #### Display a group's details ```bash -gcli group details --metalake metalake_demo --group new_group +gcli group details --group new_group ``` #### List all groups ```bash -gcli group list --metalake metalake_demo +gcli group list ``` #### Delete a group ```bash -gcli group delete --metalake metalake_demo --group new_group -``` +gcli group delete --group new_group + ``` ### Tag commands #### Display a tag's details ```bash -gcli tag details --metalake metalake_demo --tag tagA +gcli tag details --tag tagA ``` #### Create a tag ```bash -gcli tag create --metalake metalake_demo --tag tagA -``` + gcli tag create --tag tagA + ``` #### List all tag ```bash -gcli tag list --metalake metalake_demo +gcli tag list ``` #### Delete a tag ```bash -gcli tag delete --metalake metalake_demo --tag tagA +gcli tag delete --tag tagA ``` #### Add a tag to an entity ```bash -gcli tag set --metalake metalake_demo --name catalog_postgres.hr --tag tagA +gcli tag set --name catalog_postgres.hr --tag tagA ``` #### Remove a tag from an entity ```bash -gcli tag remove --metalake metalake_demo --name catalog_postgres.hr --tag tagA +gcli tag remove --name catalog_postgres.hr --tag tagA ``` #### List all tags on an entity ```bash -gcli tag list --metalake metalake_demo --name catalog_postgres.hr +gcli tag list --name catalog_postgres.hr ``` #### List the properties of a tag ```bash -gcli tag properties --metalake metalake_demo --tag tagA +gcli tag properties --tag tagA ``` #### Set a properties of a tag ```bash -gcli tag set --metalake metalake_demo --tag tagA --property test --value value +gcli tag set --tag tagA --property test --value value ``` #### Delete a property of a tag ```bash -gcli tag remove --metalake metalake_demo --tag tagA --property test +gcli tag remove --tag tagA --property test ``` #### Rename a tag ```bash -gcli tag update --metalake metalake_demo --tag tagA --rename newTag +gcli tag update --tag tagA --rename newTag ``` #### Update a tag's comment ```bash -gcli tag update --metalake metalake_demo --tag tagA --comment "new comment" +gcli tag update --tag tagA --comment "new comment" ```