Initial commit.
This commit is contained in:
commit
694f7ff118
10 changed files with 1873 additions and 0 deletions
6
.envrc
Normal file
6
.envrc
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
use flake
|
||||||
|
export REDIS_URL=redis://127.0.0.1:5000/
|
||||||
|
export AWS_ACCESS_KEY_ID=minioadmin
|
||||||
|
export AWS_SECRET_ACCESS_KEY=minioadmin
|
||||||
|
export S3_ENDPOINT=http://localhost:5100
|
||||||
|
export S3_BUCKET=waynav
|
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
target
|
||||||
|
.direnv
|
||||||
|
*.map*
|
||||||
|
*.db*
|
||||||
|
log
|
1607
Cargo.lock
generated
Normal file
1607
Cargo.lock
generated
Normal file
File diff suppressed because it is too large
Load diff
7
Cargo.toml
Normal file
7
Cargo.toml
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
[package]
|
||||||
|
name = "duckdb_test"
|
||||||
|
version = "0.1.0"
|
||||||
|
edition = "2021"
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
duckdb = { version = "1", features = ["bundled", "extensions-full"] }
|
114
flake.lock
generated
Normal file
114
flake.lock
generated
Normal file
|
@ -0,0 +1,114 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"naersk": {
|
||||||
|
"inputs": {
|
||||||
|
"nixpkgs": "nixpkgs"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1743800763,
|
||||||
|
"narHash": "sha256-YFKV+fxEpMgP5VsUcM6Il28lI0NlpM7+oB1XxbBAYCw=",
|
||||||
|
"owner": "nix-community",
|
||||||
|
"repo": "naersk",
|
||||||
|
"rev": "ed0232117731a4c19d3ee93aa0c382a8fe754b01",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-community",
|
||||||
|
"ref": "master",
|
||||||
|
"repo": "naersk",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1744096231,
|
||||||
|
"narHash": "sha256-kUfx3FKU1Etnua3EaKvpeuXs7zoFiAcli1gBwkPvGSs=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "b2b0718004cc9a5bca610326de0a82e6ea75920b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixpkgs-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgsUnstable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1744098102,
|
||||||
|
"narHash": "sha256-tzCdyIJj9AjysC3OuKA+tMD/kDEDAF9mICPDU7ix0JA=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "c8cd81426f45942bb2906d5ed2fe21d2f19d95b7",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-unstable",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs_2": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1744168086,
|
||||||
|
"narHash": "sha256-S9M4HddBCxbbX1CKSyDYgZ8NCVyHcbKnBfoUXeRu2jQ=",
|
||||||
|
"owner": "NixOS",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "60e405b241edb6f0573f3d9f944617fe33ac4a73",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "NixOS",
|
||||||
|
"ref": "nixos-24.11",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"naersk": "naersk",
|
||||||
|
"nixpkgs": "nixpkgs_2",
|
||||||
|
"nixpkgsUnstable": "nixpkgsUnstable",
|
||||||
|
"utils": "utils"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1731533236,
|
||||||
|
"narHash": "sha256-l0KFg5HjrsfsO/JpG+r7fRrqm12kzFHyUHqHCVpMMbI=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "11707dc2f618dd54ca8739b309ec4fc024de578b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
58
flake.nix
Normal file
58
flake.nix
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
{
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-24.11";
|
||||||
|
nixpkgsUnstable.url = "github:NixOS/nixpkgs/nixos-unstable";
|
||||||
|
utils.url = "github:numtide/flake-utils";
|
||||||
|
naersk.url = "github:nix-community/naersk/master";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs =
|
||||||
|
{
|
||||||
|
self,
|
||||||
|
nixpkgs,
|
||||||
|
nixpkgsUnstable,
|
||||||
|
utils,
|
||||||
|
naersk,
|
||||||
|
}:
|
||||||
|
utils.lib.eachDefaultSystem (
|
||||||
|
system:
|
||||||
|
let
|
||||||
|
pkgs = import nixpkgs { inherit system; };
|
||||||
|
pkgsUnstable = import nixpkgsUnstable { inherit system; };
|
||||||
|
naersk' = pkgs.callPackage naersk { };
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShell =
|
||||||
|
with pkgs;
|
||||||
|
mkShell.override { stdenv = pkgs.clangStdenv; } {
|
||||||
|
nativeBuildInputs = [
|
||||||
|
cargo
|
||||||
|
rustc
|
||||||
|
rustfmt
|
||||||
|
rustPackages.clippy
|
||||||
|
cargo-watch
|
||||||
|
pkgsUnstable.dioxus-cli
|
||||||
|
pkgsUnstable.wasm-bindgen-cli
|
||||||
|
llvmPackages.bintools
|
||||||
|
pkg-config
|
||||||
|
pkgsUnstable.overturemaps
|
||||||
|
duckdb
|
||||||
|
pre-commit
|
||||||
|
overmind
|
||||||
|
redis
|
||||||
|
minio
|
||||||
|
];
|
||||||
|
buildInputs = [
|
||||||
|
webkitgtk_4_1
|
||||||
|
gtk3
|
||||||
|
xdotool.out
|
||||||
|
openssl
|
||||||
|
];
|
||||||
|
shellHook = ''
|
||||||
|
# pre-commit install
|
||||||
|
'';
|
||||||
|
RUST_SRC_PATH = rustPlatform.rustLibSrc;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
56
src/main.rs
Normal file
56
src/main.rs
Normal file
|
@ -0,0 +1,56 @@
|
||||||
|
use duckdb::{params, Connection};
|
||||||
|
|
||||||
|
const ROOT: &str = "s3://overturemaps-us-west-2/release/2025-03-19.0";
|
||||||
|
|
||||||
|
fn main() -> Result<(), Box<dyn std::error::Error>> {
|
||||||
|
let conn = Connection::open("test.map")?;
|
||||||
|
conn.execute_batch(
|
||||||
|
r#"
|
||||||
|
install httpfs;
|
||||||
|
load httpfs;
|
||||||
|
install spatial;
|
||||||
|
load spatial;
|
||||||
|
set s3_access_key_id = '';
|
||||||
|
set s3_secret_access_key = '';
|
||||||
|
set s3_region='us-west-2';
|
||||||
|
set preserve_insertion_order = false;
|
||||||
|
"#,
|
||||||
|
)?;
|
||||||
|
let mut stmt = conn.prepare("select * from duckdb_settings()")?;
|
||||||
|
let mut rows = stmt.query([])?;
|
||||||
|
while let Some(row) = rows.next()? {
|
||||||
|
let name: String = row.get(0)?;
|
||||||
|
let value: String = row.get(1)?;
|
||||||
|
println!("{}: {}", name, value);
|
||||||
|
}
|
||||||
|
let xmin = -97.734375;
|
||||||
|
let xmax = -97.3828125;
|
||||||
|
let ymin = 30.234375;
|
||||||
|
let ymax = 30.41015625;
|
||||||
|
let types = vec![
|
||||||
|
"theme=places/type=place",
|
||||||
|
"theme=buildings/type=building",
|
||||||
|
"theme=transportation/type=segment",
|
||||||
|
"theme=transportation/type=connector",
|
||||||
|
];
|
||||||
|
for t in &types {
|
||||||
|
let table = t.split('=');
|
||||||
|
let table = table.last().unwrap();
|
||||||
|
let root = format!("{ROOT}/{t}/*");
|
||||||
|
println!("Making table");
|
||||||
|
println!(
|
||||||
|
r#"create table {table} as select * from read_parquet("{root}") where bbox.xmin between {xmin} and {xmax} and bbox.ymin between {ymin} and {ymax};"#
|
||||||
|
);
|
||||||
|
let query = format!(
|
||||||
|
r#"create table {table} as select * from read_parquet(?) where bbox.xmin between ? and ? and bbox.ymin between ? and ?;"#
|
||||||
|
);
|
||||||
|
conn.execute(&query, params![root, xmin, xmax, ymin, ymax,])?;
|
||||||
|
println!("Counting");
|
||||||
|
conn.query_row(&format!("select count() from {table};"), [], |row| {
|
||||||
|
let count: usize = row.get(0).unwrap();
|
||||||
|
println!("{count}");
|
||||||
|
Ok(())
|
||||||
|
})?;
|
||||||
|
}
|
||||||
|
Ok(())
|
||||||
|
}
|
5
test1.sh
Executable file
5
test1.sh
Executable file
|
@ -0,0 +1,5 @@
|
||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
cargo build --release
|
||||||
|
rm -f test.map*
|
||||||
|
time cargo run --release
|
3
test2.sh
Executable file
3
test2.sh
Executable file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/sh
|
||||||
|
rm -f test.map*
|
||||||
|
time cat test2.sql |duckdb test.map
|
12
test2.sql
Normal file
12
test2.sql
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
install httpfs;
|
||||||
|
load httpfs;
|
||||||
|
install spatial;
|
||||||
|
load spatial;
|
||||||
|
set s3_access_key_id = '';
|
||||||
|
set s3_secret_access_key = '';
|
||||||
|
set s3_region='us-west-2';
|
||||||
|
set preserve_insertion_order = false;
|
||||||
|
create table place as select * from read_parquet("s3://overturemaps-us-west-2/release/2025-03-19.0/theme=places/type=place/*") where bbox.xmin between -97.734375 and -97.3828125 and bbox.ymin between 30.234375 and 30.41015625;
|
||||||
|
create table building as select * from read_parquet("s3://overturemaps-us-west-2/release/2025-03-19.0/theme=buildings/type=building/*") where bbox.xmin between -97.734375 and -97.3828125 and bbox.ymin between 30.234375 and 30.41015625;
|
||||||
|
create table segment as select * from read_parquet('s3://overturemaps-us-west-2/release/2025-03-19.0/theme=transportation/type=segment/*') where bbox.xmin between -97.734375 and -97.3828125 and bbox.ymin between 30.234375 and 30.41015625;
|
||||||
|
create table connector as select * from read_parquet('s3://overturemaps-us-west-2/release/2025-03-19.0/theme=transportation/type=connector/*') where bbox.xmin between -97.734375 and -97.3828125 and bbox.ymin between 30.234375 and 30.41015625;
|
Loading…
Add table
Add a link
Reference in a new issue