%dw 1.0 %output application/java --- { "column": payload.column, "type": payload.type } as :object { class : "com.mulesoft.mule.cassandradb.metadata.AlterColumnInput" }
Cassandra Connector Operations Reference
The Cassandra connector was implemented using the DataStax Java Driver for Apache Cassandra 3.1. The connector exposes multiple operations that are described in the javadoc. Some of these operations accept some custom plain old Java objects (POJOs) as input parameters, which are needed for the DataSense functionality.
Add New Column
Input for this operation is:
-
Parameter: a table name
-
Optional keyspace name
-
Payload: an AlterColumnInput POJO
The POJO has the following fields:
-
Name of the column to be created
-
The data type for the new column
-
Change Column Type
You need to connect to a Cassandra database version that supports changing the column type as described in the Cassandra Connector Release Notes. This operation changes the data type of a column to another valid and compatible type as defined by the Cassandra Query Language (CQL) and shown in the following tables:
Valid Type Changes for Non-clustering Columns
Change From |
Change To |
ascii, bigint, boolean, decimal, double, float, inet, int, timestamp, timeuuid, uuid, varchar, varint |
blob |
int |
varint |
text |
varchar |
timeuuid |
uuid |
varchar |
text |
Valid Type Changes for Clustering Columns
Change From |
Change To |
int |
varint |
text |
varchar |
varchar |
text |
Input for this operation is:
-
Parameter: a table name
-
Optional keyspace name
-
Payload: an AlterColumnInput POJO
The POJO in the payload has fields for the following things:
-
The column name
-
The new DataType for that column
-
%dw 1.0 %output application/java --- { "column": payload.column, "type": payload.type } as :object { class : "com.mulesoft.mule.cassandradb.metadata.AlterColumnInput" }
Create Keyspace
This operation accepts a custom POJO CreateKeyspaceInput as input.
Input for this operation using SimpleStrategy is:
-
Keyspace name
-
Replication factor
-
Replication Strategy Class
Pass the parameters using a Transform Message component to transform the payload to a Java object.
SimpleStrategy DataWeave Code Example
%dw 1.0 %output application/java --- { "keyspaceName": payload.keyspaceName, "replicationFactor": payload.replicationFactor, "replicationStrategyClass": payload.replicationStrategyClass } as :object { class : "com.mulesoft.mule.cassandradb.metadata.CreateKeyspaceInput" }
Input for the parameters using NetworkTopologyStrategy is:
-
Keyspace Name
-
Data center names and replication values
-
Replication Strategy Class
NetworkTopologyStrategy DataWeave Code Example
%dw 1.0 %output application/java --- { firstDataCenter: { name: payload.dcA, value: payload.repfactorA }, nextDataCenter: { name: payload.dcB, value: payload.repfactorB }, nextDataCenter: { name: payload.dcC, value: payload.repfactorC }, keyspaceName: payload.keyspaceName, replicationStrategyClass: payload.replicationStrategyClass } as :object { class : "com.mulesoft.mule.cassandradb.metadata.CreateKeyspaceInput" }
Create Table
This operation accepts a custom POJO CreateTableInput as input.
Input for this operation is:
-
Column names
-
Table names
-
Optional keyspace name
%dw 1.0 %output application/java --- { "columns": payload.columns, "tableName": payload.tableName, "keyspaceName": payload.keyspaceName } as :object { class : "com.mulesoft.mule.cassandradb.metadata.CreateTableInput" }
In this example, the keyspaceName parameter is optional. If you do not provide this parameter, when you run the application, the table is created in the keyspace specified in mule.app.properties
.
Delete Columns Value
Input for this operation is:
-
Parameter: a table name as a parameter
-
Optional keyspace name
-
Payload: a
Map<String, Object>
having two records with the keyswhere
andcolumns
Similar to the Update operation, the where
record represents the clause that specifies the primary keys of the objects to be updated. The columns
record represents a List<String>
containing the column names to be cleared.
After invoking this operation when fetching the entities that were updated, the values for the columns specified in the Delete Columns Value operations are null.
You can store collections in specific columns in Cassandra. In this operation, you can delete specific values from those collections without deleting the whole collection.
The payload passed to the processor has the following structure:
%dw 1.0 %output application/java --- { "columns":payload.columns, "where":payload.where }
An HTTP request for deleting an element from a list looks like this:
{ "where": { "id": [1] }, "columns": ["top_places[0]"] }
An HTTP request for deleting an element from a map looks like this:
{ "where": { "id": [1,2] }, "columns": ["mapColumnName['keyName']"] }
Delete Rows
Input for this operation is:
-
Parameter: a table name
-
Optional keyspace name
-
Payload a
Map<String, Object>
with one record having the keywhere
and a valueMap<String, Object>
containing the WHERE clause.
If you want to delete a row from a table having a compound primary key, in the where
specify a map that contains the column names as keys and the column values as values. You can delete only one row at a time.
{ "where": { "id": 2, "name": "name_to_delete" } }
A compound primary key consists of multiple columns, one of which is the partition key. Others are clustering columns. In this example, id is the partition key and name is a clustering column.
If you want to delete a row from a table having a simple primary key, in the where
specify a map that contains a single entry with the column name as the key and a list of values as the value. Multiple rows can be deleted at once.
{ "where": { "id": [2,3] } }
A simple primary key has a single column that is the partition key.
Drop Column
Input for this operation is:
-
Parameter: a table name
-
Optional keyspace name
-
Payload: a column name
Execute CQL Query
Input for this operation is:
-
A custom POJO (CQLQueryInput)
A string representing the query. The query can be parametrized or not.
-
An optional list of parameters to pass to the parametrized query.
Execute CQL Query Examples
Transform Message Payload
%dw 1.0 %output application/java --- { "cqlQuery": payload.cqlQuery, "parameters": payload.parameters } as :object { class : "com.mulesoft.mule.cassandradb.metadata.CQLQueryInput" }
HTTP Request to the <execute-cql-query>
Processor
{ "cqlQuery":"SELECT * FROM users WHERE id IN (?,?)", "parameters": [2,3] }
Get Table Names from Keyspace
This operation has takes a string parameter specifying the keyspace name for the operation. The processor returns a list of tables in the specified keyspace.
Insert
Input for this operation is:
-
Parameter: a table name as a parameter
-
Payload: a
Map<String, Object>
representing the entity to be inserted into the table. -
Optional keyspace name
Rename column
Parameters for this operation are:
-
A table name
-
The old column name
-
The new column name
Select
Input for this operation is:
-
A string representing the query
-
An optional list of type Object representing the parameters for the query.
You can build a query using a query builder.
Update
Input for this operation is:
-
Parameter: a table name
-
Optional keyspace name
-
Payload:
Map<String, Object>
with two records having the keyswhere
andcolumns
.-
where Map<String, Object>
Represents the clause that specifies the primary keys of the objects to be updated.
"where": { "id": 1, "name": "bestseller1" }
-
columns Map<String, Object>
Represents pairs containing the column name and the value to be set for that column.
"columns": { "name": "test value" }
-
When you use the Transform Message component to set the payload for this operation, you see the details needed to set the payload.
You can select which columns to update and specify the WHERE clause. The columns
section contains all the columns of the table selected for the operation; whereas, in the where
section only the columns that are part of the primary key are displayed. CQL syntax dictates that only columns in the primary key can be specified in the WHERE clause.