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
Show schema's audit information
gcli schema details --name catalog_postgres.hr --audit
Create a schema
gcli schema create --name catalog_postgres.new_db
Display schema properties
gcli schema properties --name catalog_postgres.hr
Setting and removing schema properties is not currently supported by the Java API or the Gravitino CLI.
Table commands
When creating a table the columns are specified in CSV file specifying the name of the column, the datatype, a comment, true or false if the column is nullable, true or false if the column is auto incremented, a default value and a default type. Not all of the columns need to be specifed just the name and datatype columns. If not specified comment default to null, nullability to true and auto increment to false. If only the default value is specified it defaults to the same data type as the column.
Example CSV file
Name,Datatype,Comment,Nullable,AutoIncrement,DefaultValue,DefaultType
name,String,person's name
ID,Integer,unique id,false,true
location,String,city they work in,false,false,Sydney,String
Show all tables
gcli table list --name catalog_postgres.hr
Show tables details
gcli table details --name catalog_postgres.hr.departments
Show tables audit information
gcli table details --name catalog_postgres.hr.departments --audit
Show tables distribution information
gcli table details --name catalog_postgres.hr.departments --distribution
Show tables partition information
gcli table details --name catalog_postgres.hr.departments --partition
Show tables sort order information
gcli table details --name catalog_postgres.hr.departments --sortorder
Show table indexes
gcli table details --name catalog_mysql.db.iceberg_namespace_properties --index
Delete a table
gcli table delete --name catalog_postgres.hr.salaries
Display a tables's properties
gcli table properties --name catalog_postgres.hr.salaries
Set a tables's property
gcli table set --name catalog_postgres.hr.salaries --property test --value value
Remove a tables's property
gcli table remove --name catalog_postgres.hr.salaries --property test
Create a table
gcli table create --name catalog_postgres.hr.salaries --comment "comment" --columnfile ~/table.csv
User commands
Create a user
gcli user create --user new_user
Show a user's details
gcli user details --user new_user
List all users
gcli user list
Show a roles's audit information
gcli user details --user new_user --audit
Delete a user
gcli user delete --user new_user
Group commands
Create a group
gcli group create --group new_group
Display a group's details
gcli group details --group new_group
List all groups
gcli group list
Show a groups's audit information
gcli group details --group new_group --audit
Delete a group
gcli group delete --group new_group
Tag commands
Display a tag's details
gcli tag details --tag tagA
Create tags
gcli tag create --tag tagA tagB
List all tags
gcli tag list
Delete tags
gcli tag delete --tag tagA tagB
Add tags to an entity
gcli tag set --name catalog_postgres.hr --tag tagA tagB
Remove tags from an entity
gcli tag remove --name catalog_postgres.hr --tag tagA tagB
Remove all tags from an entity
gcli tag remove --name catalog_postgres.hr
List all tags on an entity
gcli tag list --name catalog_postgres.hr
List the properties of a tag
gcli tag properties --tag tagA
Set a properties of a tag
gcli tag set --tag tagA --property test --value value
Delete a property of a tag
gcli tag remove --tag tagA --property test
Rename a tag
gcli tag update --tag tagA --rename newTag
Update a tag's comment
gcli tag update --tag tagA --comment "new comment"
Owner commands
List an owner
gcli catalog details --owner --name postgres
Set an owner to a user
gcli catalog set --owner --user admin --name postgres
Set an owner to a group
gcli catalog set --owner --group groupA --name postgres
Role commands
When granting or revoking privileges the following privileges can be used.
create_catalog, use_catalog, create_schema, use_schema, create_table, modify_table, select_table, create_fileset, write_fileset, read_fileset, create_topic, produce_topic, consume_topic, manage_users, create_role, manage_grants
Note that some are only valid for certain entities.
Display role details
gcli role details --role admin
List all roles
gcli role list
Show a roles's audit information
gcli role details --role admin --audit
Create a role
gcli role create --role admin
Delete a role
gcli role delete --role admin
Add a role to a user
gcli user grant --user new_user --role admin
Remove a role from a user
gcli user revoke --user new_user --role admin
Add a role to a group
gcli group grant --group groupA --role admin
Remove a role from a group
gcli group revoke --group groupA --role admin
Grant a privilege
gcli role grant --name catalog_postgres --role admin --privilege create_table modify_table
Revoke a privilege
gcli role revoke --metalake metalake_demo --name catalog_postgres --role admin --privilege create_table modify_table
Topic commands
Display a topic's details
gcli topic details --name kafka.default.topic3
Create a topic
gcli topic create --name kafka.default.topic3
List all topics
gcli topic list --name kafka.default
Delete a topic
gcli topic delete --name kafka.default.topic3
Change a topic's comment
gcli topic update --name kafka.default.topic3 --comment new_comment
Display a topics's properties
gcli topic properties --name kafka.default.topic3
Set a topics's property
gcli topic set --name kafka.default.topic3 --property test --value value
Remove a topics's property
gcli topic remove --name kafka.default.topic3 --property test