Public
Edited
Mar 20
Insert cell
Insert cell
Insert cell
viewof compression = Inputs.select(["zstd", "gzip", "snappy", "br"], {
label: "compression"
})
Insert cell
Insert cell
Insert cell
Insert cell
viewof duckdb = Inputs.toggle({ label: "do duckdb" })
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
average_time = {
if (!duckdb) return [];
const startTime = performance.now();
const result = (
await db.query(
`SELECT average, date FROM parquet_scan('${PARQUET_URL}') LIMIT 1000000`
)
).map((r) => ({ ...r, date: parseCustomDate(r.date) }));
result.fetchTime = performance.now() - startTime;
return result;
}
Insert cell
average_time.fetchTime
Insert cell
Insert cell
Insert cell
Insert cell
scatter = {
if (!do_scatter) return;
const startTime = performance.now();

const plot = Plot.plot({
marks: [Plot.dot(average_time, { x: "date", y: "average", tip: true })]
});

plot.renderTime = performance.now() - startTime;

return plot;
}
Insert cell
do_scatter && scatter.renderTime
Insert cell
histogram = {
const startTime = performance.now();
const plot = Plot.plot({
marks: [
Plot.rectY(average_time, Plot.binX({ y: "count" }, { x: "average" })),
Plot.ruleY([0])
]
});
plot.renderTime = performance.now() - startTime;
return plot;
}
Insert cell
histogram.renderTime
Insert cell
density = {
const startTime = performance.now();

const plot = Plot.plot({
marks: [
Plot.density(average_time, {
x: "date",
y: "average",
stroke: "blue",
strokeWidth: 0.25
})
]
});

plot.renderTime = performance.now() - startTime;

return plot;
}
Insert cell
density.renderTime
Insert cell
binned = {
const startTime = performance.now();

const plot = Plot.plot({
marks: [Plot.rect(average_time, Plot.bin({}, { x: "date", y: "average" }))]
});

plot.renderTime = performance.now() - startTime;

return plot;
}
Insert cell
binned.renderTime
Insert cell
Insert cell
Insert cell
Insert cell
Insert cell
start_time = hypa_read_objects && performance.now()
Insert cell
hypa_data_date = {
if (!hypa_read_objects) return [];
const file = await hyparquet.asyncBufferFromUrl({ url: PARQUET_URL }); // wrap url for async fetching
const startTime = performance.now();
const data = await hyparquet.parquetReadObjects({
file,
columns: ["date"],
rowStart: 0,
rowEnd: 1000000, // These don't affect data read! we need rowLimit
compressors: compressors.compressors
});

const fetchTime = performance.now() - startTime;
const munged = data.map((r) => ({ date: parseCustomDate(r.date) }));
munged.mungeTime = performance.now() - startTime;
munged.fetchTime = fetchTime;
return munged;
}
Insert cell
hypa_data_average = {
if (!hypa_read_objects) return [];
const file = await hyparquet.asyncBufferFromUrl({ url: PARQUET_URL }); // wrap url for async fetching
const startTime = performance.now();
const data = await hyparquet.parquetReadObjects({
file,
columns: ["average"],
rowStart: 0,
rowEnd: 1000000, // These don't affect data read! we need rowLimit
compressors: compressors.compressors
});

data.fetchTime = performance.now() - startTime;
return data;
}
Insert cell
hypa_data_date.fetchTime
Insert cell
hypa_data_average.fetchTime
Insert cell
hypa_data_date.mungeTime
Insert cell
total_time = hypa_data_average &&
hypa_data_date &&
performance.now() - start_time
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