Data Connectors

Glue Data Connector

Connect to and query tables in an AWS Glue Data Catalog

The Glue Data Connector enables federated SQL querying on tables in an AWS Glue Data Catalog.

datasets:
  - from: glue:tpch.lineitem
    name: lineitem
    params:
      glue_region: us-east-1
      glue_key: ${env:SPICE_AWS_KEY} # Optional.
      glue_secret: ${env:SPICE_AWS_SECRET} # Optional.

Configuration

from

Specify a table using the format, glue:<database>.<table> by replacing <database> with the name of the Glue database and <table>with the name of the table inside of the <database>.

name

The dataset name. This will be used as the table name within Spice.

Example:

SELECT COUNT(*) FROM lineitem;
+----------+
| count(*) |
+----------+
| 6001215  |
+----------+

The dataset name cannot be a reserved keyword.

params

The following parameters are supported for configuring the connection to the Glue Data Catalog:

Parameter NameDefinition
glue_regionThe AWS region for the Glue Data Catalog. E.g. us-west-2.
glue_catalog_idThe Glue catalog ID. For Amazon S3 Tables, use the format <account_id>:s3tablescatalog/<table_bucket_name>. If not provided, the default catalog for the account is used.
glue_keyAccess key (e.g. AWS_ACCESS_KEY_ID for AWS). If not provided, credentials will be loaded from environment variables or IAM roles.
glue_secretSecret key (e.g. AWS_SECRET_ACCESS_KEY for AWS). If not provided, credentials will be loaded from environment variables or IAM roles.
glue_session_tokenSession token (e.g. AWS_SESSION_TOKEN for AWS) for temporary credentials
glue_iam_role_sourceOptional. IAM role credential source. auto (default) uses the default AWS credential chain, metadata uses only instance/container metadata (IMDS, ECS, EKS/IRSA), env uses only environment variables.

The following parameters control how the embedded S3 reader fetches Parquet/ORC/CSV data files referenced by Glue table metadata. They are inherited from the S3 data connector. glue_endpoint and glue_url_style also apply to Iceberg-format tables, whose object I/O is handled by the Iceberg client. The other parameters do not apply to Iceberg-format tables.

Parameter NameDefinition
glue_endpointOptional. Custom S3-compatible endpoint URL used when reading Parquet/ORC/CSV data files and Iceberg table files, for example https://s3.us-east-1.amazonaws.com or http://minio.local:9000. Leave unset for AWS S3.
glue_url_styleOptional. S3 URL addressing style for Parquet/ORC/CSV and Iceberg files. One of vhost or path. When unset, Parquet/ORC/CSV reads use the S3 connector's automatic detection, and Iceberg tables use path when the bucket in the table's Iceberg metadata_location contains a dot.
glue_versioningOptional. Enables S3 object versioning support for Parquet/ORC/CSV data files when set to enabled. Defaults to enabled.
client_timeoutOptional. Timeout for the underlying S3 client used to fetch Parquet/ORC/CSV data files, for example 30s.
allow_httpOptional. Set to true to allow insecure HTTP for the S3 endpoint used to read Parquet/ORC/CSV data files. Defaults to false. Required when glue_endpoint uses an http:// scheme.

Examples

Basic Glue Table

datasets:
  - from: glue:tpch.lineitem
    name: lineitem
    params:
      glue_region: us-east-1
      glue_key: ${env:AWS_ACCESS_KEY_ID}
      glue_secret: ${env:AWS_SECRET_ACCESS_KEY}

Amazon S3 Tables

Connect to tables in Amazon S3 Tables using the glue_catalog_id parameter with the S3 Tables catalog format:

datasets:
  - from: glue:my_namespace.orders
    name: orders
    params:
      glue_catalog_id: 123635965758:s3tablescatalog/my-table-bucket
      glue_region: us-east-2
      glue_key: ${env:AWS_ACCESS_KEY_ID}
      glue_secret: ${env:AWS_SECRET_ACCESS_KEY}

Authentication

If AWS credentials are not explicitly provided in the configuration, the connector will automatically load credentials from the following sources in order. These credentials will be used to connect to the S3 bucket as well as the Glue catalog.

  1. Environment Variables:

    • AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
    • AWS_SESSION_TOKEN (if using temporary credentials)
  2. Shared AWS Config/Credentials Files:

    • Config file: ~/.aws/config (Linux/Mac) or %UserProfile%\.aws\config (Windows)

    • Credentials file: ~/.aws/credentials (Linux/Mac) or %UserProfile%\.aws\credentials (Windows)

    • The AWS_PROFILE environment variable can be used to specify a named profile, otherwise the [default] profile is used.

    • Supports both static credentials and SSO sessions

    • Example credentials file:

      # Static credentials
      [default]
      aws_access_key_id = YOUR_ACCESS_KEY
      aws_secret_access_key = YOUR_SECRET_KEY
      
      # SSO profile
      [profile sso-profile]
      sso_start_url = https://my-sso-portal.awsapps.com/start
      sso_region = us-west-2
      sso_account_id = 123456789012
      sso_role_name = MyRole
      region = us-west-2
  3. AWS STS Web Identity Token Credentials:

    • Used primarily with OpenID Connect (OIDC) and OAuth
    • Common in Kubernetes environments using IAM roles for service accounts (IRSA)
  4. ECS Container Credentials:

    • Used when running in Amazon ECS containers
    • Automatically uses the task's IAM role
    • Retrieved from the ECS credential provider endpoint
    • Relies on the environment variable AWS_CONTAINER_CREDENTIALS_RELATIVE_URI or AWS_CONTAINER_CREDENTIALS_FULL_URI which are automatically injected by ECS.
  5. AWS EC2 Instance Metadata Service (IMDSv2):

    • Used when running on EC2 instances.
    • Automatically uses the instance's IAM role.
    • Retrieved securely using IMDSv2.

The connector will try each source in order until valid credentials are found. If no valid credentials are found, an authentication error will be returned.

Required IAM Permissions

The IAM role or user needs the following permissions to access Iceberg tables in S3/Glue:

{
    "Version": "2012-10-17",
    "Statement": [
      {
        "Effect": "Allow",
        "Action": ["s3:ListBucket"],
        "Resource": "arn:aws:s3:::company-bucketname-datasets"
      },
      {
        "Effect": "Allow",
        "Action": ["s3:GetObject", "s3:PutObject"],
        "Resource": "arn:aws:s3:::company-bucketname-datasets/*"
      },
      {
        "Effect": "Allow",
        "Action": [
          "glue:GetCatalog",
          "glue:GetDatabases",
          "glue:GetDatabase",
          "glue:GetTable",
          "glue:GetTables",
          "glue:UpdateTable"
        ],
        "Resource": "*"
      }
    ]
}

Permission Details

PermissionPurpose
s3:ListBucketRequired. Allows scanning all objects from the bucket
s3:GetObjectRequired. Allows fetching objects
s3:PutObjectRequired for write operations. Allows writing objects
glue:GetCatalogRequired. Retrieve metadata about the specified catalog.
glue:GetDatabasesRequired. List the databases available in the current catalog.
glue:GetDatabaseRequired. Retrieve metadata about the specified database.
glue:GetTableRequired. Retrieve metadata about the specified table.
glue:GetTablesRequired. List the tables available in the current database.
glue:UpdateTableRequired for write operations. Commits new table snapshots.

ORC Data Files

Spice reads Glue tables whose InputFormat is ORC (org.apache.hadoop.hive.ql.io.orc.OrcInputFormat), with Hive partitioning enabled. Hive and Spark often write ORC data files without an extension, such as 000000_0, so Spice reads extensionless objects as well as .orc objects. It skips zero-byte objects, such as S3 folder markers, job-marker files such as _SUCCESS, _committed_*, and .crc files, and objects under a _temporary staging path.

Write Support

This connector supports writing data to Glue-managed Iceberg tables using SQL INSERT INTO statements. Writes are currently append-only: inserted data is added as new data files and registered through a new Iceberg table snapshot. Schema validation ensures inserted data matches the target table schema.

To enable writes, set access: read_write on the dataset:

datasets:
  - from: glue:tpch.lineitem
    name: lineitem
    access: read_write
    params:
      glue_region: us-east-1
-- Insert with values
INSERT INTO lineitem (l_orderkey, l_partkey, l_quantity)
VALUES (1, 100, 5.0);

-- Insert from another table
INSERT INTO lineitem
SELECT * FROM staging_lineitem;

Inserting into partitioned Iceberg tables is supported. UPDATE and DELETE operations are not currently supported.

Write operations require s3:PutObject permission on the target S3 bucket and glue:UpdateTable permission to commit the new table snapshot to the Glue Data Catalog, in addition to the read permissions listed above. For more details, see Data Ingestion.

Limitations

Cookbook