Skip to main content

Actions

The AWS Redshift connector spans 2 packages:

  • ballerinax/aws.redshift
  • ballerinax/aws.redshift.driver

Available clients:

ClientPurpose
ClientConnects to an Amazon Redshift cluster via JDBC for SQL queries, DML/DDL execution, batch operations, and stored procedure calls.

Client

Connects to an Amazon Redshift cluster via JDBC for SQL queries, DML/DDL execution, batch operations, and stored procedure calls.

Configuration

FieldTypeDefaultDescription
urlstringRequiredJDBC URL of the Redshift cluster (e.g., jdbc:redshift://<endpoint>:5439/<database>).
userstringRequiredDatabase username.
passwordstringRequiredDatabase password.
optionsOptions?()Redshift-specific JDBC options including SSL mode and custom properties.
connectionPoolsql:ConnectionPool?()Connection pool configuration. Uses the global shared pool if not specified.

Initializing the client

import ballerinax/aws.redshift;
import ballerinax/aws.redshift.driver as _;

configurable string jdbcUrl = ?;
configurable string user = ?;
configurable string password = ?;

redshift:Client redshiftClient = check new (
url = jdbcUrl,
user = user,
password = password
);

Operations

Query operations

query

Executes a SOQL-style parameterized query and returns results as a stream of typed records.

Parameters:

NameTypeRequiredDescription
sqlQuerysql:ParameterizedQueryYesThe parameterized SQL query to execute.
rowTypetypedesc<record {}>NoExpected return record type for each row.

Returns: stream<rowType, sql:Error?>

Sample code:

type User record {|
string name;
string email;
string state;
|};

stream<User, sql:Error?> resultStream = redshiftClient->query(`SELECT * FROM Users LIMIT 10`);
check from User user in resultStream
do {
// process each user record
};

Sample response:

{"name": "John Doe", "email": "[email protected]", "state": "CA"}
{"name": "Jane Smith", "email": "[email protected]", "state": "NY"}
queryRow

Executes a parameterized query that is expected to return at most one row.

Parameters:

NameTypeRequiredDescription
sqlQuerysql:ParameterizedQueryYesThe parameterized SQL query to execute.
returnTypetypedesc<anydata>NoExpected return type for the single result row.

Returns: returnType|sql:Error

Sample code:

type Album record {|
string id;
string title;
string artist;
float price;
|};

Album album = check redshiftClient->queryRow(`SELECT * FROM Albums WHERE id = ${"1"}`);

Sample response:

{"id": "1", "title": "Blue Train", "artist": "John Coltrane", "price": 56.99}

DML & DDL operations

execute

Executes a DML or DDL statement such as INSERT, UPDATE, DELETE, or CREATE TABLE.

Parameters:

NameTypeRequiredDescription
sqlQuerysql:ParameterizedQueryYesThe parameterized SQL statement to execute.

Returns: sql:ExecutionResult|sql:Error

Sample code:

sql:ExecutionResult result = check redshiftClient->execute(
`INSERT INTO Albums (id, title, artist, price) VALUES (${"4"}, ${"New Album"}, ${"Artist"}, ${29.99})`
);

Sample response:

{"affectedRowCount": 1, "lastInsertId": null}
batchExecute

Executes multiple parameterized DML statements as a batch for efficient bulk operations.

Parameters:

NameTypeRequiredDescription
sqlQueriessql:ParameterizedQuery[]YesArray of parameterized SQL statements to execute in a batch.

Returns: sql:ExecutionResult[]|sql:Error

Sample code:

sql:ParameterizedQuery[] insertQueries = [
`INSERT INTO Albums VALUES (${"5"}, ${"Album A"}, ${"Artist A"}, ${19.99})`,
`INSERT INTO Albums VALUES (${"6"}, ${"Album B"}, ${"Artist B"}, ${24.99})`
];
sql:ExecutionResult[] results = check redshiftClient->batchExecute(insertQueries);

Sample response:

[{"affectedRowCount": 1, "lastInsertId": null}, {"affectedRowCount": 1, "lastInsertId": null}]

Stored procedures

call

Calls a stored procedure, optionally returning result sets.

Parameters:

NameTypeRequiredDescription
sqlQuerysql:ParameterizedCallQueryYesThe parameterized stored procedure call query.
rowTypestypedesc<record {}>[]NoExpected record types for each result set returned by the procedure.

Returns: sql:ProcedureCallResult|sql:Error

Sample code:

sql:ProcedureCallResult callResult = check redshiftClient->call(`{CALL get_active_users()}`);

Sample response:

{"executionResult": {"affectedRowCount": -1}, "queryResult": <stream of records>}

Connection management

close

Closes the client connection and shuts down the connection pool.

Returns: sql:Error?

Sample code:

check redshiftClient.close();