From babc3ca8f9485486a4a7cd9eb6db71440a243632 Mon Sep 17 00:00:00 2001 From: Esteban Zimanyi Date: Sun, 14 Jun 2026 10:28:06 +0200 Subject: [PATCH] Run the single canonical BerlinMOD query suite, drop the per-tool copies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The benchmark now runs the one canonical BerlinMOD suite shared unchanged by all three DB tools — vendored as the berlinmod/suite git submodule (estebanzimanyi/berlinmod-portability: q01..q17 + qrt, pure portable SQL). run_queries.py reads the canonical SQL and applies the DuckDB-specific output handling (.mode csv / .output, EXPLAIN ANALYZE) in the harness, in Python — there is NO per-tool adaptation in the query files. The 17 local query_N.sql + 17 explain copies (which embedded .mode/.output) are removed. Follow-up (separate): single-source the schema/load onto the canonical schema.sql, and the benchmark run needs MEOS pin >= 2026-06-14d for the th3 prefilter naming the canonical queries use. --- .gitmodules | 3 + benchmark/BerlinMOD/run_queries.py | 161 ++++++++----------- benchmark/BerlinMOD/sql/explain/query_1.sql | 8 - benchmark/BerlinMOD/sql/explain/query_10.sql | 30 ---- benchmark/BerlinMOD/sql/explain/query_11.sql | 25 --- benchmark/BerlinMOD/sql/explain/query_12.sql | 35 ---- benchmark/BerlinMOD/sql/explain/query_13.sql | 27 ---- benchmark/BerlinMOD/sql/explain/query_14.sql | 25 --- benchmark/BerlinMOD/sql/explain/query_15.sql | 25 --- benchmark/BerlinMOD/sql/explain/query_16.sql | 17 -- benchmark/BerlinMOD/sql/explain/query_17.sql | 13 -- benchmark/BerlinMOD/sql/explain/query_2.sql | 8 - benchmark/BerlinMOD/sql/explain/query_3.sql | 10 -- benchmark/BerlinMOD/sql/explain/query_4.sql | 11 -- benchmark/BerlinMOD/sql/explain/query_5.sql | 32 ---- benchmark/BerlinMOD/sql/explain/query_6.sql | 33 ---- benchmark/BerlinMOD/sql/explain/query_7.sql | 22 --- benchmark/BerlinMOD/sql/explain/query_8.sql | 11 -- benchmark/BerlinMOD/sql/explain/query_9.sql | 15 -- benchmark/BerlinMOD/sql/queries/query_1.sql | 6 - benchmark/BerlinMOD/sql/queries/query_10.sql | 27 ---- benchmark/BerlinMOD/sql/queries/query_11.sql | 22 --- benchmark/BerlinMOD/sql/queries/query_12.sql | 32 ---- benchmark/BerlinMOD/sql/queries/query_13.sql | 24 --- benchmark/BerlinMOD/sql/queries/query_14.sql | 22 --- benchmark/BerlinMOD/sql/queries/query_15.sql | 22 --- benchmark/BerlinMOD/sql/queries/query_16.sql | 15 -- benchmark/BerlinMOD/sql/queries/query_17.sql | 11 -- benchmark/BerlinMOD/sql/queries/query_2.sql | 6 - benchmark/BerlinMOD/sql/queries/query_3.sql | 8 - benchmark/BerlinMOD/sql/queries/query_4.sql | 9 -- benchmark/BerlinMOD/sql/queries/query_5.sql | 29 ---- benchmark/BerlinMOD/sql/queries/query_6.sql | 30 ---- benchmark/BerlinMOD/sql/queries/query_7.sql | 20 --- benchmark/BerlinMOD/sql/queries/query_8.sql | 9 -- benchmark/BerlinMOD/sql/queries/query_9.sql | 13 -- benchmark/BerlinMOD/suite | 1 + 37 files changed, 72 insertions(+), 745 deletions(-) delete mode 100644 benchmark/BerlinMOD/sql/explain/query_1.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_10.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_11.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_12.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_13.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_14.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_15.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_16.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_17.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_2.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_3.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_4.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_5.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_6.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_7.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_8.sql delete mode 100644 benchmark/BerlinMOD/sql/explain/query_9.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_1.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_10.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_11.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_12.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_13.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_14.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_15.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_16.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_17.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_2.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_3.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_4.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_5.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_6.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_7.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_8.sql delete mode 100644 benchmark/BerlinMOD/sql/queries/query_9.sql create mode 160000 benchmark/BerlinMOD/suite diff --git a/.gitmodules b/.gitmodules index 00a79de3..e3264cb5 100644 --- a/.gitmodules +++ b/.gitmodules @@ -9,3 +9,6 @@ [submodule "duckdb-spatial"] path = duckdb-spatial url = https://github.com/duckdb/duckdb-spatial +[submodule "benchmark/BerlinMOD/suite"] + path = benchmark/BerlinMOD/suite + url = https://github.com/estebanzimanyi/berlinmod-portability.git diff --git a/benchmark/BerlinMOD/run_queries.py b/benchmark/BerlinMOD/run_queries.py index dbd271b9..4492d8d3 100644 --- a/benchmark/BerlinMOD/run_queries.py +++ b/benchmark/BerlinMOD/run_queries.py @@ -1,6 +1,13 @@ #!/usr/bin/env python3 """ -Query runner for BerlinMOD benchmark +Query runner for the BerlinMOD benchmark. + +The query set is the SINGLE canonical BerlinMOD suite shared, unchanged, by all +three DB tools (MobilityDB / MobilityDuck / MobilitySpark): the `suite/` git +submodule (estebanzimanyi/berlinmod-portability), `q01.sql` .. `q17.sql` + the +round-trip `qrt.sql`. The query files are pure portable SQL with NO per-tool +adaptation — the DuckDB-specific output handling (`.mode csv` / `.output`) is +applied here, by the harness, not embedded in the SQL. """ import subprocess @@ -8,46 +15,47 @@ import json import sys import os +import glob import argparse import re -from typing import Dict, Tuple +from typing import Dict, List, Tuple + +# The canonical suite (the single source shared by the 3 DB tools). +SUITE_PATH = "./suite" -QUERIES_NUM = 17 class QueryRunner: def __init__(self, duckdb_path: str = "../../build/release/duckdb", benchmark: str = "default", - queries_path: str = "./sql/queries", - explain_path: str = "./sql/explain", + suite_path: str = SUITE_PATH, output_path: str = "./results/output"): self.duckdb_path = duckdb_path self.benchmark = benchmark - self.queries_path = queries_path - self.explain_path = explain_path + self.suite_path = suite_path self.output_path = output_path - self.queries_num = QUERIES_NUM + + def query_files(self) -> List[str]: + """The canonical query files (q01..q17 + qrt), in order.""" + files = sorted(os.path.basename(p) for p in glob.glob(os.path.join(self.suite_path, "q*.sql"))) + # qrt sorts after q17 already; keep that order (q01..q17, qrt). + return files + + def _canonical_sql(self, filename: str) -> str: + with open(os.path.join(self.suite_path, filename), "r") as f: + return f.read() def run_sql(self, filename: str) -> Tuple[float, int]: - success = False print(f"\nRunning {filename}") - start_time = time.time() - sql_path = os.path.join(self.queries_path, filename) - if not os.path.exists(sql_path): - print(f"\tError: Query file not found: {sql_path}") - return -1, -1 - - with open(sql_path, "r") as f: - sql = f.read() - - sql = sql.replace(".output results/output/query", f".output results/output/{self.benchmark}/query") + out_csv = f"results/output/{self.benchmark}/{filename.replace('.sql', '.csv')}" + # Adaptation lives HERE, not in the canonical SQL: redirect DuckDB output. + sql = f".mode csv\n.output {out_csv}\n" + self._canonical_sql(filename) + success = False + start_time = time.time() while not success: result = subprocess.run( [self.duckdb_path, f"./databases/{self.benchmark}.db"], - input=sql, - capture_output=True, - text=True - ) + input=sql, capture_output=True, text=True) if result.returncode == 0: success = True else: @@ -55,15 +63,11 @@ def run_sql(self, filename: str) -> Tuple[float, int]: print("\tTrying again...") time.sleep(1) start_time = time.time() - - end_time = time.time() - elapsed = (end_time - start_time) * 1000 # milliseconds - + elapsed = (time.time() - start_time) * 1000 # ms print(f"\tDone in {elapsed:.2f}ms") line_count = self.run_validation(filename) print(f"\tOutput row count: {line_count}") - return elapsed, line_count def run_validation(self, filename: str) -> int: @@ -73,113 +77,84 @@ def run_validation(self, filename: str) -> int: return -1 with open(output_file, "r") as f: line_count = sum(1 for _ in f) - if line_count > 0: - line_count -= 1 - return line_count + return line_count - 1 if line_count > 0 else 0 def run_queries(self) -> Dict: results = dict() - - for query_num in range(1, self.queries_num + 1): - filename = f"query_{query_num}.sql" + for filename in self.query_files(): elapsed, line_count = self.run_sql(filename) if elapsed != -1: - results[filename] = { - "elapsed": elapsed, - "row_count": line_count - } - + results[filename] = {"elapsed": elapsed, "row_count": line_count} return results - def run_explain_sql(self, filename: str) -> Tuple[float, int]: - output_file = f"{self.output_path}/{self.benchmark}/explain/{filename.replace('.sql', '.txt')}" - + def run_explain_sql(self, filename: str) -> float: + out_txt = f"results/output/{self.benchmark}/explain/{filename.replace('.sql', '.txt')}" + # EXPLAIN ANALYZE is added here, around the canonical SQL — no separate + # per-tool explain query files. + sql = f".mode line\n.output {out_txt}\nEXPLAIN ANALYZE " + self._canonical_sql(filename) + print(f"\nRunning EXPLAIN {filename}") success = False - print(f"\nRunning {filename}") - sql_path = os.path.join(self.explain_path, filename) - if not os.path.exists(sql_path): - print(f"\tError: Query file not found: {sql_path}") - return -1, -1 - - with open(sql_path, "r") as f: - sql = f.read() - - sql = sql.replace(".output results/output/explain", f".output results/output/{self.benchmark}/explain") - while not success: result = subprocess.run( [self.duckdb_path, f"./databases/{self.benchmark}.db"], - input=sql, - capture_output=True, - text=True - ) + input=sql, capture_output=True, text=True) if result.returncode == 0: success = True else: print(f"\tError running query: {result.stderr}") print("\tTrying again...") time.sleep(1) - start_time = time.time() - - with open(output_file, "r") as f: - output = f.readlines() elapsed = -1.0 - for line in output: - match = re.search(r"Total Time:\s*([0-9.]+)s", line) - if match: - try: - elapsed = float(match.group(1)) * 1000 # convert to ms - except ValueError: - elapsed = -1.0 - break - + with open(f"{self.output_path}/{self.benchmark}/explain/{filename.replace('.sql', '.txt')}", "r") as f: + for line in f: + m = re.search(r"Total Time:\s*([0-9.]+)s", line) + if m: + try: + elapsed = float(m.group(1)) * 1000 + except ValueError: + elapsed = -1.0 + break print(f"\tDone in {elapsed:.2f}ms") - return elapsed def run_explain(self) -> Dict: - if not os.path.exists(f"./results/output/{self.benchmark}/explain"): - os.makedirs(f"./results/output/{self.benchmark}/explain") - + os.makedirs(f"./results/output/{self.benchmark}/explain", exist_ok=True) results = dict() - for query_num in range(1, self.queries_num + 1): - filename = f"query_{query_num}.sql" + for filename in self.query_files(): elapsed = self.run_explain_sql(filename) if elapsed != -1: results[filename] = elapsed return results + def main(): - parser = argparse.ArgumentParser(description="Data loader for BerlinMOD benchmark") + parser = argparse.ArgumentParser(description="Query runner for the BerlinMOD benchmark") parser.add_argument("--benchmark", type=str, required=True, help="Name of the benchmark run") parser.add_argument("--explain", type=int, default=0, choices=[0, 1], help="Run explain queries") - benchmark = parser.parse_args().benchmark - explain = parser.parse_args().explain + args = parser.parse_args() + benchmark, explain = args.benchmark, args.explain - if not os.path.exists(f"./results/output/{benchmark}"): - os.makedirs(f"./results/output/{benchmark}") + os.makedirs(f"./results/output/{benchmark}", exist_ok=True) duckdb_path = "../../build/release/duckdb" if not os.path.exists(duckdb_path): print(f"Error: DuckDB executable not found at {duckdb_path}") print("Please make sure you're running this from the benchmark directory and DuckDB is built.") sys.exit(1) - + if not os.path.exists(os.path.join(SUITE_PATH, "q01.sql")): + print(f"Error: canonical suite not found at {SUITE_PATH}. Run: git submodule update --init benchmark/BerlinMOD/suite") + sys.exit(1) + runner = QueryRunner(duckdb_path, benchmark) - if explain: - results = runner.run_explain() - else: - results = runner.run_queries() - - if not os.path.exists(f"./results/stats/{benchmark}"): - os.makedirs(f"./results/stats/{benchmark}") - - stats_filename = "run_queries.json" if not explain else "run_explain.json" + results = runner.run_explain() if explain else runner.run_queries() + + os.makedirs(f"./results/stats/{benchmark}", exist_ok=True) + stats_filename = "run_explain.json" if explain else "run_queries.json" with open(f"./results/stats/{benchmark}/{stats_filename}", "w") as f: json.dump(results, f, indent=4) - print(f"\nResults saved to ./results/stats/{benchmark}/{stats_filename}") + if __name__ == "__main__": - main() \ No newline at end of file + main() diff --git a/benchmark/BerlinMOD/sql/explain/query_1.sql b/benchmark/BerlinMOD/sql/explain/query_1.sql deleted file mode 100644 index 0f612c43..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_1.sql +++ /dev/null @@ -1,8 +0,0 @@ -.output results/output/explain/query_1.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -SELECT DISTINCT l.Licence, v.Model AS Model -FROM Vehicles v, Licences l -WHERE v.Licence = l.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_10.sql b/benchmark/BerlinMOD/sql/explain/query_10.sql deleted file mode 100644 index 4f04737f..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_10.sql +++ /dev/null @@ -1,30 +0,0 @@ -.output results/output/explain/query_10.txt - -SET memory_limit = '20GB'; - -/* Old version -EXPLAIN ANALYZE -WITH Values AS ( - SELECT DISTINCT l1.Licence AS QueryLicence, l2.Licence AS OtherLicence, - atTime(t1.Trip, getTime(atValues(tdwithin(t1.Trip, t2.Trip, 3.0), TRUE))) AS Pos - FROM Trips t1, Licences1 l1, Trips t2, Licences2 l2 - WHERE t1.VehicleId = l1.VehicleId AND t2.VehicleId = l2.VehicleId AND - t1.VehicleId < t2.VehicleId AND - expandSpace(t1.Trip::STBOX, 3) && expandSpace(t2.Trip::STBOX, 3) AND - eDwithin(t1.Trip, t2.Trip, 3.0) ) -SELECT QueryLicence, OtherLicence, array_agg(Pos ORDER BY startTimestamp(Pos)) AS Pos -FROM Values -GROUP BY QueryLicence, OtherLicence -ORDER BY QueryLicence, OtherLicence; -*/ - -EXPLAIN ANALYZE -WITH Temp AS ( - SELECT l1.Licence AS Licence1, t2.VehicleId AS Car2Id, - whenTrue(tDwithin(t1.Trip, t2.Trip, 3.0)) AS Periods - FROM Trips t1, Licences1 l1, Trips t2, Vehicles v - WHERE t1.VehicleId = l1.VehicleId AND t2.VehicleId = v.VehicleId AND - t1.VehicleId <> t2.VehicleId AND t2.Trip && expandSpace(t1.trip::STBOX, 3.0) ) -SELECT Licence1, Car2Id, Periods -FROM Temp -WHERE Periods IS NOT NULL; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_11.sql b/benchmark/BerlinMOD/sql/explain/query_11.sql deleted file mode 100644 index 5a8711ca..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_11.sql +++ /dev/null @@ -1,25 +0,0 @@ -.output results/output/explain/query_11.txt - -SET memory_limit = '20GB'; - -/* Old version -EXPLAIN ANALYZE -SELECT p.PointId, p.Geom, i.InstantId, i.Instant, v.Licence -FROM Trips t, Vehicles v, Points1 p, Instants1 i -WHERE - t.VehicleId = v.VehicleId - AND t.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND valueAtTimestamp(t.Trip, i.Instant) = p.Geom -ORDER BY p.PointId, i.InstantId, v.Licence; -*/ - -EXPLAIN ANALYZE -WITH Temp AS ( - SELECT p.PointId, p.Geom, i.InstantId, i.Instant, t.VehicleId - FROM Trips t, Points1 p, Instants1 i - WHERE - t.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND valueAtTimestamp(t.Trip, i.Instant) = p.Geom ) -SELECT t.PointId, t.Geom, t.InstantId, t.Instant, v.Licence -FROM Temp t JOIN Vehicles v ON t.VehicleId = v.VehicleId -ORDER BY t.PointId, t.InstantId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_12.sql b/benchmark/BerlinMOD/sql/explain/query_12.sql deleted file mode 100644 index be419bd9..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_12.sql +++ /dev/null @@ -1,35 +0,0 @@ -.output results/output/explain/query_12.txt - -SET memory_limit = '20GB'; - -/* Old version -EXPLAIN ANALYZE -SELECT DISTINCT p.PointId, p.Geom, i.InstantId, i.Instant, - v1.Licence AS Licence1, v2.Licence AS Licence2 -FROM Trips t1, Vehicles v1, Trips t2, Vehicles v2, Points1 p, Instants1 i -WHERE - t1.VehicleId = v1.VehicleId - AND t2.VehicleId = v2.VehicleId - AND t1.VehicleId < t2.VehicleId - AND t1.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND t2.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND valueAtTimestamp(t1.Trip, i.Instant) = p.Geom - AND valueAtTimestamp(t2.Trip, i.Instant) = p.Geom -ORDER BY p.PointId, i.InstantId, v1.Licence, v2.Licence; -*/ - -EXPLAIN ANALYZE -WITH Temp AS ( - SELECT DISTINCT p.PointId, p.Geom, i.InstantId, i.Instant, t.VehicleId - FROM Trips t, Points1 p, Instants1 i - WHERE t.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND valueAtTimestamp(t.Trip, i.Instant) = p.Geom ) -SELECT DISTINCT t1.PointId, t1.Geom, t1.InstantId, t1.Instant, - v1.Licence AS Licence1, v2.Licence AS Licence2 -FROM Temp t1 - JOIN Vehicles v1 ON t1.VehicleId = v1.VehicleId - JOIN Temp t2 ON t1.VehicleId < t2.VehicleId - AND t1.PointID = t2.PointID - AND t1.InstantId = t2.InstantId - JOIN Vehicles v2 ON t2.VehicleId = v2.VehicleId -ORDER BY t1.PointId, t1.InstantId, v1.Licence, v2.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_13.sql b/benchmark/BerlinMOD/sql/explain/query_13.sql deleted file mode 100644 index 3bfdcdff..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_13.sql +++ /dev/null @@ -1,27 +0,0 @@ -.output results/output/explain/query_13.txt - -SET memory_limit = '20GB'; - -/* Old version -EXPLAIN ANALYZE -SELECT DISTINCT r.RegionId, p.PeriodId, p.Period, v.Licence -FROM Trips t, Vehicles v, Regions1 r, Periods1 p -WHERE - t.VehicleId = v.VehicleId - AND t.trip && stbox(r.Geom::WKB_BLOB, p.Period) - AND ST_Intersects(trajectory(atTime(t.Trip, p.Period))::GEOMETRY, r.Geom) -ORDER BY r.RegionId, p.PeriodId, v.Licence; -*/ - -EXPLAIN ANALYZE -WITH Temp AS ( - SELECT DISTINCT r.RegionId, p.PeriodId, p.Period, t.VehicleId - FROM Trips t, Regions1 r, Periods1 p - WHERE - t.trip && stbox(r.Geom::WKB_BLOB, p.Period) - AND ST_Intersects(trajectory(atTime(t.Trip, p.Period))::GEOMETRY, r.Geom) - ORDER BY r.RegionId, p.PeriodId ) -SELECT DISTINCT t.RegionId, t.PeriodId, t.Period, v.Licence -FROM Temp t, Vehicles v -WHERE t.VehicleId = v.VehicleId -ORDER BY t.RegionId, t.PeriodId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_14.sql b/benchmark/BerlinMOD/sql/explain/query_14.sql deleted file mode 100644 index 16ca6377..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_14.sql +++ /dev/null @@ -1,25 +0,0 @@ -.output results/output/explain/query_14.txt - -SET memory_limit = '20GB'; - -/* Old version -EXPLAIN ANALYZE -SELECT DISTINCT r.RegionId, i.InstantId, i.Instant, v.Licence -FROM Trips t, Vehicles v, Regions1 r, Instants1 i -WHERE - t.VehicleId = v.VehicleId - AND t.Trip && stbox(r.Geom::WKB_BLOB, i.Instant) - AND ST_Contains(r.Geom, valueAtTimestamp(t.Trip, i.Instant)::GEOMETRY) -ORDER BY r.RegionId, i.InstantId, v.Licence; -*/ - -EXPLAIN ANALYZE -WITH Temp AS ( - SELECT DISTINCT r.RegionId, i.InstantId, i.Instant, t.VehicleId - FROM Trips t, Regions1 r, Instants1 i - WHERE - t.Trip && stbox(r.Geom::WKB_BLOB, i.Instant) - AND ST_Contains(r.Geom, valueAtTimestamp(t.Trip, i.Instant)::GEOMETRY) ) -SELECT DISTINCT t.RegionId, t.InstantId, t.Instant, v.Licence -FROM Temp t JOIN Vehicles v ON t.VehicleId = v.VehicleId -ORDER BY t.RegionId, t.InstantId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_15.sql b/benchmark/BerlinMOD/sql/explain/query_15.sql deleted file mode 100644 index 09225d73..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_15.sql +++ /dev/null @@ -1,25 +0,0 @@ -.output results/output/explain/query_15.txt - -SET memory_limit = '20GB'; - -/* Old version -EXPLAIN ANALYZE -SELECT DISTINCT pt.PointId, pt.Geom, pr.PeriodId, pr.Period, v.Licence -FROM Trips t, Vehicles v, Points1 pt, Periods1 pr -WHERE - t.VehicleId = v.VehicleId - AND t.Trip && stbox(pt.Geom::WKB_BLOB, pr.Period) - AND ST_Intersects(trajectory(atTime(t.Trip, pr.Period))::GEOMETRY, pt.Geom) -ORDER BY pt.PointId, pr.PeriodId, v.Licence; -*/ - -EXPLAIN ANALYZE -WITH Temp AS ( - SELECT DISTINCT pt.PointId, pt.Geom, pr.PeriodId, pr.Period, t.VehicleId - FROM Trips t, Points1 pt, Periods1 pr - WHERE t.Trip && stbox(pt.Geom::WKB_BLOB, pr.Period) - AND ST_Intersects(trajectory(atTime(t.Trip, pr.Period))::GEOMETRY, pt.Geom) ) -SELECT DISTINCT t.PointId, t.Geom, t.PeriodId, t.Period, v.Licence -FROM Temp t, Vehicles v -WHERE t.VehicleId = v.VehicleId -ORDER BY t.PointId, t.PeriodId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_16.sql b/benchmark/BerlinMOD/sql/explain/query_16.sql deleted file mode 100644 index f8682e05..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_16.sql +++ /dev/null @@ -1,17 +0,0 @@ -.output results/output/explain/query_16.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -SELECT p.PeriodId, p.Period, r.RegionId, l1.Licence AS Licence1, l2.Licence AS Licence2 -FROM Trips t1, Licences1 l1, Trips t2, Licences2 l2, Periods1 p, Regions1 r -WHERE - t1.VehicleId = l1.VehicleId - AND t2.VehicleId = l2.VehicleId - AND l1.Licence < l2.Licence - -- AND t1.Trip && stbox(r.Geom::WKB_BLOB, p.Period) - -- AND t2.Trip && stbox(r.Geom::WKB_BLOB, p.Period) - AND ST_Intersects(trajectory(atTime(t1.Trip, p.Period))::GEOMETRY, r.Geom) - AND ST_Intersects(trajectory(atTime(t2.Trip, p.Period))::GEOMETRY, r.Geom) - AND aDisjoint(atTime(t1.Trip, p.Period), atTime(t2.Trip, p.Period)) -ORDER BY PeriodId, RegionId, Licence1, Licence2; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_17.sql b/benchmark/BerlinMOD/sql/explain/query_17.sql deleted file mode 100644 index a632d1d7..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_17.sql +++ /dev/null @@ -1,13 +0,0 @@ -.output results/output/explain/query_17.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -WITH PointCount AS ( - SELECT p.PointId, COUNT(DISTINCT t.VehicleId) AS Hits - FROM Trips t, Points p - WHERE ST_Intersects(trajectory(t.Trip)::GEOMETRY, p.Geom) - GROUP BY p.PointId ) -SELECT PointId, Hits -FROM PointCount AS p -WHERE p.Hits = ( SELECT MAX(Hits) FROM PointCount ); \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_2.sql b/benchmark/BerlinMOD/sql/explain/query_2.sql deleted file mode 100644 index 9b60eae0..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_2.sql +++ /dev/null @@ -1,8 +0,0 @@ -.output results/output/explain/query_2.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -SELECT COUNT (DISTINCT Licence) -FROM Vehicles v -WHERE VehicleType = 'passenger'; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_3.sql b/benchmark/BerlinMOD/sql/explain/query_3.sql deleted file mode 100644 index 370ac23b..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_3.sql +++ /dev/null @@ -1,10 +0,0 @@ -.output results/output/explain/query_3.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -SELECT DISTINCT l.Licence, i.InstantId, i.Instant AS Instant, - valueAtTimestamp(t.Trip, i.Instant)::GEOMETRY AS Pos -FROM Trips t, Licences1 l, Instants1 i -WHERE t.VehicleId = l.VehicleId AND t.Trip::tstzspan @> i.Instant -ORDER BY l.Licence, i.InstantId; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_4.sql b/benchmark/BerlinMOD/sql/explain/query_4.sql deleted file mode 100644 index d8bd744d..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_4.sql +++ /dev/null @@ -1,11 +0,0 @@ -.output results/output/explain/query_4.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -SELECT DISTINCT p.PointId, p.Geom, v.Licence -FROM Trips t, Vehicles v, Points p -WHERE - t.VehicleId = v.VehicleId - AND ST_Intersects(trajectory(t.Trip)::GEOMETRY, p.Geom) -ORDER BY p.PointId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_5.sql b/benchmark/BerlinMOD/sql/explain/query_5.sql deleted file mode 100644 index e1eb3164..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_5.sql +++ /dev/null @@ -1,32 +0,0 @@ -.output results/output/explain/query_5.txt - -SET memory_limit = '20GB'; - -/* Slow version -EXPLAIN ANALYZE -SELECT l1.Licence AS Licence1, l2.Licence AS Licence2, - MIN(ST_Distance(trajectory(t1.Trip)::GEOMETRY, - trajectory(t2.Trip)::GEOMETRY)) AS MinDist -FROM Trips t1, Licences1 l1, Trips t2, Licences2 l2 -WHERE - t1.VehicleId = l1.VehicleId - AND t2.VehicleId = l2.VehicleId - AND t1.VehicleId < t2.VehicleId -GROUP BY l1.Licence, l2.Licence -ORDER BY l1.Licence, l2.Licence; -*/ - -EXPLAIN ANALYZE -WITH Temp1(Licence1, Trajs) AS ( - SELECT l1.Licence, collect_gs(list(trajectory_gs(t1.Trip))) - FROM Trips t1, Licences1 l1 - WHERE t1.VehicleId = l1.VehicleId - GROUP BY l1.Licence ), -Temp2(Licence2, Trajs) AS ( - SELECT l2.Licence, collect_gs(list(trajectory_gs(t2.Trip))) - FROM Trips t2, Licences2 l2 - WHERE t2.VehicleId = l2.VehicleId - GROUP BY l2.Licence ) -SELECT Licence1, Licence2, distance_gs(t1.Trajs, t2.Trajs) AS MinDist -FROM Temp1 t1, Temp2 t2 -ORDER BY Licence1, Licence2; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_6.sql b/benchmark/BerlinMOD/sql/explain/query_6.sql deleted file mode 100644 index 23a015c3..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_6.sql +++ /dev/null @@ -1,33 +0,0 @@ -.output results/output/explain/query_6.txt - -SET memory_limit = '20GB'; - -/* SLOWER VERSION - -EXPLAIN ANALYZE -SELECT DISTINCT v1.Licence AS Licence1, v2.Licence AS Licence2 -FROM Trips t1, Vehicles v1, Trips t2, Vehicles v2 -WHERE - t1.VehicleId = v1.VehicleId - AND t2.VehicleId = v2.VehicleId - AND t1.VehicleId < t2.VehicleId - AND v1.VehicleType = 'truck' - AND v2.VehicleType = 'truck' - AND t1.Trip && expandSpace(t2.Trip::STBOX, 10) - AND eDwithin(t1.Trip, t2.Trip, 10.0) -ORDER BY v1.Licence, v2.Licence; - -*/ - -EXPLAIN ANALYZE -WITH Temp(Licence, VehicleId, Trip) AS ( - SELECT v.Licence, t.VehicleId, t.Trip - FROM Trips t, Vehicles v - WHERE t.VehicleId = v.VehicleId - AND v.VehicleType = 'truck' ) -SELECT t1.Licence, t2.Licence -FROM Temp t1, Temp t2 -WHERE t1.VehicleId < t2.VehicleId - AND t1.Trip && expandSpace(t2.Trip::STBOX, 10) - AND eDwithin(t1.Trip, t2.Trip, 10.0) -ORDER BY t1.Licence, t2.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_7.sql b/benchmark/BerlinMOD/sql/explain/query_7.sql deleted file mode 100644 index d95e94de..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_7.sql +++ /dev/null @@ -1,22 +0,0 @@ -.output results/output/explain/query_7.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -WITH Timestamps AS ( - SELECT DISTINCT v.Licence, p.PointId, p.Geom, - MIN(startTimestamp(atValues(t.Trip,p.Geom::WKB_BLOB))) AS Instant - FROM Trips t, Vehicles v, Points1 p - WHERE - t.VehicleId = v.VehicleId - AND v.VehicleType = 'passenger' - AND t.Trip && stbox(p.Geom::WKB_BLOB) - AND ST_Intersects(trajectory(t.Trip)::GEOMETRY, p.Geom) - GROUP BY v.Licence, p.PointId, p.Geom ) -SELECT t1.Licence, t1.PointId, t1.Geom, t1.Instant -FROM Timestamps t1 -WHERE t1.Instant <= ALL ( - SELECT t2.Instant - FROM Timestamps t2 - WHERE t1.PointId = t2.PointId ) -ORDER BY t1.PointId, t1.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_8.sql b/benchmark/BerlinMOD/sql/explain/query_8.sql deleted file mode 100644 index 1f623b96..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_8.sql +++ /dev/null @@ -1,11 +0,0 @@ -.output results/output/explain/query_8.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -SELECT l.Licence, p.PeriodId, p.Period, - SUM(length(atTime(t.Trip, p.Period))) AS Dist -FROM Trips t, Licences1 l, Periods1 p -WHERE t.VehicleId = l.VehicleId AND t.Trip && p.Period -GROUP BY l.Licence, p.PeriodId, p.Period -ORDER BY l.Licence, p.PeriodId; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/explain/query_9.sql b/benchmark/BerlinMOD/sql/explain/query_9.sql deleted file mode 100644 index 795d41d3..00000000 --- a/benchmark/BerlinMOD/sql/explain/query_9.sql +++ /dev/null @@ -1,15 +0,0 @@ -.output results/output/explain/query_9.txt - -SET memory_limit = '20GB'; - -EXPLAIN ANALYZE -WITH Distances AS ( - SELECT p.PeriodId, p.Period, t.VehicleId, - SUM(length(atTime(t.Trip, p.Period))) AS Dist - FROM Trips t, Periods p - WHERE t.Trip && p.Period - GROUP BY p.PeriodId, p.Period, t.VehicleId ) -SELECT PeriodId, Period, MAX(Dist) AS MaxDist -FROM Distances -GROUP BY PeriodId, Period -ORDER BY PeriodId; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_1.sql b/benchmark/BerlinMOD/sql/queries/query_1.sql deleted file mode 100644 index e48b22c5..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_1.sql +++ /dev/null @@ -1,6 +0,0 @@ -.mode csv -.output results/output/query_1.csv - -SELECT DISTINCT l.Licence, v.Model AS Model -FROM Vehicles v, Licences l -WHERE v.Licence = l.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_10.sql b/benchmark/BerlinMOD/sql/queries/query_10.sql deleted file mode 100644 index 49be73cb..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_10.sql +++ /dev/null @@ -1,27 +0,0 @@ -.mode csv -.output results/output/query_10.csv - -/* Old version -WITH Values AS ( - SELECT DISTINCT l1.Licence AS QueryLicence, l2.Licence AS OtherLicence, - atTime(t1.Trip, getTime(atValues(tdwithin(t1.Trip, t2.Trip, 3.0), TRUE))) AS Pos - FROM Trips t1, Licences1 l1, Trips t2, Licences2 l2 - WHERE t1.VehicleId = l1.VehicleId AND t2.VehicleId = l2.VehicleId AND - t1.VehicleId < t2.VehicleId AND - expandSpace(t1.Trip::STBOX, 3) && expandSpace(t2.Trip::STBOX, 3) AND - eDwithin(t1.Trip, t2.Trip, 3.0) ) -SELECT QueryLicence, OtherLicence, array_agg(Pos ORDER BY startTimestamp(Pos)) AS Pos -FROM Values -GROUP BY QueryLicence, OtherLicence -ORDER BY QueryLicence, OtherLicence; -*/ - -WITH Temp AS ( - SELECT l1.Licence AS Licence1, t2.VehicleId AS Car2Id, - whenTrue(tDwithin(t1.Trip, t2.Trip, 3.0)) AS Periods - FROM Trips t1, Licences1 l1, Trips t2, Vehicles v - WHERE t1.VehicleId = l1.VehicleId AND t2.VehicleId = v.VehicleId AND - t1.VehicleId <> t2.VehicleId AND t2.Trip && expandSpace(t1.trip::STBOX, 3.0) ) -SELECT Licence1, Car2Id, Periods -FROM Temp -WHERE Periods IS NOT NULL; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_11.sql b/benchmark/BerlinMOD/sql/queries/query_11.sql deleted file mode 100644 index 31a19bd6..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_11.sql +++ /dev/null @@ -1,22 +0,0 @@ -.mode csv -.output results/output/query_11.csv - -/* Old version -SELECT p.PointId, p.Geom, i.InstantId, i.Instant, v.Licence -FROM Trips t, Vehicles v, Points1 p, Instants1 i -WHERE - t.VehicleId = v.VehicleId - AND t.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND valueAtTimestamp(t.Trip, i.Instant) = p.Geom -ORDER BY p.PointId, i.InstantId, v.Licence; -*/ - -WITH Temp AS ( - SELECT p.PointId, p.Geom, i.InstantId, i.Instant, t.VehicleId - FROM Trips t, Points1 p, Instants1 i - WHERE - t.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND valueAtTimestamp(t.Trip, i.Instant) = p.Geom ) -SELECT t.PointId, t.Geom, t.InstantId, t.Instant, v.Licence -FROM Temp t JOIN Vehicles v ON t.VehicleId = v.VehicleId -ORDER BY t.PointId, t.InstantId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_12.sql b/benchmark/BerlinMOD/sql/queries/query_12.sql deleted file mode 100644 index cf4ab9da..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_12.sql +++ /dev/null @@ -1,32 +0,0 @@ -.mode csv -.output results/output/query_12.csv - -/* Old version -SELECT DISTINCT p.PointId, p.Geom, i.InstantId, i.Instant, - v1.Licence AS Licence1, v2.Licence AS Licence2 -FROM Trips t1, Vehicles v1, Trips t2, Vehicles v2, Points1 p, Instants1 i -WHERE - t1.VehicleId = v1.VehicleId - AND t2.VehicleId = v2.VehicleId - AND t1.VehicleId < t2.VehicleId - AND t1.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND t2.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND valueAtTimestamp(t1.Trip, i.Instant) = p.Geom - AND valueAtTimestamp(t2.Trip, i.Instant) = p.Geom -ORDER BY p.PointId, i.InstantId, v1.Licence, v2.Licence; -*/ - -WITH Temp AS ( - SELECT DISTINCT p.PointId, p.Geom, i.InstantId, i.Instant, t.VehicleId - FROM Trips t, Points1 p, Instants1 i - WHERE t.Trip @> stbox(p.Geom::WKB_BLOB, i.Instant) - AND valueAtTimestamp(t.Trip, i.Instant) = p.Geom ) -SELECT DISTINCT t1.PointId, t1.Geom, t1.InstantId, t1.Instant, - v1.Licence AS Licence1, v2.Licence AS Licence2 -FROM Temp t1 - JOIN Vehicles v1 ON t1.VehicleId = v1.VehicleId - JOIN Temp t2 ON t1.VehicleId < t2.VehicleId - AND t1.PointID = t2.PointID - AND t1.InstantId = t2.InstantId - JOIN Vehicles v2 ON t2.VehicleId = v2.VehicleId -ORDER BY t1.PointId, t1.InstantId, v1.Licence, v2.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_13.sql b/benchmark/BerlinMOD/sql/queries/query_13.sql deleted file mode 100644 index e12fe8ce..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_13.sql +++ /dev/null @@ -1,24 +0,0 @@ -.mode csv -.output results/output/query_13.csv - -/* Old version -SELECT DISTINCT r.RegionId, p.PeriodId, p.Period, v.Licence -FROM Trips t, Vehicles v, Regions1 r, Periods1 p -WHERE - t.VehicleId = v.VehicleId - AND t.trip && stbox(r.Geom::WKB_BLOB, p.Period) - AND ST_Intersects(trajectory(atTime(t.Trip, p.Period))::GEOMETRY, r.Geom) -ORDER BY r.RegionId, p.PeriodId, v.Licence; -*/ - -WITH Temp AS ( - SELECT DISTINCT r.RegionId, p.PeriodId, p.Period, t.VehicleId - FROM Trips t, Regions1 r, Periods1 p - WHERE - t.trip && stbox(r.Geom::WKB_BLOB, p.Period) - AND ST_Intersects(trajectory(atTime(t.Trip, p.Period))::GEOMETRY, r.Geom) - ORDER BY r.RegionId, p.PeriodId ) -SELECT DISTINCT t.RegionId, t.PeriodId, t.Period, v.Licence -FROM Temp t, Vehicles v -WHERE t.VehicleId = v.VehicleId -ORDER BY t.RegionId, t.PeriodId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_14.sql b/benchmark/BerlinMOD/sql/queries/query_14.sql deleted file mode 100644 index 4c88648e..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_14.sql +++ /dev/null @@ -1,22 +0,0 @@ -.mode csv -.output results/output/query_14.csv - -/* Old version -SELECT DISTINCT r.RegionId, i.InstantId, i.Instant, v.Licence -FROM Trips t, Vehicles v, Regions1 r, Instants1 i -WHERE - t.VehicleId = v.VehicleId - AND t.Trip && stbox(r.Geom::WKB_BLOB, i.Instant) - AND ST_Contains(r.Geom, valueAtTimestamp(t.Trip, i.Instant)::GEOMETRY) -ORDER BY r.RegionId, i.InstantId, v.Licence; -*/ - -WITH Temp AS ( - SELECT DISTINCT r.RegionId, i.InstantId, i.Instant, t.VehicleId - FROM Trips t, Regions1 r, Instants1 i - WHERE - t.Trip && stbox(r.Geom::WKB_BLOB, i.Instant) - AND ST_Contains(r.Geom, valueAtTimestamp(t.Trip, i.Instant)::GEOMETRY) ) -SELECT DISTINCT t.RegionId, t.InstantId, t.Instant, v.Licence -FROM Temp t JOIN Vehicles v ON t.VehicleId = v.VehicleId -ORDER BY t.RegionId, t.InstantId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_15.sql b/benchmark/BerlinMOD/sql/queries/query_15.sql deleted file mode 100644 index f7b98838..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_15.sql +++ /dev/null @@ -1,22 +0,0 @@ -.mode csv -.output results/output/query_15.csv - -/* Old version -SELECT DISTINCT pt.PointId, pt.Geom, pr.PeriodId, pr.Period, v.Licence -FROM Trips t, Vehicles v, Points1 pt, Periods1 pr -WHERE - t.VehicleId = v.VehicleId - AND t.Trip && stbox(pt.Geom::WKB_BLOB, pr.Period) - AND ST_Intersects(trajectory(atTime(t.Trip, pr.Period))::GEOMETRY, pt.Geom) -ORDER BY pt.PointId, pr.PeriodId, v.Licence; -*/ - -WITH Temp AS ( - SELECT DISTINCT pt.PointId, pt.Geom, pr.PeriodId, pr.Period, t.VehicleId - FROM Trips t, Points1 pt, Periods1 pr - WHERE t.Trip && stbox(pt.Geom::WKB_BLOB, pr.Period) - AND ST_Intersects(trajectory(atTime(t.Trip, pr.Period))::GEOMETRY, pt.Geom) ) -SELECT DISTINCT t.PointId, t.Geom, t.PeriodId, t.Period, v.Licence -FROM Temp t, Vehicles v -WHERE t.VehicleId = v.VehicleId -ORDER BY t.PointId, t.PeriodId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_16.sql b/benchmark/BerlinMOD/sql/queries/query_16.sql deleted file mode 100644 index 3a017ef1..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_16.sql +++ /dev/null @@ -1,15 +0,0 @@ -.mode csv -.output results/output/query_16.csv - -SELECT p.PeriodId, p.Period, r.RegionId, l1.Licence AS Licence1, l2.Licence AS Licence2 -FROM Trips t1, Licences1 l1, Trips t2, Licences2 l2, Periods1 p, Regions1 r -WHERE - t1.VehicleId = l1.VehicleId - AND t2.VehicleId = l2.VehicleId - AND l1.Licence < l2.Licence - -- AND t1.Trip && stbox(r.Geom::WKB_BLOB, p.Period) - -- AND t2.Trip && stbox(r.Geom::WKB_BLOB, p.Period) - AND ST_Intersects(trajectory(atTime(t1.Trip, p.Period))::GEOMETRY, r.Geom) - AND ST_Intersects(trajectory(atTime(t2.Trip, p.Period))::GEOMETRY, r.Geom) - AND aDisjoint(atTime(t1.Trip, p.Period), atTime(t2.Trip, p.Period)) -ORDER BY PeriodId, RegionId, Licence1, Licence2; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_17.sql b/benchmark/BerlinMOD/sql/queries/query_17.sql deleted file mode 100644 index 71dd8a9b..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_17.sql +++ /dev/null @@ -1,11 +0,0 @@ -.mode csv -.output results/output/query_17.csv - -WITH PointCount AS ( - SELECT p.PointId, COUNT(DISTINCT t.VehicleId) AS Hits - FROM Trips t, Points p - WHERE ST_Intersects(trajectory(t.Trip)::GEOMETRY, p.Geom) - GROUP BY p.PointId ) -SELECT PointId, Hits -FROM PointCount AS p -WHERE p.Hits = ( SELECT MAX(Hits) FROM PointCount ); \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_2.sql b/benchmark/BerlinMOD/sql/queries/query_2.sql deleted file mode 100644 index 81e4e686..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_2.sql +++ /dev/null @@ -1,6 +0,0 @@ -.mode csv -.output results/output/query_2.csv - -SELECT COUNT (DISTINCT Licence) -FROM Vehicles v -WHERE VehicleType = 'passenger'; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_3.sql b/benchmark/BerlinMOD/sql/queries/query_3.sql deleted file mode 100644 index 2f6b19a4..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_3.sql +++ /dev/null @@ -1,8 +0,0 @@ -.mode csv -.output results/output/query_3.csv - -SELECT DISTINCT l.Licence, i.InstantId, i.Instant AS Instant, - valueAtTimestamp(t.Trip, i.Instant)::GEOMETRY AS Pos -FROM Trips t, Licences1 l, Instants1 i -WHERE t.VehicleId = l.VehicleId AND t.Trip::tstzspan @> i.Instant -ORDER BY l.Licence, i.InstantId; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_4.sql b/benchmark/BerlinMOD/sql/queries/query_4.sql deleted file mode 100644 index 1267a3a1..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_4.sql +++ /dev/null @@ -1,9 +0,0 @@ -.mode csv -.output results/output/query_4.csv - -SELECT DISTINCT p.PointId, p.Geom, v.Licence -FROM Trips t, Vehicles v, Points p -WHERE - t.VehicleId = v.VehicleId - AND ST_Intersects(trajectory(t.Trip)::GEOMETRY, p.Geom) -ORDER BY p.PointId, v.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_5.sql b/benchmark/BerlinMOD/sql/queries/query_5.sql deleted file mode 100644 index e644a36b..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_5.sql +++ /dev/null @@ -1,29 +0,0 @@ -.mode csv -.output results/output/query_5.csv - -/* Slow version -SELECT l1.Licence AS Licence1, l2.Licence AS Licence2, - MIN(ST_Distance(trajectory(t1.Trip)::GEOMETRY, - trajectory(t2.Trip)::GEOMETRY)) AS MinDist -FROM Trips t1, Licences1 l1, Trips t2, Licences2 l2 -WHERE - t1.VehicleId = l1.VehicleId - AND t2.VehicleId = l2.VehicleId - AND t1.VehicleId < t2.VehicleId -GROUP BY l1.Licence, l2.Licence -ORDER BY l1.Licence, l2.Licence; -*/ - -WITH Temp1(Licence1, Trajs) AS ( - SELECT l1.Licence, collect_gs(list(trajectory_gs(t1.Trip))) - FROM Trips t1, Licences1 l1 - WHERE t1.VehicleId = l1.VehicleId - GROUP BY l1.Licence ), -Temp2(Licence2, Trajs) AS ( - SELECT l2.Licence, collect_gs(list(trajectory_gs(t2.Trip))) - FROM Trips t2, Licences2 l2 - WHERE t2.VehicleId = l2.VehicleId - GROUP BY l2.Licence ) -SELECT Licence1, Licence2, distance_gs(t1.Trajs, t2.Trajs) AS MinDist -FROM Temp1 t1, Temp2 t2 -ORDER BY Licence1, Licence2; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_6.sql b/benchmark/BerlinMOD/sql/queries/query_6.sql deleted file mode 100644 index c3a85a13..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_6.sql +++ /dev/null @@ -1,30 +0,0 @@ -.mode csv -.output results/output/query_6.csv - -/* SLOWER VERSION - -SELECT DISTINCT v1.Licence AS Licence1, v2.Licence AS Licence2 -FROM Trips t1, Vehicles v1, Trips t2, Vehicles v2 -WHERE - t1.VehicleId = v1.VehicleId - AND t2.VehicleId = v2.VehicleId - AND t1.VehicleId < t2.VehicleId - AND v1.VehicleType = 'truck' - AND v2.VehicleType = 'truck' - AND t1.Trip && expandSpace(t2.Trip::STBOX, 10) - AND eDwithin(t1.Trip, t2.Trip, 10.0) -ORDER BY v1.Licence, v2.Licence; - -*/ - -WITH Temp(Licence, VehicleId, Trip) AS ( - SELECT v.Licence, t.VehicleId, t.Trip - FROM Trips t, Vehicles v - WHERE t.VehicleId = v.VehicleId - AND v.VehicleType = 'truck' ) -SELECT t1.Licence, t2.Licence -FROM Temp t1, Temp t2 -WHERE t1.VehicleId < t2.VehicleId - AND t1.Trip && expandSpace(t2.Trip::STBOX, 10) - AND eDwithin(t1.Trip, t2.Trip, 10.0) -ORDER BY t1.Licence, t2.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_7.sql b/benchmark/BerlinMOD/sql/queries/query_7.sql deleted file mode 100644 index 39811c9e..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_7.sql +++ /dev/null @@ -1,20 +0,0 @@ -.mode csv -.output results/output/query_7.csv - -WITH Timestamps AS ( - SELECT DISTINCT v.Licence, p.PointId, p.Geom, - MIN(startTimestamp(atValues(t.Trip,p.Geom::WKB_BLOB))) AS Instant - FROM Trips t, Vehicles v, Points1 p - WHERE - t.VehicleId = v.VehicleId - AND v.VehicleType = 'passenger' - AND t.Trip && stbox(p.Geom::WKB_BLOB) - AND ST_Intersects(trajectory(t.Trip)::GEOMETRY, p.Geom) - GROUP BY v.Licence, p.PointId, p.Geom ) -SELECT t1.Licence, t1.PointId, t1.Geom, t1.Instant -FROM Timestamps t1 -WHERE t1.Instant <= ALL ( - SELECT t2.Instant - FROM Timestamps t2 - WHERE t1.PointId = t2.PointId ) -ORDER BY t1.PointId, t1.Licence; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_8.sql b/benchmark/BerlinMOD/sql/queries/query_8.sql deleted file mode 100644 index 87a15e8b..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_8.sql +++ /dev/null @@ -1,9 +0,0 @@ -.mode csv -.output results/output/query_8.csv - -SELECT l.Licence, p.PeriodId, p.Period, - SUM(length(atTime(t.Trip, p.Period))) AS Dist -FROM Trips t, Licences1 l, Periods1 p -WHERE t.VehicleId = l.VehicleId AND t.Trip && p.Period -GROUP BY l.Licence, p.PeriodId, p.Period -ORDER BY l.Licence, p.PeriodId; \ No newline at end of file diff --git a/benchmark/BerlinMOD/sql/queries/query_9.sql b/benchmark/BerlinMOD/sql/queries/query_9.sql deleted file mode 100644 index 36eae37a..00000000 --- a/benchmark/BerlinMOD/sql/queries/query_9.sql +++ /dev/null @@ -1,13 +0,0 @@ -.mode csv -.output results/output/query_9.csv - -WITH Distances AS ( - SELECT p.PeriodId, p.Period, t.VehicleId, - SUM(length(atTime(t.Trip, p.Period))) AS Dist - FROM Trips t, Periods p - WHERE t.Trip && p.Period - GROUP BY p.PeriodId, p.Period, t.VehicleId ) -SELECT PeriodId, Period, MAX(Dist) AS MaxDist -FROM Distances -GROUP BY PeriodId, Period -ORDER BY PeriodId; \ No newline at end of file diff --git a/benchmark/BerlinMOD/suite b/benchmark/BerlinMOD/suite new file mode 160000 index 00000000..a31197fd --- /dev/null +++ b/benchmark/BerlinMOD/suite @@ -0,0 +1 @@ +Subproject commit a31197fdda2bf85706cb6e3ecc2c477b3a635d6e