RelationalAI CLI
This guide presents the main features of the RelationalAI Command-Line Interface, which is used to interact with RelationalAI’s Relational Knowledge Graph System (RKGS).
The rai-cli is open source and is available in the GitHub repository:
RelationalAI/rai-sdk-cli
Contributions and pull requests are welcome.
Note: This guide applies to rai-cli, the latest iteration of the RelationalAI CLI.
The relationalai-sdk package is deprecated.
Installation
To use the CLI, you can directly download a binary for your installation from the rai-cli releases (opens in a new tab).
You can find precompiled binaries for MacOS, Linux, and Windows for different architectures.
After selecting the one that fits your system, you can unzip the archive and include the rai binary in your system’s path.
Configuration
To connect to the RAI Server using the RelationalAI CLI, you need a configuration file. See SDK Configuration for more details.
The CLI allows you to specify a configuration to use for connecting to the RAI Server.
You can specify which configuration to use through the --config and --profile flags.
The first flag specifies the file to use, while the second one specifies the name of the configuration.
Here’s an example using the ./myconfig file with the default profile to list all databases:
rai --config=./myconfig --profile=default list-databasesTo load a different configuration from within a configuration file, you can replace default with a different profile name.
Managing Users
This section covers the CLI commands that you need to manage users.
Each user has a role associated with specific permissions. These permissions determine the operations that the user can execute. See User Roles in the Managing Users and OAuth Clients guide for more details.
Creating a User
You can create a user using the create-user command in the CLI.
To create a user, you need to specify an email and, optionally, a set of roles for the user:
rai create-user user@relational.ai --role=userHere, user@relational.ai is a string identifying the user.
The --role flag allows you to provide a role for the specific user that is about to be created.
The roles currently supported are user and admin. user is the default role if no role is specified.
Disabling and Enabling a User
You can disable a user using the disable-user command:
rai disable-user auth0|123456789In this case, auth0|123456789 is a string representing a given user’s ID, as returned within the response in the user creation example above.
You can reenable the user by using the enable-user command:
rai enable-user auth0|123456789Listing Users
You can list users using the CLI list-users command as follows:
rai list-usersGetting Information for a User
You can get information for a user using the CLI get-user command as follows:
rai get-user auth0|123456789Here, similarly to disable-user above, you need to provide a string ID uniquely identifying the user, such as "auth0|XXXXXXXXXXXXXXXXXX".
Finding Users Using Email
You can look up a user’s details by specifying their email through the CLI find-user command:
rai find-user user@relational.aiDeleting a User
You can delete a user by using the delete-user command:
rai delete-user auth0|123456789Managing OAuth Clients
This section covers the CLI commands that you need to manage OAuth clients.
Each OAuth client has a specific set of permissions. These permissions determine the operations that the OAuth client can execute. See [Permissions for OAuth Clients](/rkgms/console/user-management(#permissions-for-oauth-clients) in the Managing Users and OAuth Clients guide for more details.
Creating an OAuth Client
You can create an OAuth client as follows:
rai create-oauth-client name --perms=permissionsHere, name is a string identifying the client.
permissions is a list of permissions from the following supported permissions:
create:accesskeycreate:enginecreate:oauth_clientcreate:userdelete:enginedelete:databasedelete:oauth_clientlist:accesskeylist:enginelist:databaselist:oauth_clientlist:permissionlist:rolelist:userread:engineread:credits_usageread:oauth_clientread:roleread:userrotate:oauth_client_secretrun:transactionupdate:databaseupdate:oauth_clientupdate:user
Listing OAuth Clients
You can get a list of OAuth clients as follows:
rai list-oauth-clientsGetting Information for an OAuth Client
You can get details for a specific OAuth client, identified by the string client-id, as follows:
rai get-oauth-client client-idDeleting an OAuth Client
You can delete an OAuth client identified by the string client-id as follows:
rai delete-oauth-client client-idManaging Engines
This section covers the CLI commands that you need to manage engines.
Creating an Engine
You can create a new engine as follows:
rai create-engine my_engineBy default, the engine size is XS.
You can create an engine of a different size by specifying the --size flag:
rai create-engine my_engine --size=SValid sizes are given as a string and can be one of:
XS(extra small).S(small).M(medium).L(large).XL(extra large).
It may take some time before your engine is in the “PROVISIONED” state, where it is ready for queries. Meanwhile, it is in the “PROVISIONING” state.
Listing Engines
You can list all engines associated with your account using the following command:
rai list-enginesThis returns a JSON array containing details for each engine:
[
{
"id": "ca******",
"name": "my_engine",
"region": "us-east",
"account_name": "******",
"created_by": "******",
"created_on": "2023-07-10T17:15:22.000Z",
"size": "S",
"state": "PROVISIONED"
}
]To list engines that are in a given state, you can use the --state flag:
rai list-engines --state=PROVISIONEDPossible states are:
"REQUESTED"."PROVISIONING"."PROVISIONED"."DEPROVISIONING".
Getting Information for an Engine
You can get information for a specific engine using the following command:
rai get-engine my_engineThis gives you the following output:
{
"id": "******",
"name": "my_engine",
"region": "us-east",
"account_name": "******",
"created_by": "******",
"created_on": "2023-07-10T17:15:22.000Z",
"size": "S",
"state": "PROVISIONED"
}Deleting an Engine
You can delete an engine with:
rai delete-engine my_engineRelationalAI decouples computation from storage. Therefore, deleting an engine does not delete any cloud databases. See Managing Engines for more details.
It may take some time before your engine is deleted. Until then, it is in the “DEPROVISIONING” state.
Managing Databases
This section covers the CLI commands you need to manage databases.
Creating a Database
You can create a database using the following command:
rai create-database my_databaseThe result from a successful create-database command looks like this:
{
"id": "******",
"name": "my_database",
"region": "us-east",
"account_name": "******",
"created_by": "******",
"created_on": "2023-07-10T17:15:22.000Z",
"state": "CREATED"
}Cloning a Database
You can clone a database by specifying the target and source databases, in that order.
Here’s an example that clones my_database to my_database_clone:
rai clone-database my_database_clone my_databaseAny subsequent changes to either database will not affect the other. Cloning a database fails if the source database does not exist.
You cannot clone from a database until an engine has executed at least one transaction on that database.
Listing Databases
You can list the available databases within your account as follows:
rai list-databasesThis returns a JSON array containing details for each database:
[
{
"id": "******",
"name": "my_database",
"region": "us-east",
"account_name": "******",
"created_by": "******",
"created_on": "2023-07-20T08:03:03.616Z",
"state": "CREATED"
}
]To filter databases by state, you can use the --state flag.
For instance:
rai list-databases --state=CREATEDPossible states are:
"CREATED"."CREATING"."CREATION_FAILED"."DELETED".
Getting Information for a Database
You can get information for a specific database as follows:
rai get-database my_databaseThis gives you the following output:
{
"id": "******",
"name": "my_database",
"region": "us-east",
"account_name": "******",
"created_by": "******",
"created_on": "2023-07-20T08:03:03.616Z",
"state": "CREATED"
}If the database does not exist, a Not found error is returned.
Deleting a Database
You can delete a database using the following command:
rai delete-database my_databaseDeleting a database cannot be undone.
Managing Rel Models
This section covers the CLI commands you can use to manage Rel models.
Rel models are collections of Rel code that can be added, updated, or deleted from a dedicated database. A running engine — and a database — is required to perform operations on models.
Loading a Model
The load-model command loads a Rel model in a given database.
It takes as input the database, the engine, the model name, and the filename from which the model is read.
If no engine is specified using the --engine flag, the system automatically assigns the latest created engine within the configuration profile you are using.
If no name is specified using the --model flag, the filename is used as the name of the model.
For example, consider the following simple Rel model, stored in a file named hello.rel:
def R = "hello", "world"Here’s an example that loads my_model to my_database using my_engine from the hello.rel file:
rai load-model my_database --engine=my_engine --model=my_model hello.relLoading Multiple Models
You can load a number of models using a list of files through the load-models command.
Here’s an example that loads model1.rel, model2.rel, and model3.rel in my_database using my_engine:
rai load-models my_database --engine=my_engine model1.rel model2.rel model3.relIn case you want to group the models in the database, you can use the --prefix string flag.
Here’s an example that uses my_model as a prefix:
rai load-models my_database --engine=my_engine model1.rel model2.rel model3.rel --prefix=my_modelIf the database already contains an installed model with the same name as the newly installed model, the new model replaces the existing one.
Listing Models
You can list the models in a database as follows:
rai list-model-names my_database --engine=my_engineThis returns a JSON array of names:
[
"rel/alglib",
"rel/display",
"rel/graph-basics",
"rel/graph-centrality",
"rel/graph-components",
"rel/graph-degree",
"rel/graph-measures",
"rel/graph-paths",
"rel/histogram",
"rel/intrinsics",
"rel/mathopt",
"rel/mirror",
"rel/net",
"rel/stdlib",
"rel/vega",
"rel/vegalite"
]In the example above, you can see all the built-in models associated with a database.
You can also list all the models and their code using the list-models command:
rai list-models my_database --engine=my_engineGetting Information for a Model
To see the contents of a given model — for example, my_model — you can use:
rai get-model my_database my_model --engine=my_engineThis gives the following output:
{
"name": "my_model",
"value": "def my_range(x) = range(1, 10, 1, x)"
}In the example above, my_model defines a specific range.
Deleting a Model
You can delete a model from a database by using the delete-models command and providing the model’s name like this:
rai delete-models my_database --engine=my_engine model1Deleting Multiple Models
You can delete more than one model at once by specifying multiple names in the delete-models command like this:
rai delete-models my_database --engine=my_engine model1 model2 model3Querying a Database
The command for executing queries against the database is exec.
Each query is a complete transaction, executed in the context of the provided database.
By default, exec calls execute write queries, which update base relations in the database through the control relations insert and delete.
To execute read queries, which can’t change the database, you need to include the --readonly flag.
Here’s a Rel code that loads some CSV data and stores them in the base relation mybaserelation:
def mydata = """
name,lastname,id
John,Smith,1
Peter,Jones,2
"""
def config:schema:name="string"
def config:schema:lastname="string"
def config:schema:id="int"
def config:syntax:header_row=1
def config:data = mydata
def delete[:mybaserelation] = mybaserelation
def insert[:mybaserelation] = load_csv[config]You can execute it as a write query as follows:
rai exec my_database --engine=my_engine --file=csv-example.relYou can provide exec with a query either through a command-line string or through a file.
Here’s an example of the exec command for a read query:
rai exec my_database --engine=my_engine --code="def output[x in {1;2;3}] = x * 2" --readonlyConsider a file simple.rel containing the previous query.
You can execute it by specifying the file name as follows:
rai exec my_database --engine=my_engine --file=simple.rel --readonlyThe output in both cases is:
/:output/Int64/Int64
1, 2
2, 4
3, 6Note that the read queries above include the --readonly flag.
The query size is limited to 64MB. An error will be returned if the request exceeds this API limit.
Getting Multiple Relations Back
To return multiple relations, you can define subrelations of output.
Here’s an example:
rai exec my_database \
--engine=my_engine \
--code="def a = 1;2 def b = 3;4 def output:one = a def output:two = b"This gives the following output:
// "output", "one", int64
output, one, 1;
output, one, 2
// "output", "two", int64
output, two, 3;
output, two, 4Result Structure
The response has the following keys:
| Field | Meaning |
|---|---|
| Transaction | Information about the transaction status, including the identifier. |
| Results | Query output information. |
| Problems | Information about any existing problems in the database — which are not necessarily caused by the query. |
Transaction
The transaction key is a JSON string with the following fields:
| Field | Meaning |
|---|---|
| ID | Transaction identifier. |
| State | Transaction state. See Transaction States for more details. |
For example:
{
"id": "******",
"state": "COMPLETED"
}Results
The results key is a vector with the following fields:
| Field | Meaning |
|---|---|
| Metadata | Relation metadata, for example, "//output, int64". It describes the relation name //output followed by its data schema int64. |
| Results | This contains the results of the query. |
For example:
// "output", int64
output, 1;
output, 2;
output, 3Problems
The problems key reports the following:
| Field | Meaning |
|---|---|
| Message | A short description of the problem. |
| Location | Line(s) and character(s) where the problem is located. |
| Error code | The type of error that occurred, for example, "PARSE_ERROR". |
For example:
rel, catalog, diagnostic, message, 1, Missing closing `}`., <nil>, <nil>, <nil>;
rel, catalog, diagnostic, range, end, character, 1, 1, 19;
rel, catalog, diagnostic, range, end, line, 1, 1, 1;
rel, catalog, diagnostic, range, start, character, 1, 1, 14;
rel, catalog, diagnostic, range, start, line, 1, 1, 1;
rel, catalog, diagnostic, report, 1, 1| def output = {1;2;3
^~~~~~
, <nil>, <nil>, <nil>;
rel, catalog, diagnostic, severity, 1, error, <nil>, <nil>, <nil>;
rel, catalog, diagnostic, code, 1, PARSE_ERROR, <nil>, <nil>, <nil>Printing Responses
The CLI allows you to get responses back in two different formats by specifying the --format flag.
The default format, called pretty, returns results in text form.
Here’s an example:
rai exec my_database --engine=my_engine --code="def output='a';'b';'c'"This is equivalent to:
rai exec my_database --engine=my_engine --format=pretty --code="def output='a';'b';'c'"This command produces the following output:
/:output/Char
97
98
99You can change the output format to JSON by changing the --format flag.
Here’s the same example producing a JSON output:
rai exec my_database --engine=my_engine --format=json --code="def output='a';'b';'c'"This command produces the following output:
{
"GotCompleteResult": true,
"Transaction": {
"id": "e3057f0d-27cb-6224-1086-f3d86bafe6ae",
"state": "COMPLETED"
},
"Results": [
{
"RelationID": "/:output/Char",
"Table": [
[
97,
98,
99
]
]
}
],
"Metadata": {
"relations": [
{
"relation_id": {
"arguments": [
{
"tag": 3,
"constant_type": {
"rel_type": {
"tag": 1,
"primitive_type": 16
},
"value": {
"arguments": [
{
"tag": 16,
"Value": {
"StringVal": "b3V0cHV0"
}
}
]
}
}
},
{
"tag": 1,
"primitive_type": 14
}
]
},
"file_name": "0.arrow"
}
]
},
"Problems": []
}The JSON format has more detailed information on the results, including internal metadata and any potential problems that may have occured.
Here’s an example code that produces a problem since aaa is undefined:
rai exec my_database --engine=my_engine --format=json --code="def output=aaa"This populates the following text in the "Problems" section of the JSON output:
{
...
"Problems": [
{
"type": "ClientProblem",
"error_code": "UNDEFINED",
"is_error": true,
"is_exception": false,
"message": "`aaa` is undefined.",
"report": "1| def output=aaa\n ^^^\n\nThe problem occurred while compiling declaration `output`:\n1| def output=aaa\n ^^^\n\n"
}
]
}Loading Data
The load-csv and load-json commands allow you to load data into a database.
These are not strictly necessary, since the Rel load utilities can also be used for this task.
See the CSV Import and JSON Import guides for more details.
It’s advisable to load data using built-in Rel utilities within queries, rather than these specific SDK functions. See Querying a Database for more details.
Loading CSV Data
The load-csv command loads CSV data from a file and inserts the result into the base relation specified by the --relation flag.
If no relation is specified, the data are loaded in a relation named after the provided data source file.
Additionally, load-csv attempts to guess the schema of the data.
For more control over the schema and parsing of the data, load-csv provides additional flags.
Specifically:
| Flag | Type | Description |
|---|---|---|
--delim | char | Changes the delimiter character from the default ,. |
--escapechar | char | Changes the escape character from the default \. |
--quotechar | char | Changes the quote character from the default ". |
--header-row | int | Specifies the row number of the header. You should specify 0 for no header. The default value is 1. |
--schema | string | Specifies the schema of the imported data. If no schema string is specified, load-csv imports all data as strings. |
Here are the contents of an example CSV file with four columns four-cols.csv:
cocktail,quantity,price,date
"martini",2,12.50,"2020-01-01"
"sazerac",4,14.25,"2020-02-02"
"cosmopolitan",4,11.00,"2020-03-03"
"bellini",3,12.25,"2020-04-04"You can load this file in the relation fourcols using the CLI as follows:
rai load-csv my_database four-cols.csv --relation=fourcolsYou can view the loaded data using the exec command:
rai exec my_database --code="def output=fourcols"This gives the following output:
// "output", "cocktail", int64, string
output, cocktail, 2, martini;
output, cocktail, 3, sazerac;
output, cocktail, 4, cosmopolitan;
output, cocktail, 5, bellini
// "output", "date", int64, string
output, date, 2, 2020-01-01;
output, date, 3, 2020-02-02;
output, date, 4, 2020-03-03;
output, date, 5, 2020-04-04
// "output", "price", int64, string
output, price, 2, 12.50;
output, price, 3, 14.25;
output, price, 4, 11.00;
output, price, 5, 12.25
// "output", "quantity", int64, string
output, quantity, 2, 2;
output, quantity, 3, 4;
output, quantity, 4, 4;
output, quantity, 5, 3Note that all columns from the CSV file are imported as strings.
You can specify the schema through the --schema flag.
Here’s an example that specifies a different schema for each column of the CSV file and loads the data in the fourcols_schema relation:
rai load-csv my_database four-cols.csv \
--relation=fourcols_schema \
--schema="cocktail:string;quantity:int;price:float;date:date"You can now view the newly loaded data using the exec command:
rai exec my_database --engine=my_engine --code="def output=fourcols_schema"This gives the following output:
// "output", "cocktail", int64, string
output, cocktail, 2, martini;
output, cocktail, 3, sazerac;
output, cocktail, 4, cosmopolitan;
output, cocktail, 5, bellini
// "output", "date", int64, time.Time
output, date, 2, 2020-01-01;
output, date, 3, 2020-02-02;
output, date, 4, 2020-03-03;
output, date, 5, 2020-04-04
// "output", "price", int64, float64
output, price, 2, 12.5;
output, price, 3, 14.25;
output, price, 4, 11;
output, price, 5, 12.25
// "output", "quantity", int64, int64
output, quantity, 2, 2;
output, quantity, 3, 4;
output, quantity, 4, 4;
output, quantity, 5, 3Loading JSON Data
The load-json command loads JSON data from a file and inserts them into the base relation specified through the --relation flag.
If no relation is specified, the data are loaded in a relation named after the provided data source file.
Here’s an example JSON file john.json:
{
"first_name": "John",
"last_name": "Smith",
"address": {
"city": "Seattle",
"state": "WA" },
"phone": [
{ "type": "home",
"number": 206456 },
{ "type": "work",
"number": 206123 }
]
}You can load these data into a john relation using the CLI as follows:
rai load-json my_database john.json --relation=johnYou can view the loaded data as follows:
rai exec my_database --engine=my_engine --code="def output=john"This gives the following output:
// "output", "last_name", string
output, last_name, Smith
// "output", "phone", "[]", int64, "number", int64
output, phone, [], 1, number, 206456;
output, phone, [], 2, number, 206123
// "output", "phone", "[]", int64, "type", string
output, phone, [], 1, type, home;
output, phone, [], 2, type, work
// "output", "address", "city", string
output, address, city, Seattle
// "output", "address", "state", string
output, address, state, WA
// "output", "first_name", string
output, first_name, John
In both the load-csv and load-json commands, the base relation that is specified in the --relation flag is not cleared, allowing for multipart, incremental loads.
Using the CLI, you can run:
rai exec my_database --engine=my_engine --code="def delete[:john]=john"This clears the base relation john.
Listing Base Relations
You can list the base relations in a given database as follows:
rai list-edbs my_databaseThe result is a JSON list of objects.
RAI Integration Services for Snowflake
The RelationalAI CLI includes specific commands to interact with the RAI Integration Services for Snowflake.
Many objects of the RAI Integration Services, such as a RAI data stream, are Snowflake objects and need to follow Snowflake’s identifier requirements (opens in a new tab).
This means that Snowflake names can only contain letters, digits, underscores _, and dollar signs $.
For instance, hyphens, -, are not allowed in Snowflake names.
Snowflake Environment Variables
It is possible to store default values for CLI flag options in environment variables. By doing so, you don’t need to explicitly specify these flag options when executing commands. This is convenient for variables that don’t change very often, such as your Snowflake username.
Here is a list of available variables that can be stored in environment variables:
| Environment variable | Description |
|---|---|
SNOWSQL_ACCOUNT | Snowflake account name. |
SNOWSQL_USER | Snowflake admin username. |
SNOWSQL_PWD | Snowflake admin password. |
SNOWSQL_DATABASE | Snowflake database. |
SNOWSQL_SCHEMA | Snowflake schema. |
SNOWSQL_ROLE | Snowflake user role. |
SNOWSQL_WAREHOUSE | Snowflake warehouse. |
For instance, say you’re creating a RAI integration using the following command:
rai create-snowflake-database-link myintegration \
--database=my_sf_db \
--role=integration_user_role \
--username=my_sf_username \
--password=my_sf_passwordYou can simplify this to:
rai create-snowflake-database-link myintegrationThe Snowflake-related information can be stored in environment variables as follows:
export SNOWSQL_USER = my_sf_username
export SNOWSQL_PWD = my_sf_password
export SNOWSQL_ROLE = integration_user_role
export SNOWSQL_DATABASE = my_sf_dbIf you want to have the environment variables set permanently, you can store them in your terminal config file, like ~/.bashrc for the Bash shell.
Managing RAI Integrations
This section covers the CLI commands to configure and manage RAI integrations.
A RAI integration is a secure connection between a Snowflake account and a RAI account. It is required for almost any task within the RAI Integration Services, from creating a RAI database link to running a graph algorithm over your data.
A RAI integration can have multiple RAI database links associated with it. This is useful when multiple Snowflake databases have access to the RAI Integration Services.
See RAI Integration for more details.
The RAI integration name only supports alphanumeric characters.
Creating a RAI Integration
You can create a new RAI integration as follows:
rai create-snowflake-integration myintegration \
--account=my_sf_account_name \
--admin-username=my_sf_username \
--admin-password=my_sf_password \
--proxy-username=my_sf_proxy_user \
--proxy-password=my_sf_proxy_passwordTo see all argument and flag options, you can use rai create-snowflake-integration -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. It can only contain alphanumeric characters. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--acount | my_sf_account_name | Snowflake account name. |
--admin-username | my_sf_username | Snowflake admin username. |
--admin-password | my_sf_password | Snowflake admin password. |
--proxy-username | my_sf_proxy_user | Proxy username. See Proxy User for more details. |
--proxy-password | my_sf_proxy_user | Proxy password. |
Listing RAI Integrations
You can list all available RAI integrations connected to your RAI account as follows:
rai list-snowflake-integrationsNote that the RAI account is determined by the OAuth client you specified in your RAI profile.
If not specified, the RAI profile default is automatically selected.
If the command was successful, you will receive a JSON array that shows the RAI integration information:
List Snowflake integrations ..
Ok (2.6s)[
{
"id": "6f******",
"kind": "SNOWFLAKE",
"name": "myintegration",
"account": "my_rai_account_name",
"createdBy": "**********@clients",
"createdOn": "2023-06-26T00:02:00.755Z",
"state": "CREATED",
"consentUrl": "https://******",
"snowflake": {
"account": "my_sf_account_name"
}
}
]Getting Information for a RAI Integration
You can get information about an existing RAI integration as follows:
rai get-snowflake-integration myintegrationTo see all argument and flag options, you can use rai get-snowflake-integration -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
If successful, you will receive a response that shows the RAI integration information in JSON format:
Get Snowflake integration 'myintegration' ..
Ok (0.7s){
"id": "6f******",
"kind": "SNOWFLAKE",
"name": "myintegration",
"account": "my_rai_account_name",
"createdBy": "**********@clients",
"createdOn": "2023-06-26T00:02:00.755Z",
"state": "CREATED",
"consentUrl": "https://******",
"snowflake": {
"account": "my_sf_account_name"
}
}Updating a RAI Integration
You can update an existing RAI integration as follows:
rai update-snowflake-integration myintegration \
--rai-client-id=your_client_id \
--rai-client-secret=your_client_secret \
--proxy-username=my_sf_proxy_user \
--proxy-password=my_sf_proxy_passwordTo see all argument and flag options, you can use rai update-snowflake-integration -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--rai-client-id | your_client_id | RAI OAuth client ID associated with the RAI integration. |
--rai-client-secret | your_client_secret | RAI OAuth client secret associated with the RAI integration. |
--proxy-username | my_sf_proxy_user | Proxy username. See Proxy User for more details. |
--proxy-password | my_sf_proxy_user | Proxy password. |
Deleting a RAI Integration
You can delete an existing RAI integration as follows:
rai delete-snowflake-integration myintegration \
--admin-username=my_sf_username \
--admin-password=my_sf_password \To see all argument and flag options, you can use rai delete-snowflake-integration -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--admin-username | my_sf_username | Snowflake admin username. |
--admin-password | my_sf_password | Snowflake admin password. |
Managing RAI Database Links
This section covers the CLI commands you need to configure and manage a RAI database link.
A RAI database link is located in a Snowflake database and schema, where it installs the SQL Library for Snowflake. The management of the various RAI resources that are enabled by the SQL Library for Snowflake also happens inside a RAI database link.
A RAI database link is associated with a single RAI integration and uses it to communicate with the RAI resources. However, multiple RAI database links can use the same RAI integration.
See RAI Database Link for more details.
Creating a RAI Database Link
You can create a new RAI database link within a RAI integration as follows:
rai create-snowflake-database-link myintegration \
--database=my_sf_db \
--role=integration_user_role \
--schema=rai \
--username=my_sf_username \
--password=my_sf_passwordTo see all argument and flag options, you can use rai create-snowflake-database-link -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--database | my_sf_db | Snowflake database. |
--role | integration_user_role | Snowflake user role that will own the RAI database link. |
--schema | rai | Snowflake schema. If not specified, the default schema is rai. |
--username | my_sf_username | Snowflake admin username. |
--password | my_sf_password | Snowflake admin password. |
Listing RAI Database Links
You can list all available RAI database links within a specific RAI integration, such as myintegration, as follows:
rai list-snowflake-database-links myintegrationTo see all argument and flag options, you can use rai list-snowflake-database-links -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
If successful, you will receive a JSON array that shows the RAI database link information:
List Snowflake database links (myintegration) ..
Ok (1.0s)[
{
"id": "08******",
"name": "my_sf_db.rai",
"account": "my_rai_account_name",
"createdBy": "******n@clients",
"createdOn": "2023-06-13T23:13:11.492Z",
"state": "CREATED",
"integration": "myintegration",
"snowflake": {
"database": "my_sf_db",
"schema": "rai"
}
}
]Getting Information for a RAI Database Link
You can get information about an existing RAI database link as follows:
rai get-snowflake-database-link myintegration \
--database=my_sf_db \
--schema=raiTo see all argument and flag options, you can use rai get-snowflake-database-link -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--database | my_sf_db | Snowflake database. |
--schema | rai | Snowflake schema. If not specified, the default schema is rai. |
If successful, you will receive a response that shows the data stream information in JSON format:
{
"id": "08******",
"name": "my_sf_db.rai",
"account": "my_rai_account_name",
"createdBy": "******n@clients",
"createdOn": "2023-06-13T23:13:11.492Z",
"state": "CREATED",
"integration": "myintegration",
"snowflake": {
"database": "my_sf_db",
"schema": "rai"
}
}Updating a RAI Database Link
You can update an existing RAI database link for a specific RAI integration as follows:
rai update-snowflake-database-link myintegration \
--database=my_sf_db \
--role=integration_user_role \
--schema=rai \
--username=my_sf_username \
--password=my_sf_passwordTo see all argument and flag options, you can use rai update-snowflake-database-link -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--database | my_sf_db | Snowflake database. |
--role | integration_user_role | Snowflake user role that will own the RAI database link. |
--schema | rai | Snowflake schema. If not specified, the default schema is rai. |
--username | my_sf_username | Snowflake admin username. |
--password | my_sf_password | Snowflake admin password. |
General Remarks
The command rai update-snowflake-database-link only adds new or overwrites existing functions and procedures.
The update command does not remove outdated functions or procedures.
To ensure you have an updated RAI database link — without any outdated functionality — you need to delete and recreate the database link:
rai delete-snowflake-database-link myintegration
rai create-snowflake-database-link myintegrationHowever, deleting a RAI database link will also delete all your RAI data streams along with other objects managed by the RAI database link.
Deleting a RAI Database Link
You can delete an existing RAI database link as follows:
rai delete-snowflake-database-link myintegration \
--database=my_sf_db \
--role=integration_user_role \
--schema=rai \
--username=my_sf_username \
--password=my_sf_passwordTo see all argument and flag options, you can use rai delete-snowflake-database-link -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--database | my_sf_db | Snowflake database. |
--role | integration_user_role | Snowflake user role that will own the RAI database link. |
--schema | rai | Snowflake schema. If not specified, the default schema is rai. |
--username | my_sf_username | Snowflake admin username. |
--password | my_sf_password | Snowflake admin password. |
Deleting a RAI database link will delete all objects managed by the RAI database link, including RAI data streams and lookup tables.
Managing RAI Data Streams
This section covers the CLI commands you need to manage RAI data streams.
A RAI data stream synchronizes your data from a Snowflake database to a RAI database. It originates from a Snowflake SQL object, such as a table or a view, and targets a RAI base relation. It is associated with a RAI database link, which manages this synchronization.
See RAI Data Streams for more details.
Creating a RAI Data Stream
You can create a RAI data stream using the following command:
rai create-snowflake-data-stream myintegration my_sf_db.rai my_sf_db.my_sf_schema.my_sf_object \
--username=my_sf_username \
--password=my_sf_password \
--rai-database=my_rai_db \
--rai-relation=my_rai_relation \
--role=integration_user_role \
--warehouse=my_sf_whTo see all argument and flag options, you can use rai create-snowflake-data-stream -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
my_sf_db.rai | The fully qualified name of the database link to use. |
my_sf_db.my_sf_schema.my_sf_object | The fully qualified name of the Snowflake object, such as a table or view, monitored by the data stream. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--username | my_sf_username | Snowflake admin username. |
--password | my_sf_password | Snowflake admin password. |
--rai-database | my_rai_db | Target RAI database for the data stream. |
--rai-relation | my_rai_relation | Target RAI relation for the data stream. |
--role | integration_user_role | Snowflake user role that will own the RAI database link. |
--warehouse | my_sf_wh | Snowflake warehouse. |
General Remarks
By default, the RAI database link is located in the Snowflake schema rai.
See Creating a RAI Database Link for more details.
Your Snowflake objects can be located in any Snowflake schema.
However, it is advisable to locate them within your working schema, for example, my_sf_schema.
Listing RAI Data Streams
You can list all available RAI data streams within a specific RAI integration and database link as follows:
rai list-snowflake-data-streams myintegration my_sf_db.raiTo see all argument and flag options, you can use rai list-snowflake-data-streams -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
my_sf_db.rai | The fully qualified name of the database link to use. |
If successful, you will receive a JSON array that shows the RAI data stream information:
List Snowflake dataStreams linked to my_sf_db.rai (myintegration) ..
Ok (2.3s)[
{
"account": "******",
"id": "******",
"name": "my_sf_db.my_sf_schema.my_sf_object",
"integration": "myintegration",
"dbLink": "my_sf_db.rai",
"createdBy": "******@****",
"createdOn": "2023-06-26T19:48:55.650Z",
"state": "CREATED",
"snowflake": {
"database": "my_sf_db",
"schema": "rai",
"object": "my_sf_db.my_sf_schema.my_sf_object"
},
"rai": {
"database": "my_rai_db",
"relation": "my_rai_relation"
}
}
]Getting Information for a RAI Data Stream
You can get information for a specific RAI data stream using the following command:
rai get-snowflake-data-stream myintegration my_sf_db.rai my_sf_db.my_sf_schema.my_sf_objectThis command only includes metadata information for the RAI data stream.
If you want to retrieve the status of a specific RAI data stream, you need to use the following command:
rai get-snowflake-data-stream-status myintegration my_sf_db.rai my_sf_db.my_sf_schema.my_sf_objectSee Monitor a Data Stream for more details.
To see all argument and flag options, you can use rai get-snowflake-data-stream -h and rai get-snowflake-data-stream-status -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
my_sf_db.rai | The fully qualified name of the database link to use. |
my_sf_db.my_sf_schema.my_sf_object | The fully qualified name of the object, such as a table or view, monitored by the data stream. |
If successful, you will receive a response that shows the RAI data stream information with the rai get-snowflake-data-stream command:
Get Snowflake data stream my_sf_db.my_sf_schema.my_sf_object (myintegration) ..
Ok (1.0s){
"account": "******",
"id": "******",
"name": "my_sf_db.my_sf_schema.my_sf_object",
"integration": "myintegration",
"dbLink": "my_sf_db.rai",
"createdBy": "******@****",
"createdOn": "2023-06-26T19:48:55.650Z",
"state": "CREATED",
"snowflake": {
"database": "my_sf_db",
"schema": "rai",
"object": "my_sf_db.my_sf_schema.my_sf_object"
},
"rai": {
"database": "my_rai_db",
"relation": "my_rai_relation"
}
}To get the RAI data stream status, use the rai get-snowflake-data-stream-status command:
Get Snowflake data stream status my_sf_db.rai (myintegration) ..{
"account": "************",
"id": "************",
"name": "myintegration.my_sf_db.my_sf_schema.my_sf_object",
"raiLoadEnd": ************,
"snowflakeUnloadStart": ************
}Deleting a RAI Data Stream
You can delete an existing RAI data stream using the following command:
rai delete-snowflake-data-stream myintegration my_sf_db.rai my_sf_db.my_sf_schema.my_sf_object \
--username=my_sf_username \
--password=my_sf_password \
--role=integration_user_role \
--warehouse=my_sf_whTo see all argument and flag options, you can use rai delete-snowflake-data-stream -h.
The mandatory arguments are the following:
Positional Arguments
| Argument | Description |
|---|---|
myintegration | RAI integration name. |
my_sf_db.rai | The fully qualified name of the database link to use. |
my_sf_db.my_sf_schema.my_sf_object | The fully qualified name of the object, such as a table or view, monitored by the data stream. |
Flag Arguments
| Flag | Argument | Description |
|---|---|---|
--username | my_sf_username | Snowflake admin username. |
--password | my_sf_password | Snowflake admin password. |
--role | integration_user_role | Snowflake user role that will own the RAI database link. |
--warehouse | my_sf_wh | Snowflake warehouse. |