Skip to content

Commit

Permalink
Add new comparable blueprint abstract method
Browse files Browse the repository at this point in the history
  • Loading branch information
geoffxy committed Nov 18, 2023
1 parent 7055f71 commit 9222041
Show file tree
Hide file tree
Showing 3 changed files with 35 additions and 0 deletions.
13 changes: 13 additions & 0 deletions src/brad/planner/beam/query_based_candidate.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
compute_single_aurora_table_cost,
compute_single_table_movement_time_and_cost,
)
from brad.planner.workload import Workload
from brad.planner.workload.query import Query
from brad.routing.abstract_policy import FullRoutingPolicy
from brad.routing.cached import CachedLocationPolicy
Expand Down Expand Up @@ -659,6 +660,18 @@ def get_aurora_provisioning(self) -> Provisioning:
def get_redshift_provisioning(self) -> Provisioning:
return self.redshift_provisioning

def get_routing_decisions(self) -> npt.NDArray:
engine_query = np.array(
[
(Workload.EngineLatencyIndex[engine], idx)
for engine, qidxs in self.query_locations.items()
for idx in qidxs
]
)
si = np.argsort(engine_query[:, 1])
sorted_queries = engine_query[si]
return sorted_queries[:, 0]

def get_predicted_analytical_latencies(self) -> npt.NDArray:
relevant = []
relevant.append(self.scaled_query_latencies[Engine.Aurora])
Expand Down
13 changes: 13 additions & 0 deletions src/brad/planner/beam/table_based_candidate.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
compute_single_aurora_table_cost,
compute_single_table_movement_time_and_cost,
)
from brad.planner.workload import Workload
from brad.routing.router import Router

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -617,6 +618,18 @@ def get_aurora_provisioning(self) -> Provisioning:
def get_redshift_provisioning(self) -> Provisioning:
return self.redshift_provisioning

def get_routing_decisions(self) -> npt.NDArray:
engine_query = np.array(
[
(Workload.EngineLatencyIndex[engine], idx)
for engine, qidxs in self.query_locations.items()
for idx in qidxs
]
)
si = np.argsort(engine_query[:, 1])
sorted_queries = engine_query[si]
return sorted_queries[:, 0]

def get_predicted_analytical_latencies(self) -> npt.NDArray:
relevant = []
relevant.append(self.scaled_query_latencies[Engine.Aurora])
Expand Down
9 changes: 9 additions & 0 deletions src/brad/planner/compare/blueprint.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,15 @@ def get_aurora_provisioning(self) -> Provisioning:
def get_redshift_provisioning(self) -> Provisioning:
raise NotImplementedError

def get_routing_decisions(self) -> npt.NDArray:
"""
The query routing decisions for each analytical query in the workload.
Use `Workload.EngineLatencyIndex` to map engines to numeric indices.
Should return an NDArray of shape (N,).
"""
raise NotImplementedError

# Predicted performance.

def get_predicted_analytical_latencies(self) -> npt.NDArray:
Expand Down

0 comments on commit 9222041

Please sign in to comment.