# SQL analytics with DuckDB

Queries the `bronze` datasets (`users.csv`, `orders.csv`) stored on S3, converts them to Parquet and exposes a Python report.

## Layout

```text
scripts/duckdb_lab.sh                  entry point
sql/00_bronze.sql                      read the raw CSV files
sql/01_load_checks.sql                 load tables and data quality checks
sql/02_analytics.sql                   aggregations, joins, windows, pivot
sql/03_exercises.sql                   the five exercises
sql/04_parquet.sql                     Parquet export and Hive partitioning
sql/05_large.sql                       CSV to Parquet at scale
src/<package>/orders_report.py         Python report
```

## Setup

```bash
uv add duckdb
```

Declare the command in `[project.scripts]` of `pyproject.toml`:

```toml
orders-report = "<package>.orders_report:main"
```

## Usage

```bash
chmod +x scripts/duckdb_lab.sh
./scripts/duckdb_lab.sh all
```

Steps can be run separately: `setup`, `queries`, `large`, `benchmark`, `report`, `cleanup`.

The bucket is read from `LAB_BUCKET_NAME` (or `KUBERNETES_NAMESPACE`). `BUCKET_URI` overrides it, for example with a local directory.

```bash
uv run orders-report
uv run orders-report -p cookie
```
