<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Home on edg</title><link>https://edg.run/</link><description>Recent content in Home on edg</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://edg.run/index.xml" rel="self" type="application/rss+xml"/><item><title>Installation</title><link>https://edg.run/docs/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://edg.run/docs/installation/</guid><description>&lt;h1 id="installation"&gt;Installation&lt;a class="anchor" href="#installation"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h3 id="with-the-go-toolchain"&gt;With the Go toolchain&lt;a class="anchor" href="#with-the-go-toolchain"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go install github.com/codingconcepts/edg@latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="dock"&gt;Dock&lt;a class="anchor" href="#dock"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Or pull the Docker image:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker pull codingconcepts/edg:v0.1.0&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Images are published for both &lt;code&gt;linux/amd64&lt;/code&gt; and &lt;code&gt;linux/arm64&lt;/code&gt;. Pass flags and mount your config file:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker run --rm &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; -v &lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;pwd&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;/_examples/tpcc:/config &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; codingconcepts/edg:v0.1.0 all &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --driver pgx &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --config /config/crdb.yaml &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --url &lt;span style="color:#e6db74"&gt;&amp;#34;postgres://root@host.docker.internal:26257?sslmode=disable&amp;#34;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="from-source"&gt;From source&lt;a class="anchor" href="#from-source"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;git clone https://github.com/codingconcepts/edg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cd edg
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go build -o edg .&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Quick Start</title><link>https://edg.run/docs/quick-start/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://edg.run/docs/quick-start/</guid><description>&lt;h1 id="quick-start"&gt;Quick Start&lt;a class="anchor" href="#quick-start"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;This guide gets you from zero to running a workload in under a minute.&lt;/p&gt;
&lt;h2 id="try-expressions-no-database-needed"&gt;Try expressions (no database needed)&lt;a class="anchor" href="#try-expressions-no-database-needed"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After &lt;a href="https://edg.run/docs/installation/"&gt;installing&lt;/a&gt; edg, you can evaluate expressions directly from the command line:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edg email
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# naomiroberts@robinson.net&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edg &lt;span style="color:#e6db74"&gt;&amp;#34;uuid_v4()&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# c8952841-6f5b-4743-a6de-2200415c2f03&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edg &lt;span style="color:#e6db74"&gt;&amp;#34;regex(&amp;#39;[A-Z]{3}-[0-9]{4}&amp;#39;)&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# QVM-8314&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Or start an interactive REPL session:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edg repl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt;&amp;gt; uniform(0, 100)
73.37

&amp;gt;&amp;gt; set_rand([&amp;#39;credit_card&amp;#39;, &amp;#39;debit_card&amp;#39;, &amp;#39;paypal&amp;#39;], [])
debit_card

&amp;gt;&amp;gt; template(&amp;#39;ORD-%05d&amp;#39;, seq(1, 1))
ORD-00001&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="run-a-workload"&gt;Run a workload&lt;a class="anchor" href="#run-a-workload"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Create a file called &lt;code&gt;workload.yaml&lt;/code&gt;:&lt;/p&gt;</description></item><item><title>CLI Reference</title><link>https://edg.run/docs/cli-reference/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://edg.run/docs/cli-reference/</guid><description>&lt;h1 id="cli-reference"&gt;CLI Reference&lt;a class="anchor" href="#cli-reference"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="commands"&gt;Commands&lt;a class="anchor" href="#commands"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Command&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;edg &amp;lt;expression&amp;gt;&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Evaluate a single expression and print the result&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;up&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Create schema (tables, indexes)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;seed&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Populate tables with initial data&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;run&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Execute the benchmark workload&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;deseed&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Delete seeded data (truncate tables)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;down&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Tear down schema (drop tables)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;all&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Run up, seed, run, deseed, and down in sequence&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;repl&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Interactive expression evaluator&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;Running &lt;code&gt;edg&lt;/code&gt; with an expression (no subcommand) evaluates it and prints the result. Bare words are treated as &lt;a href="https://github.com/brianvoe/gofakeit"&gt;gofakeit&lt;/a&gt; patterns, so &lt;code&gt;edg email&lt;/code&gt; is equivalent to &lt;code&gt;edg &amp;quot;gen('email')&amp;quot;&lt;/code&gt;. For expressions with parentheses or special characters, quote the argument.&lt;/p&gt;</description></item><item><title>Configuration</title><link>https://edg.run/docs/configuration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://edg.run/docs/configuration/</guid><description>&lt;h1 id="configuration"&gt;Configuration&lt;a class="anchor" href="#configuration"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Workloads are defined in a single YAML file with the following top-level keys:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-yaml" data-lang="yaml"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Variables available in all expressions.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;globals&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# User-defined expression functions.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;expressions&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Static datasets available to ref_* functions without a database query.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;reference&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Schema creation queries.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;up&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Data population queries.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;seed&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Data cleanup queries.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;deseed&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Schema teardown queries.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;down&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Per-worker initialisation queries (run before workload).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;init&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Weighted transaction mix (optional).&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;run_weights&lt;/span&gt;:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Workload queries.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;run:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="globals"&gt;Globals&lt;a class="anchor" href="#globals"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;globals&lt;/code&gt; section defines top-level variables available in all expressions:&lt;/p&gt;</description></item><item><title>Expressions</title><link>https://edg.run/docs/expressions/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://edg.run/docs/expressions/</guid><description>&lt;h1 id="expressions"&gt;Expressions&lt;a class="anchor" href="#expressions"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Query arguments are written as expressions compiled at startup using &lt;a href="https://github.com/expr-lang/expr"&gt;expr-lang/expr&lt;/a&gt;. Each expression has access to the built-in functions, globals, and any user-defined expressions.&lt;/p&gt;
&lt;blockquote class='book-hint '&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Use &lt;code&gt;edg repl&lt;/code&gt; to try any expression interactively without a database connection. See &lt;a href="https://edg.run/docs/repl/"&gt;REPL&lt;/a&gt; for details.&lt;/p&gt;
&lt;/blockquote&gt;&lt;h2 id="functions"&gt;Functions&lt;a class="anchor" href="#functions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Function&lt;/th&gt;
 &lt;th&gt;Returns&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;const(value)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns the value as-is. Useful for literal constants.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;expr(expression)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Evaluates an arithmetic expression. Alias for &lt;code&gt;const&lt;/code&gt;, the expr engine handles the arithmetic.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gen(pattern)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates a random value using &lt;a href="https://github.com/brianvoe/gofakeit"&gt;gofakeit&lt;/a&gt; patterns (e.g. &lt;code&gt;gen('number:1,100')&lt;/code&gt;).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;global(name)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Looks up a value from the &lt;code&gt;globals&lt;/code&gt; section by name. Globals are also available directly as variables, so &lt;code&gt;global('warehouses')&lt;/code&gt; and &lt;code&gt;warehouses&lt;/code&gt; are equivalent.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ref_rand(name)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns a random row from a named dataset (populated by an &lt;code&gt;init&lt;/code&gt; query). Access fields with dot notation: &lt;code&gt;ref_rand('fetch_warehouses').w_id&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ref_same(name)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns a random row, but the same row is reused across all &lt;code&gt;ref_same&lt;/code&gt; calls within a single query execution. Cleared between iterations.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ref_perm(name)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns a random row on first call, then the same row for the entire lifetime of the worker.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ref_diff(name)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns unique rows across multiple calls within the same query execution. Uses a swap-based index to avoid repeats.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;batch(n)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[][]any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns sequential integers &lt;code&gt;[0, n)&lt;/code&gt; as batch arg sets,&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;gen_batch(total, batchSize, pattern)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[][]any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates &lt;code&gt;total&lt;/code&gt; values using &lt;a href="https://github.com/brianvoe/gofakeit"&gt;gofakeit&lt;/a&gt; &lt;code&gt;pattern&lt;/code&gt;, grouped into batches of &lt;code&gt;batchSize&lt;/code&gt;. Each batch arg is a comma-separated string of generated values.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ref_each(query)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;[][]any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Executes a SQL query and returns all rows. Each row becomes a separate arg set.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;ref_n(name, field, min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Picks N unique random rows (N in [min, max]) from a named dataset, extracts &lt;code&gt;field&lt;/code&gt; from each, and returns a comma-separated string.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nurand(A, x, y)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;TPC-C Non-Uniform Random: &lt;code&gt;(((random(0,A) | random(x,y)) + C) / (y-x+1)) + x&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;nurand_n(A, x, y, min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates N unique NURand values (N in [min, max]) as a comma-separated string.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;set_rand(values, weights)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Picks a random item from a set. If weights are provided, weighted random selection is used; otherwise uniform.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;set_norm(values, mean, stddev)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Picks an item from a set using normal distribution.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;set_exp(values, rate)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Picks an item from a set using exponential distribution.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;set_lognorm(values, mu, sigma)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Picks an item from a set using log-normal distribution.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;set_zipf(values, s, v)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Picks an item from a set using Zipfian distribution.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;exp(rate, min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Exponentially-distributed random number in [min, max], rounded to 0 decimal places.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;exp_f(rate, min, max, precision)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Exponentially-distributed random number in [min, max], rounded to &lt;code&gt;precision&lt;/code&gt; decimal places.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lognorm(mu, sigma, min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Log-normally-distributed random number in [min, max], rounded to 0 decimal places.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;lognorm_f(mu, sigma, min, max, precision)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Log-normally-distributed random number in [min, max], rounded to &lt;code&gt;precision&lt;/code&gt; decimal places.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;norm(mean, stddev, min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Normally-distributed random number in [min, max], rounded to 0 decimal places.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;norm_f(mean, stddev, min, max, precision)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Normally-distributed random number in [min, max], rounded to &lt;code&gt;precision&lt;/code&gt; decimal places.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;norm_n(mean, stddev, min, max, minN, maxN)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;N unique normally-distributed values (N in [minN, maxN]) as a comma-separated string.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uuid_v1()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates a Version 1 UUID (timestamp + node ID).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uuid_v4()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates a Version 4 UUID (random).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uuid_v6()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates a Version 6 UUID (reordered timestamp).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uuid_v7()&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates a Version 7 UUID (Unix timestamp + random, sortable).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uniform_f(min, max, precision)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Uniform random float in [min, max] rounded to &lt;code&gt;precision&lt;/code&gt; decimal places.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;uniform(min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Uniform random float in [min, max].&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;seq(start, step)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Auto-incrementing sequence per worker. Returns &lt;code&gt;start + counter * step&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;zipf(s, v, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Zipfian-distributed random integer in [0, max].&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;cond(predicate, trueVal, falseVal)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns &lt;code&gt;trueVal&lt;/code&gt; if &lt;code&gt;predicate&lt;/code&gt; is true, &lt;code&gt;falseVal&lt;/code&gt; otherwise.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;coalesce(v1, v2, ...)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;any&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns the first non-nil value from arguments.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;template(format, args...)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Formats a string using Go&amp;rsquo;s &lt;code&gt;fmt.Sprintf&lt;/code&gt; syntax.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;regex(pattern)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates a random string matching the given regular expression.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;json_obj(k1, v1, k2, v2, ...)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Builds a JSON object string from key-value pair arguments.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;json_arr(minN, maxN, pattern)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Builds a JSON array of N random values (N in [minN, maxN]) generated by a gofakeit &lt;code&gt;pattern&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bytes(n)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random &lt;code&gt;n&lt;/code&gt; bytes as a hex-encoded string with &lt;code&gt;\x&lt;/code&gt; prefix.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;bit(n)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random fixed-length bit string of exactly &lt;code&gt;n&lt;/code&gt; bits.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;varbit(n)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random variable-length bit string of 1 to &lt;code&gt;n&lt;/code&gt; bits.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;inet(cidr)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random IP address within the given CIDR block.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;array(minN, maxN, pattern)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;PostgreSQL/CockroachDB array literal with a random number of elements.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;time(min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random time of day between &lt;code&gt;min&lt;/code&gt; and &lt;code&gt;max&lt;/code&gt; (HH:MM:SS format).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;timez(min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random time of day with &lt;code&gt;+00:00&lt;/code&gt; timezone suffix.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;point(lat, lon, radiusKM)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;map&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates a random geographic point within &lt;code&gt;radiusKM&lt;/code&gt; of (&lt;code&gt;lat&lt;/code&gt;, &lt;code&gt;lon&lt;/code&gt;). Access fields with &lt;code&gt;.lat&lt;/code&gt; and &lt;code&gt;.lon&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;point_wkt(lat, lon, radiusKM)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Generates a random geographic point as a WKT string: &lt;code&gt;POINT(lon lat)&lt;/code&gt;.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;timestamp(min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random timestamp between &lt;code&gt;min&lt;/code&gt; and &lt;code&gt;max&lt;/code&gt; (RFC3339).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;duration(min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random duration between &lt;code&gt;min&lt;/code&gt; and &lt;code&gt;max&lt;/code&gt; (Go duration strings).&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;date(format, min, max)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Random timestamp formatted using a Go time format string.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;date_offset(duration)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Returns the current time offset by &lt;code&gt;duration&lt;/code&gt;, formatted as RFC3339.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;weighted_sample_n(name, field, weightField, minN, maxN)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;string&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Picks N unique rows using weighted selection, returns a comma-separated string.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;sum(name, field)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Sum of a numeric field across all rows in a named dataset.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;avg(name, field)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Average of a numeric field across all rows in a named dataset.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;min(name, field)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Minimum value of a numeric field in a named dataset.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;max(name, field)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;float64&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Maximum value of a numeric field in a named dataset.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;count(name)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of rows in a named dataset.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;distinct(name, field)&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;int&lt;/code&gt;&lt;/td&gt;
 &lt;td&gt;Number of distinct values for a field in a named dataset.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 id="function-lifecycle"&gt;Function Lifecycle&lt;a class="anchor" href="#function-lifecycle"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Several functions maintain state. Understanding when that state resets is important for getting correct results:&lt;/p&gt;</description></item><item><title>Example Workloads</title><link>https://edg.run/docs/example-workloads/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://edg.run/docs/example-workloads/</guid><description>&lt;h1 id="example-workloads"&gt;Example Workloads&lt;a class="anchor" href="#example-workloads"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;Complete workload configs you can run directly or use as starting points for your own.&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Workload&lt;/th&gt;
 &lt;th&gt;Description&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/tpcc/"&gt;TPC-C&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Full TPC-C benchmark with all 5 transaction profiles&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/bank/"&gt;Bank&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Bank account operations for contention and correctness testing&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/ecommerce/"&gt;E-Commerce&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;E-commerce with categories, products, customers, and orders&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/iot/"&gt;IoT&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;IoT devices, sensors, and time-series readings&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/normal/"&gt;Normal&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Product reviews with normal distribution ratings&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/pipeline/"&gt;Pipeline&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Multi-table sequential reads and writes&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/saas/"&gt;SaaS&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Multi-tenant SaaS with tenants, users, projects, and tasks&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/populate/"&gt;Populate&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Billion-row data population benchmark&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/social/"&gt;Social&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Social network with users, posts, follows, and tags&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/aggregation/"&gt;Aggregation&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Demonstrates aggregation functions (sum, avg, min, max, count, distinct)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/reference_data/"&gt;Reference Data&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Static reference datasets without database queries&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;a href="https://github.com/codingconcepts/edg/tree/main/_examples/expression/"&gt;Expressions&lt;/a&gt;&lt;/td&gt;
 &lt;td&gt;Demonstrates expr-lang built-in features (array, map, string, bitwise, etc.)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>REPL</title><link>https://edg.run/docs/repl/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://edg.run/docs/repl/</guid><description>&lt;h1 id="repl"&gt;REPL&lt;a class="anchor" href="#repl"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;The &lt;code&gt;repl&lt;/code&gt; command starts an interactive session where you can evaluate any expression from the function table. No database connection or config file is required &amp;ndash; it&amp;rsquo;s a quick way to explore functions, test distributions, and prototype argument expressions before adding them to a workload config.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sh" data-lang="sh"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;edg repl&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre tabindex="0"&gt;&lt;code&gt;&amp;gt;&amp;gt; uniform(0, 100)
73.37

&amp;gt;&amp;gt; norm(50, 10, 0, 100)
53

&amp;gt;&amp;gt; set_norm([1, 2, 3, 4, 5], 2, 0.8)
3

&amp;gt;&amp;gt; uuid_v4()
a1b2c3d4-e5f6-4a7b-8c9d-0e1f2a3b4c5d

&amp;gt;&amp;gt; template(&amp;#39;ORD-%05d&amp;#39;, seq(1, 1))
ORD-00001

&amp;gt;&amp;gt; zipf(2.0, 1.0, 999)
0

&amp;gt;&amp;gt; regex(&amp;#39;[A-Z]{3}-[0-9]{4}&amp;#39;)
QVM-8314

&amp;gt;&amp;gt; regex(&amp;#39;#[0-9a-f]{6}&amp;#39;)
#a3c2f1

&amp;gt;&amp;gt; regex(&amp;#39;[A-Z]{2}[0-9]{2} [A-Z]{3}&amp;#39;)
KD42 BXR

&amp;gt;&amp;gt; exp_f(0.5, 0, 100, 2)
12.74

&amp;gt;&amp;gt; lognorm_f(1.0, 0.5, 1, 1000, 2)
3.41

&amp;gt;&amp;gt; inet(&amp;#39;192.168.1.0/24&amp;#39;)
192.168.1.47

&amp;gt;&amp;gt; bytes(16)
\x4a7f2b9c01de38f56a8b3c4d5e6f7a8b

&amp;gt;&amp;gt; bit(8)
10110011

&amp;gt;&amp;gt; varbit(16)
101011

&amp;gt;&amp;gt; array(2, 5, &amp;#39;email&amp;#39;)
{john@example.com,anne@test.net,mike@domain.org}

&amp;gt;&amp;gt; time(&amp;#39;08:00:00&amp;#39;, &amp;#39;18:00:00&amp;#39;)
14:23:07

&amp;gt;&amp;gt; timez(&amp;#39;09:00:00&amp;#39;, &amp;#39;17:00:00&amp;#39;)
11:45:32+00:00

&amp;gt;&amp;gt; 1 + 2
3&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="loading-config"&gt;Loading Config&lt;a class="anchor" href="#loading-config"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To load globals and user-defined expressions from a workload config, pass &lt;code&gt;--config&lt;/code&gt;:&lt;/p&gt;</description></item></channel></rss>