Primary Key and Foreign Key Handling: In large, complex database schemas with many foreign keys, querying tables to populate these foreign keys properly is both computationally expensive and laborious for the user to write. DBgen obviates the need for this altogether. The technical details of how DBgen accomplishes this are described in the supplemental information. Automatic Detection of Changing Inputs and Functions: Every time a DBgen ETL step is run, DBgen stores a hash of the inputs it received and the function that processed the data. Then, when a pipeline is re-run, DBgen automatically knows which steps need to be re-run. This avoids the computational expense of re-running functions, and perhaps more importantly, it allows the user to add data and make edits to the pipeline without thinking about the execution of the pipeline at all. If the user wants to change a function, they just change the function and re-run the DBgen model. DBgen will automatically detect that only that function was changed, and that ETL step and all of its dependents will be re-run, and the rest of the steps will be skipped, as their results are unchanged. This is a recurring theme in DBgen: separate the definition of the pipeline from the execution of the pipeline, and abstract away the execution portion, thereby enabling the user to zoom in and make edits on any small portion of the pipeline without needing to think at all about how that may impact the broader data pipeline. This contributes to the reconfigurability and scalability of DBgen ETL pipelines.