Amazon Redshift Driver v1.1.0

Driver Version v1.1.0 Tested With Amazon Redshift aws

This driver provides access to Amazon Redshift (commonly referred to as just “Redshift”).

Note

This project is not affiliated with Amazon.

Installation

The Redshift driver can be installed with dbc :

dbc install redshift

Connecting

To connect, edit the uri, redshift.cluster_type, redshift.workgroup_name, and redshift.db_name options below to match your environment and run the following:

from adbc_driver_manager import dbapi

dbapi.connect(
    driver="redshift",
    db_kwargs={
        "uri": "postgresql://localhost:5439",
        #"uri": "postgresql://<cluster hostname>:<cluster port>", # for direct connection

        "redshift.cluster_type": "redshift-serverless", # for Redshift Serverless
        #"redshift.cluster_type": "redshift-iam", # for Redshift Provisioned with IAM auth
        #"redshift.cluster_type": "redshift", # for Redshift Provisioned with user/password auth

        "redshift.workgroup_name": "<WORKGROUP_NAME>", # for Redshift Serverless
        #"redshift.cluster_identifier": "<CLUSTER IDENTIFIER>", # for Redshift Provisioned

        "redshift.db_name": "sample_data_dev",
    }
)

Note: The example above is for Python using the adbc-driver-manager package but the process will be similar for other driver managers.

Connection String Format

Connection strings are passed with the uri option. Redshift’s URI syntax supports two primary forms:

  1. Explicit endpoint, for direct connections or standard user/password authentication:

    redshift://[user[:password]@]host[:port]/dbname[?param1=value1&param2=value2]
    
  2. Endpoint discovery, for IAM authentication and serverless connections:

    redshift:///dbname[?param1=value1&param2=value2]
    

    Note the triple slash (///). This indicates an empty host, signaling the driver to discover the endpoint using the provided query parameters (e.g., cluster_identifier or workgroup_name).

Components:

  • Scheme: redshift:// (required)

  • User/Password: Optional (for standard user/password authentication with cluster_type=redshift)

    • Ignored if cluster_type is redshift-iam or redshift-serverless

  • Host/Port: The Redshift cluster endpoint (e.g., my-cluster.c…com:5439)

    • If omitted (using redshift:///), the driver will discover this using the AWS SDK

  • Database: Required (e.g., /dev)

  • Query Parameters: Configuration options

See Amazon Redshift JDBC Connection URL for connection URL format and Amazon Redshift JDBC Configuration Options for complete parameter reference.

Note

Reserved characters in URI elements must be URI-encoded. For example, @ becomes %40.

Examples:

  • redshift://admin_user:secret@my-cluster.region.redshift.amazonaws.com:5439/dev

  • redshift:///dev?cluster_type=redshift-iam&cluster_identifier=my-cluster

  • redshift:///dev?cluster_type=redshift-serverless&workgroup_name=my-workgroup

  • redshift://admin:pass@localhost:5439/dev?sslmode=disable

  • redshift:///dev?cluster_type=redshift-serverless&workgroup_name=my-workgroup&aws_region=us-west-1&aws_access_key_id=AKIA…&aws_secret_access_key=secret

  • redshift:///dev?cluster_type=redshift-iam&cluster_identifier=my-cluster&auth_provider=BrowserIdcAuthPlugin&idc_region=us-east-1&issuer_url=https://example.com

  • redshift:///dev?cluster_type=redshift&cluster_identifier=my-cluster&username=newuser&auto_create_user=true

The driver also supports standard PostgreSQL connection strings (e.g., postgresql://user:pass@host:port/dbname) as the uri option. When using this format, all Redshift-specific parameters (e.g., redshift.cluster_type, redshift.workgroup_name) must be passed as separate connection options. However, using the standard redshift:// URI is recommended.

Feature & Type Support

Feature Support
Bulk Ingestion Create
Append
Create/Append
Replace
Temporary Table
Specify target catalog
Specify target schema
Non-nullable fields are marked NOT NULL
Catalog (GetObjects) depth=catalogs
depth=db_schemas
depth=tables
depth=columns (all)
Get Parameter Schema
Get Table Schema
Prepared Statements
Transactions

Types

Amazon Redshift to Arrow

Amazon Redshift Type

Arrow Type

BIGINT

int64

BOOLEAN

bool

DATE

date32[day]

DOUBLE PRECISION

double

GEOGRAPHY

extension<geoarrow.wkb>

GEOMETRY

extension<geoarrow.wkb>

HLLSKETCH

extension<arrow.opaque[storage_type=string, type_name=HLLSKETCH, vendor_name=Amazon Redshift]>

INT

int32

INTERVAL DAY TO SECOND

month_day_nano_interval

INTERVAL YEAR TO MONTH

month_day_nano_interval

NUMERIC

decimal128

REAL

float

SMALLINT

int16

SUPER

extension<arrow.json>

TIME

time64[us]

TIMESTAMP

timestamp[us]

TIMESTAMP WITH TIME ZONE

timestamp[us] (with time zone)

TIMETZ

extension<arrow.opaque[storage_type=string, type_name=TIMETZ, vendor_name=Amazon Redshift]> [1]

VARBINARY

binary

VARCHAR

string

Arrow to Amazon Redshift

Arrrow Type Amazon Redshift Type
Bind Ingest
binary

VARBINARY ⚠️ [2]

VARBINARY

binary_view

VARBINARY

[9]

bool

BOOLEAN

date32[day]

DATE

decimal128

NUMERIC

double

DOUBLE PRECISION

extension<arrow.json>

SUPER

SUPER ⚠️ [13]

extension<geoarrow.wkb>

GEOGRAPHY ⚠️ [3], GEOMETRY ⚠️ [4]

(not tested)

extension<geoarrow.wkt>

GEOGRAPHY ⚠️ [5], GEOMETRY ⚠️ [6]

[11]

fixed_size_binary

VARBINARY

[10]

float

REAL ⚠️ [7]

REAL

halffloat

REAL

(not tested)

int16

SMALLINT

int32

INT

int64

BIGINT

large_binary

VARBINARY

large_string

VARCHAR

list

(not tested)

SUPER

string

VARCHAR

string_view

VARCHAR

[12]

struct

SUPER

time32[ms]

TIME

[14]

time32[s]

TIME

[14]

time64[ns]

TIME

[14]

time64[us]

TIME

[14]

timestamp[ms]

TIMESTAMP

timestamp[ms] (with time zone)

TIMESTAMP(3) WITH TIME ZONE

timestamp[ns]

TIMESTAMP [8]

TIMESTAMP

timestamp[ns] (with time zone)

TIMESTAMP(9) WITH TIME ZONE

timestamp[s]

TIMESTAMP

timestamp[s] (with time zone)

TIMESTAMP(0) WITH TIME ZONE

timestamp[us]

TIMESTAMP

timestamp[us] (with time zone)

TIMESTAMP(6) WITH TIME ZONE

Previous Versions

To see documentation for previous versions of this driver, see the following: