## ----include = FALSE----------------------------------------------------------
# Evaluate chunks only where the ducklake DuckDB extension is already
# installed. The probe never downloads anything, so building this vignette
# needs no network access.
ducklake_available <- ducklake::ducklake_extension_available()
knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.width = 7,
  fig.height = 4,
  eval = ducklake_available && requireNamespace("ggplot2", quietly = TRUE)
)
# Use a unique temp directory for this vignette to avoid conflicts during R CMD check
vignette_temp_dir <- file.path(tempdir(), "visualizing_your_lake_vignette")
dir.create(vignette_temp_dir, showWarnings = FALSE, recursive = TRUE)
knitr::opts_knit$set(root.dir = vignette_temp_dir)

## ----setup, message=FALSE-----------------------------------------------------
library(ducklake)
library(dplyr)

## ----create-datalake----------------------------------------------------------
# The ducklake extension only needs installing once per machine:
# install_ducklake()

attach_ducklake(
  ducklake_name = "lake_viz_demo",
  lake_path = vignette_temp_dir
)

fleet <- tibble(
  car_id = 1:5,
  model = c("Corolla", "Civic", "Model 3", "F-150", "Outback"),
  mileage = c(42000, 38000, 12000, 67000, 55000)
)

with_transaction(
  create_table(fleet, "fleet"),
  author = "Data Engineer",
  commit_message = "Initial fleet load"
)

## ----make-changes-------------------------------------------------------------
new_cars <- tibble(
  car_id = 6:7,
  model = c("CX-5", "Ioniq 5"),
  mileage = c(21000, 8000)
)

with_transaction(
  rows_insert(get_ducklake_table("fleet"), new_cars, by = "car_id"),
  author = "Fleet Manager",
  commit_message = "Add March arrivals"
)

serviced <- tibble(
  car_id = c(1, 3, 5),
  mileage = c(42750, 13400, 55900)
)

with_transaction(
  rows_update(get_ducklake_table("fleet"), serviced, by = "car_id"),
  author = "Fleet Manager",
  commit_message = "Record spring odometer readings"
)

sold <- tibble(car_id = 4L)

with_transaction(
  rows_delete(get_ducklake_table("fleet"), sold, by = "car_id"),
  author = "Fleet Manager",
  commit_message = "Remove sold F-150"
)

## ----list-snapshots-----------------------------------------------------------
list_table_snapshots("fleet") |>
  select(snapshot_id, snapshot_time, author, commit_message)

## ----plot-table---------------------------------------------------------------
plot_snapshots("fleet")

## ----plot-changes-------------------------------------------------------------
plot_table_changes("fleet")

## ----create-telemetry---------------------------------------------------------
set.seed(42)

telemetry <- tibble(
  reading_id = 1:5000,
  car_id = sample(1:7, 5000, replace = TRUE),
  speed = round(runif(5000, 0, 80)),
  fuel = round(runif(5000, 0, 100))
)

create_table(telemetry, "telemetry")

more_readings <- tibble(
  reading_id = 5001:10000,
  car_id = sample(1:7, 5000, replace = TRUE),
  speed = round(runif(5000, 0, 80)),
  fuel = round(runif(5000, 0, 100))
)

rows_insert(get_ducklake_table("telemetry"), more_readings, by = "reading_id")

## ----flush--------------------------------------------------------------------
flush_inlined_data()

## ----table-info---------------------------------------------------------------
get_table_info()

## ----plot-files---------------------------------------------------------------
plot_table_files()

## ----plot-lake----------------------------------------------------------------
plot_snapshots()

## ----plot-custom--------------------------------------------------------------
plot_snapshots("fleet") +
  ggplot2::labs(title = "Fleet table audit trail")

## ----cleanup, include = FALSE-------------------------------------------------
detach_ducklake("lake_viz_demo", shutdown = TRUE)

