Json Schema | -Redshift/Postgres Type | +Redshift Type |
app_id | +... | +unstruct_event_com_acme_button_press_1 | +contexts_com_acme_product_1 | +
---|---|---|---|
website | +... | +data for your custom button_press event (as {props.eventType}) |
+data for your custom product entities (as {props.entitiesType}) |
+
REPEATED RECORD
}/>
+
+:::tip
+
+Check this [guide on querying](/docs/destinations/warehouses-lakes/querying-data/index.md?warehouse=bigquery) Snowplow data.
+
+:::
diff --git a/docs/destinations/warehouses-lakes/databricks/index.md b/docs/destinations/warehouses-lakes/databricks/index.md
new file mode 100644
index 000000000..f080234bd
--- /dev/null
+++ b/docs/destinations/warehouses-lakes/databricks/index.md
@@ -0,0 +1,137 @@
+---
+title: "Databricks"
+sidebar_position: 20
+description: "Send Snowplow data to Databricks for analytics and data processing"
+---
+
+```mdx-code-block
+import SetupInstructions from '../_setup-instructions.mdx';
+import HowLoadingWorks from '../_how-loading-works.mdx';
+import SingleTableFormat from '../_single-table-format.mdx';
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+```
+
+:::info Cloud availability
+
+The Databricks integration is available for Snowplow pipelines running on **AWS**, **Azure** and **GCP**.
+
+:::
+
+The Snowplow Databricks integration allows you to load enriched event data (as well as [failed events](/docs/fundamentals/failed-events/index.md)) into your Databricks environment for analytics, data modeling, and more.
+
+Depending on the cloud provider for your Snowplow pipeline, there are different options for this integration:
+
+| Integration | AWS | Azure | GCP | Failed events support |
+| ----------- |:---:|:-----:|:---:|:---------------------:|
+| Direct, batch-based ([RDB Loader](/docs/api-reference/loaders-storage-targets/snowplow-rdb-loader/index.md)) | :white_check_mark: | :x: | :x: | :x: |
+| Via Delta Lake ([Lake Loader](/docs/api-reference/loaders-storage-targets/lake-loader/index.md)) | :x:* | :white_check_mark: | :white_check_mark: | :white_check_mark: |
+| _Early release:_ Streaming / Lakeflow ([Streaming Loader](/docs/api-reference/loaders-storage-targets/databricks-streaming-loader/index.md)) | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
+
+_*Delta+Databricks combination is currently not supported for AWS pipelines. The loader uses DynamoDB tables for mutually exclusive writes to S3, a feature of Delta. Databricks, however, does not support this (as of September 2025). This means that it’s not possible to alter the data via Databricks (e.g. to run `OPTIMIZE` or to delete PII)._
+
+## What you will need
+
+Connecting to a destination always involves configuring cloud resources and granting permissions. It's a good idea to make sure you have sufficient priviliges before you begin the setup process.
+
+:::tip
+
+The list below is just a heads up. The Snowplow Console will guide you through the exact steps to set up the integration.
+
+:::
+
+Keep in mind that you will need to be able to do a few things.
+
+ARRAY
of STRUCT
>}/>
+
+:::tip
+
+Check this [guide on querying](/docs/destinations/warehouses-lakes/querying-data/index.md?warehouse=databricks) Snowplow data.
+
+:::
diff --git a/docs/destinations/warehouses-lakes/delta/index.md b/docs/destinations/warehouses-lakes/delta/index.md
new file mode 100644
index 000000000..d5e04c847
--- /dev/null
+++ b/docs/destinations/warehouses-lakes/delta/index.md
@@ -0,0 +1,110 @@
+---
+title: "Delta Lake"
+sidebar_position: 70
+description: "Send Snowplow data to Delta Lake for analytics and data processing"
+---
+
+```mdx-code-block
+import SetupInstructions from '../_setup-instructions.mdx';
+import HowLoadingWorks from '../_how-loading-works.mdx';
+import SingleTableFormat from '../_single-table-format.mdx';
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+```
+
+:::info Cloud availability
+
+The Delta Lake integration is available for Snowplow pipelines running on **AWS**, **Azure** and **GCP**.
+
+:::
+
+Delta Lake is an open table format for data lake architectures. The Snowplow Delta integration allows you to load enriched event data (as well as [failed events](/docs/fundamentals/failed-events/index.md)) into Delta tables in your data lake for analytics, data modeling, and more.
+
+Data in Delta Lake can be consumed using various tools and products, for example:
+
+* Amazon Athena
+* Apache Spark or Amazon EMR
+* Databricks*
+* Microsoft Synapse Analytics
+* Microsoft Fabric
+
+_*Delta+Databricks combination is currently not supported for AWS pipelines. The loader uses DynamoDB tables for mutually exclusive writes to S3, a feature of Delta. Databricks, however, does not support this (as of September 2025). This means that it’s not possible to alter the data via Databricks (e.g. to run `OPTIMIZE` or to delete PII)._
+
+## What you will need
+
+Connecting to a destination always involves configuring cloud resources and granting permissions. It's a good idea to make sure you have sufficient priviliges before you begin the setup process.
+
+:::tip
+
+The list below is just a heads up. The Snowplow Console will guide you through the exact steps to set up the integration.
+
+:::
+
+Keep in mind that you will need to be able to:
+
+ARRAY
of STRUCT
>}/>
+
+:::tip
+
+Check this [guide on querying](/docs/destinations/warehouses-lakes/querying-data/index.md?warehouse=databricks) Snowplow data. (You will need a query engine such as Spark SQL or Databricks to query Delta tables.)
+
+:::
diff --git a/docs/destinations/warehouses-lakes/iceberg/index.md b/docs/destinations/warehouses-lakes/iceberg/index.md
new file mode 100644
index 000000000..5b9753ec6
--- /dev/null
+++ b/docs/destinations/warehouses-lakes/iceberg/index.md
@@ -0,0 +1,80 @@
+---
+title: "Iceberg"
+sidebar_position: 60
+description: "Send Snowplow data to Iceberg data lakes for analytics and data processing"
+---
+
+```mdx-code-block
+import SetupInstructions from '../_setup-instructions.mdx';
+import HowLoadingWorks from '../_how-loading-works.mdx';
+import SingleTableFormat from '../_single-table-format.mdx';
+import Tabs from '@theme/Tabs';
+import TabItem from '@theme/TabItem';
+```
+
+:::info Cloud availability
+
+The Iceberg integration is available for Snowplow pipelines running on **AWS** only.
+
+:::
+
+Apache Iceberg is an open table format for data lake architectures. The Snowplow Iceberg integration allows you to load enriched event data (as well as [failed events](/docs/fundamentals/failed-events/index.md)) into Iceberg tables in your data lake for analytics, data modeling, and more.
+
+Iceberg data can be consumed using various tools and products, for example:
+* Amazon Athena
+* Amazon Redshift Spectrum
+* Apache Spark or Amazon EMR
+* Snowflake
+* ClickHouse
+
+We currently only support the Glue Iceberg catalog.
+
+## What you will need
+
+Connecting to a destination always involves configuring cloud resources and granting permissions. It's a good idea to make sure you have sufficient priviliges before you begin the setup process.
+
+:::tip
+
+The list below is just a heads up. The Snowplow Console will guide you through the exact steps to set up the integration.
+
+:::
+
+Keep in mind that you will need to be able to:
+
+* Specify your AWS account ID
+* Provide an S3 bucket and an AWS Glue database
+* Create an IAM role with the following permissions:
+ * For the S3 bucket:
+ * `s3:ListBucket`
+ * `s3:GetObject`
+ * `s3:PutObject`
+ * `s3:DeleteObject`
+ * For the Glue database:
+ * `glue:CreateTable`
+ * `glue:GetTable`
+ * `glue:UpdateTable`
+* Schedule a regular job to optimize the lake
+
+## Getting started
+
+You can add an Iceberg destination through the Snowplow Console. (For self-hosted customers, please refer to the [Loader API reference](/docs/api-reference/loaders-storage-targets/lake-loader/index.md) instead.)
+
+ARRAY
of STRUCT
>}/>
+
+:::tip
+
+Check this [guide on querying](/docs/destinations/warehouses-lakes/querying-data/index.md?warehouse=databricks) Snowplow data. (You will need a query engine such as Spark SQL or Snowflake to query Iceberg tables.)
+
+:::
diff --git a/docs/destinations/warehouses-lakes/index.md b/docs/destinations/warehouses-lakes/index.md
index b9c61051a..fba95247f 100644
--- a/docs/destinations/warehouses-lakes/index.md
+++ b/docs/destinations/warehouses-lakes/index.md
@@ -5,99 +5,17 @@ sidebar_label: "Warehouses and lakes"
description: "An overview of the available options for storing Snowplow data in data warehouses and lakes"
---
-```mdx-code-block
-import Tabs from '@theme/Tabs';
-import TabItem from '@theme/TabItem';
-```
-
Data warehouses and data lakes are primary destinations for Snowplow data. For other options, see the [destinations overview](/docs/fundamentals/destinations/index.md) page.
-## How loading works
-
-The Snowplow data loading process is engineered for large volumes of data. In addition, for each data warehouse, our loader applications ensure the best representation of Snowplow events. That includes [automatically adjusting the database types](/docs/destinations/warehouses-lakes/schemas-in-warehouse/index.md) for [self-describing events](/docs/fundamentals/events/index.md#self-describing-events) and [entities](/docs/fundamentals/entities/index.md) according to their [schemas](/docs/fundamentals/schemas/index.md).
-
-:::tip
-
-For more details on the loading flow, pick a destination below and follow the link in the _Loader_ column, where you will find additional information and diagrams.
-
-:::
-
-## Data warehouse loaders
-
-:::note Cloud
-
-The cloud selection is for where your Snowplow pipeline runs. The warehouse itself can be deployed in any cloud.
-
-:::
-
-VARIANT
object>} entitiesType={<>a VARIANT
array>}/>
+
+:::tip
+
+Check this [guide on querying](/docs/destinations/warehouses-lakes/querying-data/index.md?warehouse=snowflake) Snowplow data.
+
+:::
diff --git a/docs/fundamentals/canonical-event/index.md b/docs/fundamentals/canonical-event/index.md
index 6243ce4c1..857e0e5c2 100644
--- a/docs/fundamentals/canonical-event/index.md
+++ b/docs/fundamentals/canonical-event/index.md
@@ -359,7 +359,7 @@ For more information on this topic please check out the relevant [Tracking Docum
For each type of self-describing event, there will be a dedicated column (or table, in case of Redshift and Postgres) that holds the event-specific fields.
-See [querying data](/docs/destinations/warehouses-lakes/querying-data/index.md#self-describing-events) for more details on the structure and how to query it in different warehouses. You might also want to check [how schema definitions translate to the warehouse](/docs/destinations/warehouses-lakes/schemas-in-warehouse/index.md).
+See [querying data](/docs/destinations/warehouses-lakes/querying-data/index.md#self-describing-events) for more details on the structure and how to query it in different warehouses. You might also want to check [how schema definitions translate to the warehouse](/docs/api-reference/loaders-storage-targets/schemas-in-warehouse/index.md).
For more information on this topic please check out the relevant [Tracking Documentation](/docs/events/custom-events/self-describing-events/index.md).
@@ -369,7 +369,7 @@ For more information on this topic please check out the relevant [Tracking Docum
For each type of entity, there will be a dedicated column (or table, in case of Redshift and Postgres) that holds entity-specific fields. Note that an event can have any number of entities attached, including multiple entities of the same type. For this reason, the data inside the entity columns is an array.
-See [querying data](/docs/destinations/warehouses-lakes/querying-data/index.md#entities) for more details on the structure and how to query it in different warehouses. You might also want to check [how schema definitions translate to the warehouse](/docs/destinations/warehouses-lakes/schemas-in-warehouse/index.md).
+See [querying data](/docs/destinations/warehouses-lakes/querying-data/index.md#entities) for more details on the structure and how to query it in different warehouses. You might also want to check [how schema definitions translate to the warehouse](/docs/api-reference/loaders-storage-targets/schemas-in-warehouse/index.md).
For more information on this topic please check out the relevant [Tracking Documentation](/docs/events/custom-events/context-entities/index.md).
diff --git a/docs/modeling-your-data/modeling-your-data-with-dbt/package-features/passthrough-fields/index.md b/docs/modeling-your-data/modeling-your-data-with-dbt/package-features/passthrough-fields/index.md
index aa9742d91..d2bd3ae01 100644
--- a/docs/modeling-your-data/modeling-your-data-with-dbt/package-features/passthrough-fields/index.md
+++ b/docs/modeling-your-data/modeling-your-data-with-dbt/package-features/passthrough-fields/index.md
@@ -59,7 +59,7 @@ A more useful case for the SQL block is to extract a specific field from an enti
**Step 1. Making fields available in the events table**
-For Redshift and Postgres users, entities and self describing events are not part of the standard events table. Instead, each type of entity/sde is in its own table. The table name and the fields in the table will be determined by the entity’s schema. See [how schemas translate to the warehouse](/docs/destinations/warehouses-lakes/schemas-in-warehouse/index.md) for more details.
+For Redshift and Postgres users, entities and self describing events are not part of the standard events table. Instead, each type of entity/sde is in its own table. The table name and the fields in the table will be determined by the entity’s schema. See [how schemas translate to the warehouse](/docs/api-reference/loaders-storage-targets/schemas-in-warehouse/index.md) for more details.
In order for you to use fields from there through passthrough fields, you would need to first make sure that those fields are part of the [events this run](/docs/modeling-your-data/modeling-your-data-with-dbt/package-mechanics/this-run-tables/index.md#events-this-run) table. Any custom entities or self-describing events can be added to this table (which get de-duped by taking the earliest `collector_tstamp` record) by using the `snowplow__entities_or_sdes` variable in our package. See [modeling entities](/docs/modeling-your-data/modeling-your-data-with-dbt/package-features/modeling-entities/index.md) for more information and examples.
diff --git a/static/_redirects b/static/_redirects
index 774ac1b80..5d61400ef 100644
--- a/static/_redirects
+++ b/static/_redirects
@@ -403,3 +403,4 @@ docs/understanding-tracking-design/managing-data-structures-with-data-structures
# Removing loading-process in favor of individual loader reference pages
/docs/destinations/warehouses-lakes/loading-process/* /docs/destinations/warehouses-lakes/ 301
+/docs/destinations/warehouses-lakes/schemas-in-warehouse/* /docs/api-reference/loaders-storage-targets/schemas-in-warehouse/:splat 301