Public
Edited
Sep 8, 2022
1 star
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
database
SELECT database_id, version_id, database_version_human FROM benchmarks.database WHERE bench_id = ${benchmarkRun}
Insert cell
Insert cell
database
SELECT id, sql, notes FROM benchmarks.query WHERE bench_id = ${benchmarkRun}
Insert cell
Insert cell
viewof databases = Inputs.checkbox(databaseNames, {value: databaseNames, label: "Databases"})
Insert cell
viewof queries = Inputs.checkbox(queryNames, {value: queryNames, label: "Queries"})
Insert cell
// Do not change this variable name, we embed using it
benchmarkPlot = {
let p = Plot.plot({
marginLeft: 220,
width: 800,
x: {
grid: true,
label: "Time, s"
},
y: { label: null },
facet: {
data: queryTimingsFiltered,
y: "query_id",
label: "Query",
marginRight: 210
},
color: {
type: "categorical"
},
marks: [
Plot.frame(),
Plot.boxX(queryTimingsFiltered, {
x: "time",
y: "database_version_human",
fill: "database_version_human"
})
]
});
d3.select(p).selectAll("svg > g > text").style("font-size", "14px");
d3.select(p).selectAll("svg > g > g> text").style("font-size", "14px");
return p;
}
Insert cell
Insert cell
import {SeafowlDatabase} from "@seafowl/client"
Insert cell
database = new SeafowlDatabase({host: "https://demo.seafowl.io"})
Insert cell
// Add a random number here to bypass the cache
benchmarkRuns = database.sql`SELECT id FROM benchmarks.benchmark ORDER BY run_at DESC --${Math.random()}`.then(
(r) => r.map((r) => r.id)
)
Insert cell
database
SELECT d.database_version_human, query_id, time
FROM benchmarks.timing t
JOIN benchmarks.database d ON t.database_id = d.database_id
WHERE t.bench_id = ${benchmarkRun}
AND d.bench_id = t.bench_id
Insert cell
databaseNames = [...new Set(queryTimings.map((t) => t.database_version_human))]
Insert cell
queryNames = [...new Set(queryTimings.map((t) => t.query_id))]
Insert cell
queryTimingsFiltered = queryTimings.filter((t) => queries.includes(t.query_id) && databases.includes(t.database_version_human))
Insert cell
Insert cell
crossTimings = database.sql`SELECT d.database_version_human, query_id, time
FROM benchmarks.timing t
JOIN benchmarks.database d ON t.database_id = d.database_id
AND d.bench_id = t.bench_id
WHERE t.database_id = 'seafowl' --`
Insert cell
Plot.plot({
marginLeft: 200,
width: 900,
height: 700,
x: {
grid: true,
label: "Time, s"
},
y: {label: null},
facet: {
data: crossTimings,
y: "query_id",
label: "Query",
marginRight: 200,
},
color: {
type: "categorical"
},
marks: [
Plot.frame(),
Plot.boxX(crossTimings, {x: "time", y: "database_version_human", fill: "database_version_human"})
]
})
Insert cell

One platform to build and deploy the best data apps

Experiment and prototype by building visualizations in live JavaScript notebooks. Collaborate with your team and decide which concepts to build out.
Use Observable Framework to build data apps locally. Use data loaders to build in any language or library, including Python, SQL, and R.
Seamlessly deploy to Observable. Test before you ship, use automatic deploy-on-commit, and ensure your projects are always up-to-date.
Learn more