Apache Gravitino Command Line Interface
This document provides guidance on managing metadata within Apache Gravitino using the Command Line Interface (CLI). The CLI offers a terminal based alternative to using code or the REST interface for metadata management.
Currently, the CLI allows users to view metadata information for metalakes, catalogs, schemas, tables, users, roles, groups, tags, topics and filesets. Future updates will expand on these capabilities.
Running the CLI
You can configure an alias for the CLI for ease of use, with the following command:
alias gcli='java -jar ../../cli/build/libs/gravitino-cli-*-incubating-SNAPSHOT.jar'
Or you use the gcli.sh
script found in the clients/cli/bin/
directory to run the CLI.
Usage
f
The general structure for running commands with the Gravitino CLI is gcli entity command [options]
.
usage: gcli [metalake|catalog|schema|model|table|column|user|group|tag|topic|fileset] [list|details|create|delete|update|set|remove|properties|revoke|grant] [options]
Options
usage: gcli
-a,--audit display audit information
--alias <arg> model aliases
--all all operation for --enable
--auto <arg> column value auto-increments (true/false)
-c,--comment <arg> entity comment
--columnfile <arg> CSV file describing columns
-d,--distribution display distribution information
--datatype <arg> column data type
--default <arg> default column value
--disable disable entities
--enable enable entities
-f,--force force operation
-g,--group <arg> group name
-h,--help command help information
-i,--ignore ignore client/sever version check
-l,--user <arg> user name
--login <arg> user name
-m,--metalake <arg> metalake name
-n,--name <arg> full entity name (dot separated)
--null <arg> column value can be null (true/false)
-o,--owner display entity owner
--output <arg> output format (plain/table)
-P,--property <arg> property name
-p,--properties <arg> property name/value pairs
--partition display partition information
--position <arg> position of column
--privilege <arg> privilege(s)
-r,--role <arg> role name
--rename <arg> new entity name
-s,--server Gravitino server version
--simple simple authentication
--sortorder display sortorder information
-t,--tag <arg> tag name
-u,--url <arg> Gravitino URL (default: http://localhost:8090)
--uri <arg> model version artifact
-v,--version Gravitino client version
-V,--value <arg> property value
-x,--index display index information
-z,--provider <arg> provider one of hadoop, hive, mysql, postgres,
iceberg, kafka
Commands
The following commands are used for entity management:
- list: List available entities
- details: Show detailed information about an entity
- create: Create a new entity
- delete: Delete an existing entity
- update: Update an existing entity
- set: Set a property on an entity
- remove: Remove a property from an entity
- properties: Display an entities properties
Setting the Metalake name
As dealing with one Metalake is a typical scenario, you can set the Metalake name in several ways so it doesn't need to be passed on the command line.
- Passed in on the command line via the
--metalake
parameter. - Set via the
GRAVITINO_METALAKE
environment variable. - Stored in the Gravitino CLI configuration file.
The command line option overrides the environment variable and the environment variable overrides the configuration file.
Setting the Gravitino URL
As you need to set the Gravitino URL for every command, you can set the URL in several ways.
- Passed in on the command line via the
--url
parameter. - Set via the 'GRAVITINO_URL' environment variable.
- Stored in the Gravitino CLI configuration file.
The command line option overrides the environment variable and the environment variable overrides the configuration file.
Setting the Gravitino Authentication Type
The authentication type can also be set in several ways.
- Passed in on the command line via the
--simple
flag. - Set via the 'GRAVITINO_AUTH' environment variable.
- Stored in the 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.
#
# Gravitino CLI configuration file
#
# Metalake to use
metalake=metalake_demo
# Gravitino server to connect to
URL=http://localhost:8090
# Ignore client/server version mismatch
ignore=true
# Authentication
auth=simple
OAuth authentication can also be configured via the configuration file.
# Authentication
auth=oauth
serverURI=http://127.0.0.1:1082
credential=xx:xx
token=test
scope=token/test
Kerberos authentication can also be configured via the configuration file.
# Authentication
auth=kerberos
principal=user/admin@foo.com
keytabFile=file.keytab
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 internally.
Display help
To display help on command usage:
gcli --help
Display client version
To display the client version:
gcli --version
Display server version
To display the server version:
gcli --server
Client/server version mismatch
If the client and server are running different versions of the Gravitino software then you may need to ignore the client/server version check for the command to run. This can be done in several ways:
- Passed in on the command line via the
--ignore
parameter. - Set via the
GRAVITINO_IGNORE
environment variable. - Stored in the Gravitino CLI configuration file.
Multiple properties
For commands that accept multiple properties they can be specified in a couple of different ways:
-
gcli --properties n1=v1,n2=v2,n3=v3
-
gcli --properties n1=v1 n2=v2 n3=v3
-
gcli --properties n1=v1 --properties n2=v2 --properties n3=v3
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.
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
Please set the metalake in the Gravitino configuration file or the environment variable before running any of these commands.
Metalake commands
Show all metalakes
gcli metalake list
Show a metalake details
gcli metalake details
Show a metalake's audit information
gcli metalake details --audit
Create a metalake
gcli metalake create --metalake my_metalake --comment "This is my metalake"
Delete a metalake
gcli metalake delete
Rename a metalake
gcli metalake update --rename demo
Update a metalake's comment
gcli metalake update --comment "new comment"
Display a metalake's properties
gcli metalake properties
Set a metalake's property
gcli metalake set --property test --value value
Remove a metalake's property
gcli metalake remove --property test
Enable a metalake
gcli metalake update -m metalake_demo --enable
Enable a metalake and all catalogs
gcli metalake update -m metalake_demo --enable --all
Disable a metalake
gcli metalake update -m metalake_demo --disable
Catalog commands
Show all catalogs in a metalake
gcli catalog list
Show a catalog details
gcli catalog details --name catalog_postgres
Show a catalog's audit information
gcli catalog details --name catalog_postgres --audit
Creating a catalog
The type of catalog to be created is specified by the --provider
option. Different catalogs require different properties, for example, a Hive catalog requires a metastore-uri property.
Create a Hive catalog
gcli catalog create --name hive --provider hive --properties metastore.uris=thrift://hive-host:9083
Create an Iceberg catalog
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
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
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
gcli catalog create --name kafka --provider kafka --properties bootstrap.servers=127.0.0.1:9092,127.0.0.2:9092
Create a Doris catalog
gcli catalog create --name doris --provider doris --properties jdbc-url=jdbc:mysql://localhost:9030,jdbc-driver=com.mysql.jdbc.Driver,jdbc-user=admin,jdbc-password=password
Create a Paimon catalog
gcli catalog create --name paimon --provider paimon --properties catalog-backend=jdbc,uri=jdbc:mysql://127.0.0.1:3306/metastore_db,authentication.type=simple
Create a Hudi catalog
gcli catalog create --name hudi --provider hudi --properties catalog-backend=hms,uri=thrift://127.0.0.1:9083
Create an Oceanbase catalog
gcli catalog create --name oceanbase --provider oceanbase --properties jdbc-url=jdbc:mysql://localhost:2881,jdbc-driver=com.mysql.jdbc.Driver,jdbc-user=admin,jdbc-password=password
Delete a catalog
gcli catalog delete --name hive
Rename a catalog
gcli catalog update --name catalog_mysql --rename mysql
Change a catalog comment
gcli catalog update --name catalog_mysql --comment "new comment"
Display a catalog's properties
gcli catalog properties --name catalog_mysql
Set a catalog's property
gcli catalog set --name catalog_mysql --property test --value value
Remove a catalog's property
gcli catalog remove --name catalog_mysql --property test
Enable a catalog
gcli catalog update -m metalake_demo --name catalog --enable
Enable a catalog and it's metalake
gcli catalog update -m metalake_demo --name catalog --enable --all
Disable a catalog
gcli catalog update -m metalake_demo --name catalog --disable
Schema commands
Show all schemas in a catalog
gcli schema list --name catalog_postgres
Show schema details
gcli schema details --name catalog_postgres.hr