MCPcopy Create free account
hub / github.com/apache/arrow / JoinBenchmark

Method JoinBenchmark

cpp/src/arrow/acero/hash_join_benchmark.cc:64–183  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

62class JoinBenchmark {
63 public:
64 explicit JoinBenchmark(BenchmarkSettings& settings) {
65 SchemaBuilder l_schema_builder, r_schema_builder;
66 std::vector<FieldRef> left_keys, right_keys;
67 std::vector<JoinKeyCmp> key_cmp;
68 for (size_t i = 0; i < settings.key_types.size(); i++) {
69 std::string l_name = "lk" + std::to_string(i);
70 std::string r_name = "rk" + std::to_string(i);
71
72 // For integers, selectivity is the proportion of the build interval that overlaps
73 // with the probe interval
74 uint64_t num_build_rows = settings.num_build_batches * settings.batch_size;
75
76 uint64_t min_build_value = 0;
77 uint64_t max_build_value =
78 static_cast<uint64_t>(num_build_rows * settings.cardinality);
79
80 uint64_t min_probe_value =
81 static_cast<uint64_t>((1.0 - settings.selectivity) * max_build_value);
82 uint64_t max_probe_value = min_probe_value + max_build_value;
83
84 std::unordered_map<std::string, std::string> build_metadata;
85 build_metadata["null_probability"] = std::to_string(settings.null_percentage);
86 build_metadata["min"] = std::to_string(min_build_value);
87 build_metadata["max"] = std::to_string(max_build_value);
88 build_metadata["min_length"] = std::to_string(settings.var_length_min);
89 build_metadata["max_length"] = std::to_string(settings.var_length_max);
90
91 std::unordered_map<std::string, std::string> probe_metadata;
92 probe_metadata["null_probability"] = std::to_string(settings.null_percentage);
93 probe_metadata["min"] = std::to_string(min_probe_value);
94 probe_metadata["max"] = std::to_string(max_probe_value);
95
96 auto l_field =
97 field(l_name, settings.key_types[i], key_value_metadata(probe_metadata));
98 auto r_field =
99 field(r_name, settings.key_types[i], key_value_metadata(build_metadata));
100
101 DCHECK_OK(l_schema_builder.AddField(l_field));
102 DCHECK_OK(r_schema_builder.AddField(r_field));
103
104 left_keys.push_back(FieldRef(l_name));
105 right_keys.push_back(FieldRef(r_name));
106 key_cmp.push_back(JoinKeyCmp::EQ);
107 }
108
109 for (size_t i = 0; i < settings.probe_payload_types.size(); i++) {
110 std::string name = "lp" + std::to_string(i);
111 DCHECK_OK(l_schema_builder.AddField(field(name, settings.probe_payload_types[i])));
112 }
113
114 for (size_t i = 0; i < settings.build_payload_types.size(); i++) {
115 std::string name = "rp" + std::to_string(i);
116 DCHECK_OK(r_schema_builder.AddField(field(name, settings.build_payload_types[i])));
117 }
118
119 auto l_schema = *l_schema_builder.Finish();
120 auto r_schema = *r_schema_builder.Finish();
121

Callers

nothing calls this directly

Calls 15

to_stringFunction · 0.85
key_value_metadataFunction · 0.85
MakeRandomBatchesFunction · 0.85
GetCpuThreadPoolFunction · 0.85
push_backMethod · 0.80
SetCapacityMethod · 0.80
StartSchedulingMethod · 0.80
fieldFunction · 0.50
FieldRefFunction · 0.50
MakeFunction · 0.50
OKFunction · 0.50
sizeMethod · 0.45

Tested by

no test coverage detected