Skip to content

SchemaVersion ​

The SchemaVersion resource allows you to manage AWS Glue SchemaVersions for your data catalog. This resource provides capabilities to define and update the schema for your datasets.

Minimal Example ​

Create a basic SchemaVersion with required properties and an optional adoption flag.

ts
import AWS from "alchemy/aws/control";

const schemaVersion = await AWS.Glue.SchemaVersion("basicSchemaVersion", {
  SchemaDefinition: JSON.stringify({
    type: "record",
    name: "User",
    fields: [
      { name: "id", type: "int" },
      { name: "name", type: "string" },
      { name: "email", type: "string" }
    ]
  }),
  Schema: {
    Name: "UserSchema",
    Version: 1
  },
  adopt: true // Allows for adoption of an existing schema resource
});

Advanced Configuration ​

Define a SchemaVersion with a more complex schema definition.

ts
const advancedSchemaVersion = await AWS.Glue.SchemaVersion("advancedSchemaVersion", {
  SchemaDefinition: JSON.stringify({
    type: "record",
    name: "Order",
    fields: [
      { name: "orderId", type: "string" },
      { name: "userId", type: "int" },
      { name: "items", type: {
        type: "array",
        items: {
          type: "record",
          name: "Item",
          fields: [
            { name: "productId", type: "string" },
            { name: "quantity", type: "int" },
            { name: "price", type: "float" }
          ]
        }
      }},
      { name: "orderDate", type: "string" }
    ]
  }),
  Schema: {
    Name: "OrderSchema",
    Version: 2
  }
});

Version Management ​

Create a new SchemaVersion to update an existing schema.

ts
const updatedSchemaVersion = await AWS.Glue.SchemaVersion("updatedSchemaVersion", {
  SchemaDefinition: JSON.stringify({
    type: "record",
    name: "Order",
    fields: [
      { name: "orderId", type: "string" },
      { name: "userId", type: "int" },
      { name: "items", type: {
        type: "array",
        items: {
          type: "record",
          name: "Item",
          fields: [
            { name: "productId", type: "string" },
            { name: "quantity", type: "int" },
            { name: "price", type: "float" }
          ]
        }
      }},
      { name: "orderDate", type: "string" },
      { name: "status", type: "string" } // New field added in this version
    ]
  }),
  Schema: {
    Name: "OrderSchema",
    Version: 3
  }
});