Skip to main content

rbt/
lib.rs

1//! # rbt
2//!
3//! Medallion SQL DAG engine for lakehouse transforms (bronze → silver → gold).
4//!
5//! ## Install
6//!
7//! **CLI**
8//! ```bash
9//! cargo install rbt-datalake
10//! rbt --help
11//! ```
12//!
13//! **Library**
14//! ```toml
15//! [dependencies]
16//! rbt-datalake = "0.6.0"
17//! ```
18//!
19//! ## Quick start (library)
20//!
21//! ```rust,no_run
22//! use rbt::{RbtProjectConfig, RunScope, TransformationEngine};
23//! # async fn demo() -> anyhow::Result<()> {
24//! let project = std::path::Path::new(".");
25//! let config = RbtProjectConfig::load(project)?;
26//! let dag = config.build_dag(project, None)?;
27//! let engine = TransformationEngine::new();
28//! let scope = RunScope::new().with_var("report_date", "2026-07-29");
29//! let _summary = engine
30//!     .execute_dag_with_scope(&dag, project, "./target/output", &config, &scope)
31//!     .await?;
32//! # Ok(())
33//! # }
34//! ```
35
36#![doc(html_root_url = "https://docs.rs/rbt-datalake/0.6.0")]
37
38pub mod core;
39pub mod engine;
40pub mod json;
41pub mod materializer;
42pub mod measure;
43pub mod scan;
44pub mod testing;
45
46// --- Public API (stable surface for library users) ---------------------------
47
48pub use core::{
49    apply_scope_to_frontmatter, bronze_fingerprint, effective_contract_version, expand_braced_vars,
50    model_has_test_contract, parse_logical_dtype, parse_select_spec, resolve_scan_path,
51    scan_path_exists, BronzeCheckMode, BronzeDiagnostic, BronzeValidationReport, ColumnMeta,
52    DependencyRef, DiagnosticSeverity, IcebergConfig, IcebergWriteMode, Materialization,
53    MaterializeConfig, MaterializeMode, ModelDag, ModelLayer, ModelNode, ModelRunResult,
54    ModelTests, OnMissing, OutputFormat, PathGlobSet, RbtProjectConfig, RbtTemplateEngine,
55    RefBackend, RefStrategy, RunReceipt, RunScope, RunStatus, ScanConfig, SelectMode, SelectToken,
56    SourceFormat, SqlModelParser, StagingFrontmatter, DEFAULT_MAX_ROW_GROUP_BYTES,
57    DEFAULT_MAX_ROW_GROUP_ROWS, DEFAULT_MEMTABLE_MAX_ROWS, DEFAULT_PROTOBUF_MAX_PAYLOAD_BYTES,
58};
59
60pub use engine::{
61    register_bronze_for_model, register_bronze_for_model_scoped, register_bronze_sources_for_dag,
62    register_bronze_sources_for_dag_scoped, BronzeRegistrationMode, BronzeSourceMeta,
63    BronzeTableProvider, DagExecutionSummary, PreviewResult, RbtEngineBuilder,
64    TransformationEngine,
65};
66pub use engine::udf::{register_builtin_udfs, register_scalar_udf, BUILTIN_UDF_NAMES};
67
68pub use materializer::{
69    clear_incremental_parts, incremental_ref_path, materialize_incremental_append_stream,
70    materialize_stream, new_wap_run_id, sibling_iceberg_dir, verify_iceberg_catalog_table,
71    wap_publish, write_iceberg_catalog_batches, write_iceberg_fs_table, write_parquet_stream,
72    IcebergCatalogOptions, IcebergCatalogWriteStats, MaterializeWriteOptions, MultiFormatWriter,
73    StreamWriteStats, WapAuditLog, WapMaterializer, WapModelPaths, WapPhase, WapStatus,
74};
75pub use measure::{
76    default_report_path, list_scenarios, run_measure_scenario, write_measure_report, MeasureReport,
77    ModeCompare, SCENARIO_COMPLEX_BRONZE, SCENARIO_INCREMENTAL_APPEND, SCENARIO_SMOKE_PIPELINE,
78    SCENARIO_STREAM_VS_COLLECT, SCENARIO_VALIDATE_DX, SCENARIO_WHALE_SYNTHETIC, DEFAULT_WHALE_PARTS,
79    DEFAULT_WHALE_ROWS,
80};
81
82pub use json::{JShiftExtractor, JsonExtractSpec};
83pub use scan::{parse_hive_partitions, LakeScanner, ScanRequest};
84
85pub use testing::{
86    assertions_from_model_tests, Assertion, RecordBatchValidator, StreamingAssertionRunner,
87    UniqueKeyTracker, ValidationResult,
88};
89
90/// Package version string.
91pub const VERSION: &str = env!("CARGO_PKG_VERSION");