Introduction
Applications often keep operational data in PostgreSQL while analytical data lives in a data lake. Moving information between these environments usually requires an ETL or ELT pipeline.
That architecture works, but it introduces another system to operate, another data copy to manage, and another step between data creation and analysis.
Amazon Aurora PostgreSQL now provides capabilities for working with Apache Iceberg data stored in Amazon S3. This creates an alternative architecture where PostgreSQL-based applications can access lake data without first copying that data into database tables.
The idea is particularly useful for applications that need to combine operational PostgreSQL data with large analytical datasets stored in an open table format.
This article explains how Aurora PostgreSQL and Iceberg can fit together, what the architecture looks like, how queries work, and what developers should consider before using it in production.
What Is Apache Iceberg?
Apache Iceberg is an open table format designed for large analytical datasets.
Instead of treating a collection of files in object storage as an unstructured folder, Iceberg maintains table metadata that describes:
Table schema
Data files
Table snapshots
Partition information
Schema evolution
Historical table states
A simplified architecture looks like this:
Application
|
v
Amazon S3
|
+---- Parquet / Data Files
|
+---- Iceberg Metadata
The data remains in object storage rather than being copied into a traditional relational table.
Iceberg is commonly used with analytical engines because it provides database-like table management over data stored in a data lake.
Why Connect Aurora PostgreSQL to Iceberg?
Aurora PostgreSQL is commonly used for transactional workloads.
For example:
Customers
Orders
Payments
Subscriptions
Products
An S3-based data lake may contain much larger datasets:
Historical Orders
Application Events
Clickstream Data
IoT Data
Logs
Analytics Data
Without an integration between the two environments, developers may need to create a pipeline:
Aurora PostgreSQL
|
v
ETL / ELT Pipeline
|
v
S3 Data Lake
|
v
Iceberg Tables
The pipeline introduces additional processing and operational dependencies.
A direct query architecture can instead look like:
Application / SQL Client
|
v
Aurora PostgreSQL
|
v
Iceberg Data in S3
This does not eliminate every form of data movement or processing. It changes where the query is executed and avoids requiring a traditional ETL pipeline simply to make lake data accessible to PostgreSQL workloads.
Aurora PostgreSQL and Data Lake Queries
The integration is useful when a PostgreSQL application needs access to data that already exists in an S3-based lake.
For example, suppose an organization has:
Aurora
|
+---- customers
+---- orders
S3 + Iceberg
|
+---- five years of historical transactions
+---- customer activity
+---- application events
A reporting workflow may need to combine current operational information with historical data.
Instead of importing all historical records into Aurora, the application can query the relevant lake data through the supported integration.
The Basic Architecture
A simplified design is:
+----------------------+
| Aurora PostgreSQL |
+----------+-----------+
|
|
SQL / Query Layer
|
v
+----------------------+
| Apache Iceberg Data |
+----------+-----------+
|
v
Amazon S3
|
+-------------+-------------+
| |
Parquet Data Iceberg Metadata
The important distinction is that S3 remains the storage layer for the lake data.
Aurora provides a PostgreSQL-compatible environment from which the data can be accessed through the supported integration.
Why Avoid Traditional ETL?
ETL is not inherently bad.
It is useful when data needs to be transformed, cleaned, aggregated, or moved into a destination optimized for a particular workload.
The problem occurs when a pipeline exists only because the application cannot otherwise access the source data.
Consider this workflow:
S3
|
v
Extract
|
v
Transform
|
v
Load into Aurora
|
v
Query
If the dataset is large, the organization may need to manage:
Pipeline scheduling
Failure handling
Duplicate prevention
Data synchronization
Storage duplication
Schema changes
Operational monitoring
A query architecture can reduce some of these requirements when the analytical data can remain in S3.
Operational Data vs Lake Data
One important design decision is deciding which data belongs in Aurora and which belongs in the lake.
Aurora is well suited to transactional operations such as:
INSERT order
UPDATE customer
SELECT account
UPDATE payment status
Iceberg-based lake storage is better suited to large analytical datasets such as:
Analyze five years of transactions
Aggregate billions of events
Run historical reporting
Process large datasets
The architecture becomes:
Workload | Typical Location |
|---|---|
Transaction processing | Aurora PostgreSQL |
Current application state | Aurora PostgreSQL |
Large historical datasets | S3 + Iceberg |
Analytical data | S3 + Iceberg |
High-volume event history | S3 + Iceberg |
Operational queries | Aurora PostgreSQL |
The exact boundary depends on workload characteristics.
A Practical Example
Imagine an e-commerce application.
Aurora contains:
customers
orders
products
payments
The data platform stores historical transaction information in an Iceberg table:
historical_orders
A business application may need to answer:
Which customers placed orders in the last five years,
and what was their historical purchase activity?
Instead of importing all historical records into Aurora, the application can query the lake data where appropriate.
Conceptually:
SELECT
customer_id,
COUNT(*) AS order_count,
SUM(order_amount) AS total_spend
FROM historical_orders
WHERE order_date >= DATE '2021-01-01'
GROUP BY customer_id;
The exact SQL syntax and supported query behavior depend on the Aurora PostgreSQL version and the specific integration being used.
The architectural point is more important than the example: the historical dataset can remain in the lake rather than being copied into an operational database.
Why Iceberg Matters
The value is not simply that the data is stored in S3.
Iceberg provides table-level metadata and management capabilities on top of object storage.
A traditional folder of Parquet files can be difficult to manage as the dataset grows.
Iceberg adds concepts such as:
Table
|
+---- Schema
|
+---- Snapshot
|
+---- Data Files
|
+---- Metadata
This allows analytical systems to reason about the dataset as a table rather than as a collection of unrelated files.
Schema Evolution
Data structures change over time.
An order table might initially contain:
order_id
customer_id
amount
Later, the business may add:
Join the conversation! Your thoughts help the community grow.