You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@quickstep.apache.org by zu...@apache.org on 2016/05/27 03:23:25 UTC

[34/50] [abbrv] incubator-quickstep git commit: AddWorkOrdersUsingPartitionedInput added.

AddWorkOrdersUsingPartitionedInput added.


Project: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/commit/303e3a18
Tree: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/tree/303e3a18
Diff: http://git-wip-us.apache.org/repos/asf/incubator-quickstep/diff/303e3a18

Branch: refs/heads/partition_aware_hashjoin_with_optimizer_support
Commit: 303e3a18158167065c17d9a352d8a181360ad050
Parents: 1f7218a
Author: Adalbert Gerald Soosai Raj <ge...@cs.wisc.edu>
Authored: Mon May 23 18:03:17 2016 -0500
Committer: Adalbert Gerald Soosai Raj <ge...@cs.wisc.edu>
Committed: Mon May 23 18:03:17 2016 -0500

----------------------------------------------------------------------
 relational_operators/HashJoinOperator.cpp | 60 +++++++++++++++++++++++++-
 relational_operators/HashJoinOperator.hpp |  8 ++++
 2 files changed, 66 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/303e3a18/relational_operators/HashJoinOperator.cpp
----------------------------------------------------------------------
diff --git a/relational_operators/HashJoinOperator.cpp b/relational_operators/HashJoinOperator.cpp
index 28dfa3a..4acabde 100644
--- a/relational_operators/HashJoinOperator.cpp
+++ b/relational_operators/HashJoinOperator.cpp
@@ -286,6 +286,52 @@ void HashJoinOperator::addWorkOrders(WorkOrdersContainer *container,
     }  // end else (probe_relation_is_stored_)
 }
 
+template <class JoinWorkOrderClass>
+void HashJoinOperator::addWorkOrdersUsingPartitionedInput(WorkOrdersContainer *container,
+                                                          QueryContext *query_context,
+                                                          StorageManager *storage_manager,
+                                                          const Predicate *residual_predicate,
+                                                          const std::vector<std::unique_ptr<const Scalar>> &selection,
+                                                          InsertDestination *output_destination) {
+  const JoinHashTable &hash_table = *(query_context->getJoinHashTable(hash_table_group_index_));
+  const std::size_t num_partitions =
+      probe_relation_.getPartitionScheme().getPartitionSchemeHeader().getNumPartitions();
+  if (probe_relation_is_stored_) {
+    for (std::size_t part_id = 0; part_id < num_partitions; ++part_id) {
+      for (const block_id probe_block_id : probe_relation_block_ids_in_partition_[part_id]) {
+        container->addNormalWorkOrder(new JoinWorkOrderClass(build_relation_,
+                                                             probe_relation_,
+                                                             join_key_attributes_,
+                                                             any_join_key_attributes_nullable_,
+                                                             probe_block_id,
+                                                             residual_predicate,
+                                                             selection,
+                                                             hash_table,
+                                                             output_destination,
+                                                             storage_manager),
+                                      op_index_);
+      }
+    }
+  } else {
+    for (std::size_t part_id = 0; part_id < num_partitions; ++part_id) {
+      while (num_workorders_generated_ < probe_relation_block_ids_in_partition_[part_id].size()) {
+        container->addNormalWorkOrder(new JoinWorkOrderClass(build_relation_,
+                                                             probe_relation_,
+                                                             join_key_attributes_,
+                                                             any_join_key_attributes_nullable_,
+                                                             probe_relation_block_ids_[num_workorders_generated_],
+                                                             residual_predicate,
+                                                             selection,
+                                                             hash_table,
+                                                             output_destination,
+                                                             storage_manager),
+                                      op_index_);
+        ++num_workorders_generated_;
+      }  // end while
+    }
+  }  // end else (probe_relation_is_stored_)
+}
+
 #ifdef QUICKSTEP_HAVE_LIBNUMA
 template <class JoinWorkOrderClass>
 void HashJoinOperator::addPartitionAwareWorkOrders(WorkOrdersContainer *container,
@@ -384,11 +430,16 @@ bool HashJoinOperator::getAllNonOuterJoinWorkOrders(WorkOrdersContainer *contain
 
     if (probe_relation_is_stored_) {
       if (!started_) {
-        if (probe_relation_.hasPartitionScheme() && probe_relation_.hasNUMAPlacementScheme() && is_numa_aware_join_) {
+        if (probe_relation_.hasPartitionScheme() && probe_relation_.hasNUMAPlacementScheme()) {
+          if (is_numa_aware_join_) {
 #ifdef QUICKSTEP_HAVE_LIBNUMA
           addPartitionAwareWorkOrders<JoinWorkOrderClass>(
               container, query_context, storage_manager, residual_predicate, selection, output_destination);
 #endif
+          } else {
+            addWorkOrdersUsingPartitionedInput<JoinWorkOrderClass>(
+                container, query_context, storage_manager, residual_predicate, selection, output_destination);
+          }
         } else {
           addWorkOrders<JoinWorkOrderClass>(
               container, query_context, storage_manager, residual_predicate, selection, output_destination);
@@ -397,11 +448,16 @@ bool HashJoinOperator::getAllNonOuterJoinWorkOrders(WorkOrdersContainer *contain
       }
       return started_;
     } else {
-      if (probe_relation_.hasPartitionScheme() && probe_relation_.hasNUMAPlacementScheme() && is_numa_aware_join_) {
+      if (probe_relation_.hasPartitionScheme() && probe_relation_.hasNUMAPlacementScheme()) {
+        if (is_numa_aware_join_) {
 #ifdef QUICKSTEP_HAVE_LIBNUMA
         addPartitionAwareWorkOrders<JoinWorkOrderClass>(
             container, query_context, storage_manager, residual_predicate, selection, output_destination);
 #endif
+        } else {
+          addWorkOrdersUsingPartitionedInput<JoinWorkOrderClass>(
+              container, query_context, storage_manager, residual_predicate, selection, output_destination);
+        }
       } else {
         addWorkOrders<JoinWorkOrderClass>(
             container, query_context, storage_manager, residual_predicate, selection, output_destination);

http://git-wip-us.apache.org/repos/asf/incubator-quickstep/blob/303e3a18/relational_operators/HashJoinOperator.hpp
----------------------------------------------------------------------
diff --git a/relational_operators/HashJoinOperator.hpp b/relational_operators/HashJoinOperator.hpp
index 340e561..3e50eef 100644
--- a/relational_operators/HashJoinOperator.hpp
+++ b/relational_operators/HashJoinOperator.hpp
@@ -235,6 +235,14 @@ class HashJoinOperator : public RelationalOperator {
                      const std::vector<std::unique_ptr<const Scalar>> &selection,
                      InsertDestination *output_destination);
 
+  template <class JoinWorkOrderClass>
+  void addWorkOrdersUsingPartitionedInput(WorkOrdersContainer *container,
+                                          QueryContext *query_context,
+                                          StorageManager *storage_manager,
+                                          const Predicate *predicate,
+                                          const std::vector<std::unique_ptr<const Scalar>> &selection,
+                                          InsertDestination *output_destination);
+
 #ifdef QUICKSTEP_HAVE_LIBNUMA
   template <class JoinWorkOrderClass>
   void addPartitionAwareWorkOrders(WorkOrdersContainer *container,