Validating Data from Amazon Redshift

This page covers Amazon Redshift-specific setup for Data validation. For workflow field definitions, see Data validation configuration reference.

Prerequisites

  • ODBC connectivity to Redshift from Worker hosts (standard or IAM auth; same TOML as Migrating Data from Amazon Redshift).
  • Live Redshift access for L1 and L2. Schema and metrics validation always run SQL against live Redshift.
  • L3 object storage (Recommended): Use UNLOAD (extraction.strategy: unload) so signatures land on Amazon S3 with the same Worker unload_* TOML and Snowflake externalStage as migration. See L3 extraction and Amazon S3.

Connectivity

Reuse the same [connections.source.redshift] Worker TOML as Migrating Data from Amazon Redshift.

Standard authentication example:

[connections.source.redshift]
username = "myuser"
password = "mypassword"
database = "mydatabase"
host = "my-cluster.abcdef123456.us-west-2.redshift.amazonaws.com"
port = 5439
auth_method = "standard"

Validation behavior

  • After UNLOAD migrations: Schema and metrics validation still run SQL against live Redshift. For L3, reuse UNLOAD with the same Worker unload_* TOML and Snowflake externalStage as migration. Grant the Redshift cluster IAM role the Amazon S3 writer actions. Ensure the Worker can reach the cluster and that large partition result sets stay within timeout and spool limits.
  • Iceberg targets: Validation compares whatever is in Snowflake (native or Iceberg). Iceberg targets don’t change L2/L3 SQL on the Redshift side.

For partitioning and indexColumnList, see Data validation configuration reference.

Example workflow excerpt:

source_platform: redshift
target_database: TARGET_DB
validation_configuration:
  schema_validation: true
  metrics_validation: true
  row_validation: false
tables:
  - fully_qualified_name: snowconvert_demo.ecommerce_raw.customers
    column_names_to_partition_by:
      - customer_id
  - fully_qualified_name: snowconvert_demo.ecommerce_raw.orders
    column_names_to_partition_by:
      - order_id
    indexColumnList:
      - order_id
    validation_configuration:
      row_validation: true

Data type mappings

Redshift typeSnowflake target typeSupported for validationNotes
SMALLINT, INTEGER, BIGINT, DECIMAL, REAL, DOUBLE PRECISIONNUMBER / FLOATYes
BOOLEAN, DATE, TIMESTAMPBOOLEAN / DATE / TIMESTAMP_NTZYes
CHAR, VARCHARVARCHARYes
VARBYTE / BINARY VARYINGBINARYYesCompared as uppercase hexadecimal
TIMESTAMPTZTIMESTAMP_TZPartialRow-level validation not yet supported
TIMETIMEYes
TIMETZTIMESTAMP_TZPartialRow-level validation not yet supported
INTERVALY2M, INTERVALD2SINTERVALYesNative INTERVAL comparison by default. See INTERVAL data type handling.
GEOMETRYGEOMETRYYesCompared as despaced Well-Known Text
GEOGRAPHYGEOGRAPHYYesCompared as despaced Well-Known Text
HLLSKETCHNo
SUPERVARIANTYes

Platform-specific considerations

  • Starting validation: Ask the agent to generate a validation workflow with the depth you need (schema validation, metrics validation, and row-level validation, per table).

    Prompt:

    Run cloud data validation for my Redshift tables, with schema and metrics validation on all tables and row-level validation on orders
    
  • For tables migrated via UNLOAD, confirm the live Redshift source still reflects the data snapshot you expect to compare.

    Prompt:

    Validate the customers and orders tables that were migrated with UNLOAD extraction
    
  • Anti-locking: No automatic hint is added on Redshift. Set queryModifiers only when you need custom source SQL hints. See Anti-locking and query modifiers.