---
title: "Data Lakehouse Architecture: Layers and How to Build One"
canonical: "https://www.owox.com/blog/articles/data-lakehouse-architecture"
updated: "2026-10-15"
---

# Data lakehouse architecture: the layers, open table formats and how to build one

What a data lakehouse is, its five layers, how five cloud engines provide open table formats, a real Iceberg table measured, and a layered build traced with SQL.

[Data Analytics](/blog/topics/data-analytics) · Updated October 15, 2026 · [Ievgen Krasovytskyi](/team/ievgen-krasovytskyi) · 13 min read

![Data lakehouse architecture: the layers, open table formats and how to build one](https://cdn.owox.com/www/content-marketing-article/data-lakehouse-architecture/thumbnail/1.png/public)

**A data lakehouse keeps tables as open-format files in object storage you own and adds a table-format layer that gives those files warehouse behaviour: transactions, schema enforcement and versions that several engines can query through a shared catalog.** Its architecture has five layers – storage, table format, catalog, compute and consumption – and it is usually built in medallion stages: raw (bronze), cleaned (silver) and report-ready (gold).

Most guides stop at the diagram. The analyst who reports from a lakehouse gets asked something else: did the data refresh, and why is this week’s number off? So this guide also builds a real Iceberg table, traces a layered build on real tables and shows where the freshness check belongs – one layer lower than most teams put it.

**_Note:_** _Originally published in July 2024. Fully updated in October 2026 with layers as the vendors name them, a side-by-side of how five cloud engines provide the table format, a real Apache Iceberg table we built and measured, and a layered build traced on our demo warehouse with the code we ran._

## What a data lakehouse is

A data lake is cheap files in object storage: anything can land there, but nothing stops two jobs from writing the same file at once or a column from changing type overnight. A data warehouse manages its tables properly, but keeps them in its own storage, readable by its own engine. **A lakehouse puts the warehouse’s table management on top of the lake’s files.**

The vendors’ own definitions agree on the idea. Databricks’ documentation (October 2026): “A data lakehouse is a data management system that combines the benefits of data lakes and data warehouses.” AWS (October 2026) adds what that buys: “analytics capabilities such as structuring, governance, and reporting.”

|  | Data lake | Data warehouse | Data lakehouse |
| --- | --- | --- | --- |
| Where data sits | Object storage | Storage the warehouse manages | Object storage you own |
| Format | Any files | The warehouse’s internal format | Open table formats over Parquet files |
| Transactions and schema | Not by default | Yes | Yes, from the table format |
| Who can query | Any engine, each reading files its own way | The warehouse’s engine | Engines that read the format and share its catalog |

For the longer comparison of the three, see [databases vs data warehouses vs data lakes](/blog/articles/database-data-warehouse-data-lake).

## The five layers of a lakehouse architecture

Published lists disagree on the names. The five below follow the vendors’ documentation, and every example comes from it.

| Layer | What it does | Examples |
| --- | --- | --- |
| 1\. Storage | Holds the data as files in buckets you control | Amazon S3 and S3 table buckets, customer-owned Google Cloud buckets; files in Apache Parquet |
| 2\. Table format (metadata) | Turns a folder of files into a table: transactions, schema, versions, time travel | Delta Lake, Apache Iceberg |
| 3\. Catalog and governance | Records which tables exist, where their metadata lives and who may read them | AWS Glue Data Catalog, Unity Catalog on Databricks, Snowflake as the catalog for its Iceberg tables |
| 4\. Compute | Engines that read and write the tables, scaled apart from storage | Apache Spark, Google BigQuery, Snowflake virtual warehouses, AWS Redshift, AWS Athena, Databricks SQL warehouses |
| 5\. Consumption | Where people use the results | SQL clients, BI dashboards, spreadsheets, notebooks, AI assistants |

**The table format is the layer that makes a lake a lakehouse.** Databricks describes its format, Delta Lake, as “an optimized storage layer that supports ACID transactions and schema enforcement”. Apache Iceberg does the same job; AWS’s Athena documentation lists what an engine can do with it: “read, time travel, write, and DDL queries on Apache Iceberg tables.”

Compute is separate on purpose: Apache Spark “runs on compute resources decoupled from storage” (Databricks). **Several engines can then work on one copy of a table**, the main reason to choose a lakehouse over a single warehouse.

Ingestion is not a layer here: it is how data arrives in layer 1, by [data connectors](/product/data-connectors) or pipelines.

## The Turning Point

OWOX Data Marts

See your first report built in real time. _15 minutes._

1.  Connect your data warehouse
2.  Pick your metrics
3.  Get a live Google Sheets report

In the time it takes to write a ticket. Then imagine never writing that ticket again.

[Book a Demo](/book-a-call)

We'll use your actual use case

## How each cloud engine provides the table-format layer

All five engines below work with Apache Iceberg tables; they differ in the native format, the catalog and write support. Every quote is from the vendor’s documentation, read on 15 October 2026.

| Engine | Feature | Where files live | Write | Catalog named in the docs |
| --- | --- | --- | --- | --- |
| Google BigQuery | Apache Iceberg managed tables | Customer-owned buckets | Yes, DML | – |
| Snowflake | Apache Iceberg tables | External cloud storage you manage | Yes, Snowflake-managed tables | Snowflake |
| AWS Redshift | Iceberg read and write | Amazon S3, S3 table buckets | Yes | AWS Glue Data Catalog |
| AWS Athena | Iceberg read, write, DDL | Amazon S3 | Yes | AWS Glue only |
| Databricks | Delta Lake, UniForm, managed Iceberg | Parquet data files | Yes | Unity Catalog |

### Google BigQuery

Google renamed the feature: “Apache Iceberg managed tables (formerly BigLake tables for Apache Iceberg in BigQuery) provide the foundation for building open-format lakehouses on Google Cloud.” They “offer the same fully managed experience as standard BigQuery tables, but store data in customer-owned storage buckets”, and they support “table mutations using GoogleSQL data manipulation language (DML)”. **The older option is read-only:** Apache Iceberg external tables give access “in a read-only format”.

### Snowflake

Snowflake’s documentation: “Apache Iceberg™ tables for Snowflake combine the performance and query semantics of typical Snowflake tables with external cloud storage that you manage.” With Snowflake as the catalog, a Snowflake-managed Iceberg table “provides full Snowflake platform support with read and write access.”

### AWS Redshift

“You can query Apache Iceberg tables cataloged in the AWS Glue Data Catalog with Amazon Redshift.” Writing arrived too: “you can create and write to Apache Iceberg tables stored in Amazon S3 and Amazon S3 table buckets”, on “both Amazon Redshift provisioned clusters and Amazon Redshift Serverless instances.” **Which compute runs the lake query depends on the node type:** “RG instance types and Redshift Serverless use their own compute to process data lake queries, while RA3 instance types use Redshift Spectrum.”

### AWS Athena

Athena “makes it easy to analyze data directly in Amazon Simple Storage Service (Amazon S3) using standard SQL”, and supports “read, time travel, write, and DDL queries on Apache Iceberg tables.” AWS pins the version, “Athena supports Apache Iceberg version 1.4.2”, and the catalog: “Only Iceberg tables created against the AWS Glue catalog based on specifications defined by the open source glue catalog implementation are supported from Athena.” [AWS Athena 101](/blog/articles/aws-athena-serverless-sql-engine-on-s3) covers the engine itself.

### Databricks lakehouse architecture

On Databricks, Delta Lake is the native table format, Apache Spark is the engine and Unity Catalog is the catalog. Two features open Delta tables to other engines. UniForm “automatically generates Iceberg metadata asynchronously alongside the Delta Lake metadata, without rewriting the Parquet data files.” And “Iceberg tables that you create in Unity Catalog are managed Iceberg tables”, with support for “versions 1, 2, and 3 of the Iceberg specification.” [What is Databricks](/blog/articles/what-is-databricks) explains the rest of the platform.

## A real Iceberg table: what the table-format layer does

To see what the table-format layer does on its own, we built an Apache Iceberg table and measured it from its metadata.

The setup: an Apple M4 Pro laptop; pyiceberg 0.8.1 as the writer, with a SQL catalog (SQLite) and a local-filesystem warehouse; pyarrow 18.1.0; DuckDB 1.1.3 with its iceberg extension as a second engine. The data is synthetic: 2,000,000 sales rows, 17 columns, one year (2025-10-15 to 2026-10-14), six stores, sorted by sale time. All runs are from 15 October 2026. The core of the script:

```
cat = SqlCatalog('local',
    uri=f'sqlite:///{W}/catalog.db',
    warehouse=f'file://{W}')
cat.create_namespace('demo')

a = cat.create_table('demo.sales_flat',
    schema=tbl.schema)
a.append(tbl)  # A: unpartitioned

b = cat.create_table('demo.sales_by_day',
    schema=tbl.schema)
with b.update_spec() as u:
    u.add_field('sale_date', DayTransform(),
        'sale_day')
b.append(tbl)  # B: partitioned by day

day = EqualTo('sale_date', '2026-09-30')
fs = list(b.scan(row_filter=day).plan_files())
```

`plan_files()` returns the data files Iceberg’s metadata says a query must open, before any data is read.

### Partitioning: one-day reads 118x smaller, the table 3x bigger

| Table | Files | Bytes on disk | Planned for `sale_date = '2026-09-30'` |
| --- | --- | --- | --- |
| Unpartitioned | 1 | 24,698,581 | 1 file, 24,698,581 bytes (all of it) |
| Partitioned by `day(sale_date)` | 365 | 74,875,690 | 1 file, 209,091 bytes |
| Same partitioned table, `store_id = 'ST-02'` | – | – | 365 files, 74,875,690 bytes (all of it) |

**Partitioning by day made the one-day read 118x smaller and the table 3.0x bigger on disk:** 365 small files compress worse than one sorted file. A filter on any other column now opens all 365 files: 3x the bytes of the unpartitioned table. **A partition spec is a bet on how reports will filter.** Partition on the one column most of them filter by, usually the date, and check the planned files for a typical query before the table grows.

### Snapshots and time travel

Every write to an Iceberg table creates a snapshot. We deleted one day and compared:

```
s1 = b.current_snapshot().snapshot_id
b.delete(delete_filter=EqualTo(
    'sale_date', '2026-10-14'))
b.scan().to_arrow().num_rows  # 1,997,213
b.scan(snapshot_id=s1).to_arrow().num_rows
    # 2,000,000
```

The table now has two snapshots, an append and a delete. **The current scan returns 1,997,213 rows; a scan at the first snapshot still returns 2,000,000.** That is how a bad load gets undone. The price: old files stay on disk until someone expires the snapshots, and frequent small loads grow that history fast, as our [500-append test](/blog/articles/data-lakehouse-use-cases) shows.

### The second engine could not read it

Then we pointed DuckDB 1.1.3 at the same table:

```
INSTALL iceberg; LOAD iceberg;
-- 1. the current metadata file
SELECT count(*) FROM iceberg_scan(
  '/…/sales_by_day/metadata/<n>.metadata.json');
-- 2. the table folder
SELECT count(*) FROM iceberg_scan(
  '/…/demo.db/sales_by_day',
  allow_moved_paths = true);
```

Both failed. Given the metadata file, DuckDB could not open the manifest list, because the writer had recorded it as a `file://` URI: `IO Error: Cannot open file "file:///…/snap-…avro"`. Given the folder, it looked for `metadata/version-hint.text`, which a writer using a SQL catalog does not create: `Cannot open file … version-hint.text`. pyiceberg read the same table without trouble (1,997,213 rows). To be exact about what failed: the reader was DuckDB 1.1.3, a late-2024 release, and the writer pyiceberg 0.8.1 with a SQLite catalog. Newer versions may behave differently; the lesson does not depend on them.

**An open table format does not, by itself, make a table readable by every engine.** The engines must share a catalog and agree on how file paths are handled. Hence the rule for step 1 of a build: **choose the catalog first,** then write one test table with the engine that will write and read it back with every engine that will read, before the first production table exists. Each vendor above names its own answer: the AWS Glue Data Catalog for Redshift, AWS Glue only for Athena, Unity Catalog on Databricks, Snowflake for its managed Iceberg tables.

## The medallion stages, traced on real tables

The medallion stages are what you build on top of the table format. We traced one report through them on our demo warehouse.

The setup, so you can judge it: these tables are in Google BigQuery’s native storage, not in Iceberg files, and `owox-demo` is synthetic data behind the \[Demo\] E-commerce project. The report is spend by ad platform for September 2026. All runs are from 15 October 2026.

| Stage | What it holds | Rows | Last day |
| --- | --- | --- | --- |
| Raw (bronze) | 7 connector tables, one per ad platform, each in its own schema | 143,230 | 2026-10-10 in all 7 |
| Modelled (silver) | `ad_performance`: one row per date, source, medium and campaign, in one schema | 15,466 | 2026-10-10 |
| Report (gold) | Spend by source, September 2026 | 7 | – |

The raw tables keep what each platform sends. X holds 36,504 rows, TikTok 27,378, Facebook 18,380, LinkedIn, Microsoft and Reddit 18,252 each, Google 6,212. **Seven tables, seven shapes:** the date column alone is called `date_start`, `dateRangeStart`, `TimePeriod`, `stat_time_day` or `date`, and X and Google store it as text, not as a date.

The modelled stage is the SQL of the demo’s Unified Ad Spend Data Mart. Its job is to give every platform one set of column names and one set of types, so the report stage can be a plain `GROUP BY`. The count of the modelled stage:

```
SELECT
  COUNT(*) AS rows_modelled,
  COUNT(DISTINCT source) AS sources,
  MAX(date) AS last_day
FROM `owox-demo.ecommerce.ad_performance`
```

It returned 15,466 rows, 7 sources, last day 2026-10-10. The report stage:

```
SELECT source,
  ROUND(SUM(spend), 2) AS spend
FROM `owox-demo.ecommerce.ad_performance`
WHERE date BETWEEN '2026-09-01'
  AND '2026-09-30'
GROUP BY source
ORDER BY spend DESC
```

Seven rows. **143,230 raw rows became 15,466 modelled rows and then 7 report rows.**

### The freshness check belongs in the raw layer

The same day, the shop’s orders passed every row-level check but ran to 2026-10-15, while ad spend stopped at 2026-10-10 – the go-live checks are in the [data warehouse implementation guide](/blog/articles/data-warehouse-implementation-guide). **Five days of orders had no spend beside them,** so any CAC or ROAS that includes this week divides by zero spend for those days.

The trace shows where the gap started. The modelled stage ends on 2026-10-10, and so does every raw table, so **no transformation downstream could have fixed it, and a check on the report would only have found it after someone read the number.** The check belongs where the gap starts:

```
SELECT 'facebook' AS source,
  COUNT(*) AS rows_raw,
  MAX(date_start) AS last_day
FROM `owox-demo.ads_owox.facebook_ads_ad_account_insights`
UNION ALL
SELECT 'google', COUNT(*),
  MAX(SAFE_CAST(date AS DATE))
FROM `owox-demo.ads_owox.google_ads_ad_groups_stats`
UNION ALL
SELECT 'linkedin', COUNT(*),
  MAX(dateRangeStart)
FROM `owox-demo.ads_owox.linkedin_ads_ad_analytics`
UNION ALL
SELECT 'microsoft', COUNT(*), MAX(TimePeriod)
FROM `owox-demo.ads_owox.microsoft_ads_ad_performance_report`
UNION ALL
SELECT 'reddit', COUNT(*), MAX(date)
FROM `owox-demo.ads_owox.reddit_ads_report`
UNION ALL
SELECT 'tiktok', COUNT(*), MAX(stat_time_day)
FROM `owox-demo.ads_owox.tiktok_ads_ad_insights`
UNION ALL
SELECT 'x', COUNT(*),
  MAX(SAFE_CAST(date AS DATE))
FROM `owox-demo.ads_owox.x_ads_stats`
ORDER BY rows_raw DESC
```

All seven rows came back with `last_day` 2026-10-10. Note the `SAFE_CAST` for Google and X: the text dates are a silver-stage problem that the raw-stage check has to work around.

The check processed 1.3 MB and was billed 73.4 MB, seven tables times Google’s 10 MB per-table minimum; [how to choose a data warehouse](/blog/articles/choose-right-data-warehouse) covers what that floor does to small queries. [How fresh data needs to be](/blog/articles/data-freshness-and-business-decision-making) covers choosing the threshold, and [data quality checks on every Data Mart](/blog/articles/data-quality-checks-data-mart) covers the row-level checks that passed here.

## How to build a data lakehouse

A build is a sequence of stages, and **each stage needs a check that tells you it is done**, not a date on a plan. The order below follows the layers from the bottom up.

| Step | What you do | Done when |
| --- | --- | --- |
| 1\. Choose the catalog and the table format | One catalog that owns the tables; a format every engine you need can write | A test table written by the writing engine reads back in every engine your reports use (ours failed here) |
| 2\. Land raw data (bronze) | One table per source, as delivered, append only | The freshness query returns the expected last day for every source |
| 3\. Conform (silver) | One schema: names, types (cast text dates), currencies | Totals per source match the raw stage; no NULL dates after the cast |
| 4\. Set the partition spec | Partition on the one column most reports filter by | A typical one-day query plans one partition’s files, not the table |
| 5\. Build report-ready tables (gold) | The joins and aggregates reports read | Report totals equal silver totals for the same filter |
| 6\. Schedule maintenance | Compaction and snapshot expiry as jobs | File count and metadata size stay flat week to week |
| 7\. Govern access | Grants in the catalog | Business users can read gold tables only |
| 8\. Connect consumption | Point BI, spreadsheets and AI tools at gold | Every report names the gold table it reads |

Steps 3 and 5 are where the [data model](/product/data-modeling) is decided: which entities exist, and how they join. Step 2 is where the stale number in the trace started. Step 6 is the one teams forget: in our small-files test, 500 micro-batch appends left more metadata than data until a compaction ran, measured in [data lakehouse use cases](/blog/articles/data-lakehouse-use-cases).

## When not to build one

A lakehouse earns its extra layers when several engines must share the same tables, when a real share of your data is files, images, logs or free text, or when you need the data in your own buckets in an open format. If none of these holds, a warehouse with raw, modelled and report datasets gives you the same medallion stages with fewer layers to run; our whole demo analytics estate, for example, is under 3.5 GB and entirely tabular, as [data lakehouse use cases](/blog/articles/data-lakehouse-use-cases) shows. For the warehouse route, see the [data warehouse implementation guide](/blog/articles/data-warehouse-implementation-guide).

## Where OWOX Data Marts sits

[OWOX Data Marts](https://www.owox.com/app-signup) works on the report-ready stage. A Data Mart is a dataset defined with SQL, a table or a view in your [data storage](/data-storages) – Google BigQuery, Snowflake, AWS Redshift, AWS Athena or Databricks – plus its description, owner and relationships to other Data Marts. It does not replace any lakehouse layer: the files, table format, catalog and compute stay yours. The modelled stage in the trace above is one such definition.

## Your New Normal

Turn your data into decisions.

Governed data marts give you the clean foundation ML needs to actually work.

*   No AI hallucinations
*   Analyst-governed definitions
*   Every number traces to SQL

[Get started free](https://www.owox.com/app-signup)

## FAQ

## Frequently Asked Questions

What technologies are used to build a data lakehouse?

Object storage holds the files, usually Apache Parquet. A table format adds transactions and schema: Delta Lake or Apache Iceberg. A catalog such as AWS Glue Data Catalog or Unity Catalog tracks the tables. Engines such as Apache Spark read and write them. Google BigQuery, Snowflake, AWS Redshift, AWS Athena and Databricks all work with Iceberg tables, according to their documentation in October 2026.

When is a data lakehouse the right choice, and when is it not?

It fits when several engines must share the same tables, when a real share of your data is files, images, logs or free text, or when you need data in your own buckets in an open format. If none applies, a warehouse with raw, modelled and report datasets gives the same stages with fewer layers. Our whole demo analytics estate is under 3.5 GB and entirely tabular. See [data lakehouse use cases](https://www.owox.com/blog/articles/data-lakehouse-use-cases).

What are the layers of a data lakehouse architecture?

Five: storage (files in object storage you control), table format (Delta Lake or Apache Iceberg, which add transactions, schema and versions), catalog and governance (which tables exist and who may read them), compute (engines such as Spark or a SQL warehouse, scaled apart from storage) and consumption (BI, spreadsheets, notebooks, AI assistants). On top, teams build medallion stages: raw (bronze), cleaned (silver) and report-ready (gold).

How does a data lakehouse help analytics teams?

It lets several engines work on one copy of a table: Spark for machine learning, a SQL engine for reporting. For reporting the gain comes from the layered build – raw, modelled and report-ready stages – with a check at each stage. Put the freshness check on the raw tables: in our demo trace a five-day gap in ad spend started there, and no later transformation could fix it. See [data freshness](https://www.owox.com/blog/articles/data-freshness-and-business-decision-making).

What are the main challenges of implementing a data lakehouse?

Three come up first. Choosing the catalog: in our test a second engine, DuckDB, could not read an Iceberg table another library wrote, because they disagreed on catalog and file paths. Conforming raw tables that arrive in different shapes – in our demo, seven ad platforms named the date column five ways and two stored it as text. And the partition spec: partitioning by day made one-day reads 118x smaller but the table 3x bigger.

What is a data lakehouse, and how is it different from a data lake or a data warehouse?

A data lakehouse keeps tables as open-format files in object storage and adds a table-format layer that gives them warehouse behaviour: transactions, schema enforcement and versions. A data lake stores files without that management. A data warehouse manages tables in its own storage for its own engine. In a lakehouse several engines can query the same tables, provided they share a catalog. More in [databases vs warehouses vs lakes](https://www.owox.com/blog/articles/database-data-warehouse-data-lake).

## Who wrote this

![Ievgen Krasovytskyi](https://cdn.owox.com/www/webflow/68404586b341508a789a4aa5_.png/public)

[Ievgen Krasovytskyi](/team/ievgen-krasovytskyi) · Head of Marketing

Ievgen Krasovytskyi is the Head of Marketing at OWOX, leading strategy across content, SEO, product marketing, and AI-powered automation. With deep expertise in analytics infrastructure, data warehouses, and marketing technology, he builds systems that connect marketing performance to business outcomes. Ievgen writes about SaaS growth, analytics workflows, and the future of AI in marketing operations.

[LinkedIn](https://www.linkedin.com/in/ievgen-krasovytskyi-a38a1253/) · [All articles](/team/ievgen-krasovytskyi)

[Data Analytics](/blog/topics/data-analytics)

## Related articles

[Data Quality · What is Data Freshness? How to Measure It and How Fresh a Decision Needs · October 14, 2026](/blog/articles/data-freshness-and-business-decision-making)

[Data Analytics · What is Data Analytics? How Data Becomes an Insight You Can Trust · October 14, 2026](/blog/articles/what-is-data-analytics)

[Google BigQuery · BigQuery visualization tools: Data Studio, Looker, Sheets, Power BI, Tableau and Excel compared · October 16, 2026](/blog/articles/bigquery-visualization-tools)

[See all articles →](/blog/articles)

## Book a call

You are booked. The invitation is on its way to , with the calendar invite and the meeting link.

[Reschedule](#)

[Cancel](#)

## Schedule a meeting

You are booked. The invitation is on its way to , with the calendar invite and the meeting link.

[Reschedule](#)

[Cancel](#)

## Links

Pages this page links to, on this site and on docs.owox.com. Where the page has a Markdown twin, its address follows the link.

- [Data Analytics](https://www.owox.com/blog/topics/data-analytics) — /blog/topics/data-analytics.md
- [Ievgen Krasovytskyi](https://www.owox.com/team/ievgen-krasovytskyi) — /team/ievgen-krasovytskyi.md
- [databases vs data warehouses vs data lakes](https://www.owox.com/blog/articles/database-data-warehouse-data-lake) — /blog/articles/database-data-warehouse-data-lake.md
- [data connectors](https://www.owox.com/product/data-connectors) — /product/data-connectors.md
- [Book a Demo](https://www.owox.com/book-a-call) — /book-a-call.md
- [AWS Athena 101](https://www.owox.com/blog/articles/aws-athena-serverless-sql-engine-on-s3) — /blog/articles/aws-athena-serverless-sql-engine-on-s3.md
- [What is Databricks](https://www.owox.com/blog/articles/what-is-databricks) — /blog/articles/what-is-databricks.md
- [500-append test](https://www.owox.com/blog/articles/data-lakehouse-use-cases) — /blog/articles/data-lakehouse-use-cases.md
- [data warehouse implementation guide](https://www.owox.com/blog/articles/data-warehouse-implementation-guide) — /blog/articles/data-warehouse-implementation-guide.md
- [how to choose a data warehouse](https://www.owox.com/blog/articles/choose-right-data-warehouse) — /blog/articles/choose-right-data-warehouse.md
- [How fresh data needs to be](https://www.owox.com/blog/articles/data-freshness-and-business-decision-making) — /blog/articles/data-freshness-and-business-decision-making.md
- [data quality checks on every Data Mart](https://www.owox.com/blog/articles/data-quality-checks-data-mart) — /blog/articles/data-quality-checks-data-mart.md
- [data model](https://www.owox.com/product/data-modeling) — /product/data-modeling.md
- [OWOX Data Marts](https://www.owox.com/app-signup)
- [data storage](https://www.owox.com/data-storages) — /data-storages.md
- [Data Analytics · What is Data Analytics? How Data Becomes an Insight You Can Trust · October 14,…](https://www.owox.com/blog/articles/what-is-data-analytics) — /blog/articles/what-is-data-analytics.md
- [Google BigQuery · BigQuery visualization tools: Data Studio, Looker, Sheets, Power BI, Tableau and…](https://www.owox.com/blog/articles/bigquery-visualization-tools) — /blog/articles/bigquery-visualization-tools.md
- [See all articles →](https://www.owox.com/blog/articles) — /blog/articles.md
