Skip to content

Commit 9b2721f

Browse files
authored
Merge pull request #40 from k8sstormcenter/ddelnano/clickhouse-perf-test
[perf_tool] Add perf_clickhouse GitHub action to test pxl clickhouse read/export
2 parents afa4a9b + 4690503 commit 9b2721f

36 files changed

Lines changed: 3174 additions & 262 deletions

.github/workflows/perf_clickhouse.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@ jobs:
130130
run: |
131131
bazel run //src/e2e_test/perf_tool:perf_tool -- run \
132132
--api_key="${PX_API_KEY}" \
133-
--cloud_addr=${{ vars.PERF_CLOUD_ADDR }}
133+
--cloud_addr=${{ vars.PERF_CLOUD_ADDR }} \
134134
--commit_sha="${{ steps.get-commit-sha.outputs.commit-sha }}" \
135135
--experiment_name=clickhouse-export \
136136
--suite=clickhouse-exec \

go.mod

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ require (
5252
github.com/ory/dockertest/v3 v3.8.1
5353
github.com/ory/hydra-client-go v1.9.2
5454
github.com/ory/kratos-client-go v0.10.1
55+
github.com/parquet-go/parquet-go v0.25.1
5556
github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5
5657
github.com/prometheus/client_golang v1.14.0
5758
github.com/prometheus/client_model v0.3.0
@@ -115,6 +116,7 @@ require (
115116
github.com/VividCortex/ewma v1.1.1 // indirect
116117
github.com/a8m/envsubst v1.3.0 // indirect
117118
github.com/alecthomas/participle/v2 v2.0.0-beta.5 // indirect
119+
github.com/andybalholm/brotli v1.1.0 // indirect
118120
github.com/andybalholm/cascadia v1.1.0 // indirect
119121
github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // indirect
120122
github.com/beorn7/perks v1.0.1 // indirect
@@ -171,7 +173,7 @@ require (
171173
github.com/google/go-querystring v1.1.0 // indirect
172174
github.com/google/gofuzz v1.2.0 // indirect
173175
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
174-
github.com/google/uuid v1.3.0 // indirect
176+
github.com/google/uuid v1.6.0 // indirect
175177
github.com/googleapis/gax-go/v2 v2.7.0 // indirect
176178
github.com/gorilla/securecookie v1.1.1 // indirect
177179
github.com/gorilla/websocket v1.5.0 // indirect
@@ -191,7 +193,7 @@ require (
191193
github.com/json-iterator/go v1.1.12 // indirect
192194
github.com/jstemmer/go-junit-report v0.9.1 // indirect
193195
github.com/kevinburke/ssh_config v0.0.0-20190725054713-01f96b0aa0cd // indirect
194-
github.com/klauspost/compress v1.17.2 // indirect
196+
github.com/klauspost/compress v1.17.9 // indirect
195197
github.com/kr/pretty v0.2.1 // indirect
196198
github.com/kr/text v0.2.0 // indirect
197199
github.com/kylelemons/godebug v1.1.0 // indirect
@@ -232,6 +234,7 @@ require (
232234
github.com/patrickmn/go-cache v2.1.0+incompatible // indirect
233235
github.com/pelletier/go-toml v1.9.3 // indirect
234236
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
237+
github.com/pierrec/lz4/v4 v4.1.21 // indirect
235238
github.com/pkg/errors v0.9.1 // indirect
236239
github.com/pmezard/go-difflib v1.0.0 // indirect
237240
github.com/prometheus/procfs v0.9.0 // indirect
@@ -276,7 +279,7 @@ require (
276279
golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect
277280
gomodules.xyz/jsonpatch/v2 v2.2.0 // indirect
278281
google.golang.org/appengine v1.6.7 // indirect
279-
google.golang.org/protobuf v1.29.1 // indirect
282+
google.golang.org/protobuf v1.34.2 // indirect
280283
gopkg.in/inf.v0 v0.9.1 // indirect
281284
gopkg.in/ini.v1 v1.67.0 // indirect
282285
gopkg.in/launchdarkly/go-jsonstream.v1 v1.0.1 // indirect
@@ -317,3 +320,5 @@ replace (
317320
google.golang.org/grpc => google.golang.org/grpc v1.43.0
318321
gopkg.in/yaml.v2 => gopkg.in/yaml.v2 v2.4.0
319322
)
323+
324+
replace google.golang.org/protobuf => google.golang.org/protobuf v1.29.1

go.sum

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuy
8787
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
8888
github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
8989
github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho=
90+
github.com/andybalholm/brotli v1.1.0 h1:eLKJA0d02Lf0mVpIDgYnqXcUn0GqVmEFny3VuID1U3M=
91+
github.com/andybalholm/brotli v1.1.0/go.mod h1:sms7XGricyQI9K10gOSf56VKKWS4oLer58Q+mhRPtnY=
9092
github.com/andybalholm/cascadia v1.1.0 h1:BuuO6sSfQNFRu1LppgbD25Hr2vLYW25JvxHs5zzsLTo=
9193
github.com/andybalholm/cascadia v1.1.0/go.mod h1:GsXiBklL0woXo1j/WYWtSYYC4ouU9PqHO0sqidkEA4Y=
9294
github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA=
@@ -447,8 +449,8 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU
447449
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
448450
github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
449451
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
450-
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
451-
github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
452+
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
453+
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
452454
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
453455
github.com/googleapis/gax-go/v2 v2.7.0 h1:IcsPKeInNvYi7eqSaDjiZqDDKu5rsmunY0Y1YupQSSQ=
454456
github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8=
@@ -579,8 +581,8 @@ github.com/klauspost/compress v1.8.2/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0
579581
github.com/klauspost/compress v1.9.0/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
580582
github.com/klauspost/compress v1.9.5/go.mod h1:RyIbtBH6LamlWaDj8nUwkbUhJ87Yi3uG0guNDohfE1A=
581583
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
582-
github.com/klauspost/compress v1.17.2 h1:RlWWUY/Dr4fL8qk9YG7DTZ7PDgME2V4csBXA8L/ixi4=
583-
github.com/klauspost/compress v1.17.2/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE=
584+
github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA=
585+
github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw=
584586
github.com/klauspost/cpuid v1.2.1/go.mod h1:Pj4uuM528wm8OyEC2QMXAi2YiTZ96dNQPGgoMS4s3ek=
585587
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
586588
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
@@ -775,6 +777,8 @@ github.com/ory/hydra-client-go v1.9.2 h1:sbp+8zwEJvhqSxcY8HiOkXeY2FspsfSOJ5ajJ07
775777
github.com/ory/hydra-client-go v1.9.2/go.mod h1:TTg4Gt0SDC8+XoGtj5qzdtqxapfFW+Vmm41PFuC6n/E=
776778
github.com/ory/kratos-client-go v0.10.1 h1:kSRk+0leCJ1nPMS+FPho8b9WMzrKNpgszvta0Xo32QU=
777779
github.com/ory/kratos-client-go v0.10.1/go.mod h1:dOQIsar76K07wMPJD/6aMhrWyY+sFGEagLDLso1CpsA=
780+
github.com/parquet-go/parquet-go v0.25.1 h1:l7jJwNM0xrk0cnIIptWMtnSnuxRkwq53S+Po3KG8Xgo=
781+
github.com/parquet-go/parquet-go v0.25.1/go.mod h1:AXBuotO1XiBtcqJb/FKFyjBG4aqa3aQAAWF3ZPzCanY=
778782
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
779783
github.com/patrickmn/go-cache v2.1.0+incompatible h1:HRMgzkcYKYpi3C8ajMPV8OFXaaRUnok+kx1WdO15EQc=
780784
github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ=
@@ -788,6 +792,8 @@ github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+v
788792
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
789793
github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5 h1:rZQtoozkfsiNs36c7Tdv/gyGNzD1X1XWKO8rptVNZuM=
790794
github.com/phayes/freeport v0.0.0-20171002181615-b8543db493a5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE=
795+
github.com/pierrec/lz4/v4 v4.1.21 h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
796+
github.com/pierrec/lz4/v4 v4.1.21/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
791797
github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4=
792798
github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8=
793799
github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A=
@@ -1327,10 +1333,6 @@ google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa h1:I0YcKz0I7OAhddo
13271333
google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
13281334
google.golang.org/grpc v1.43.0 h1:Eeu7bZtDZ2DpRCsLhUlcrLnvYaMK1Gz86a+hMVvELmM=
13291335
google.golang.org/grpc v1.43.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
1330-
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
1331-
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
1332-
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
1333-
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
13341336
google.golang.org/protobuf v1.29.1 h1:7QBf+IK2gx70Ap/hDsOmam3GE0v9HicjfEdAxE62UoM=
13351337
google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
13361338
gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw=

go_deps.bzl

Lines changed: 21 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

skaffold/skaffold_vizier.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,7 @@ profiles:
8181
path: /build/artifacts/context=./bazel/args
8282
value:
8383
- --compilation_mode=opt
84+
- --config=x86_64_sysroot
8485
- name: heap
8586
patches:
8687
- op: add

src/carnot/exec/clickhouse_export_sink_node.cc

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,9 @@ namespace px {
3535
namespace carnot {
3636
namespace exec {
3737

38+
// TODO(ddelnano): Defend against columns that don't exist. These should be
39+
// ignored by the Node.
40+
3841
using table_store::schema::RowBatch;
3942
using table_store::schema::RowDescriptor;
4043

@@ -148,12 +151,12 @@ Status ClickHouseExportSinkNode::ConsumeNextImpl(ExecState* /*exec_state*/, cons
148151
break;
149152
}
150153
case types::UINT128: {
151-
// UINT128 is exported as STRING (UUID format)
154+
// UINT128 is exported as STRING in "high:low" format to match
155+
// the ClickHouseSourceNode's parsing in clickhouse_source_node.cc
152156
auto col = std::make_shared<clickhouse::ColumnString>();
153157
for (int64_t i = 0; i < num_rows; ++i) {
154158
auto val = types::GetValueFromArrowArray<types::UINT128>(arrow_col.get(), i);
155-
std::string uuid_str = sole::rebuild(absl::Uint128High64(val), absl::Uint128Low64(val)).str();
156-
col->Append(uuid_str);
159+
col->Append(absl::Substitute("$0:$1", absl::Uint128High64(val), absl::Uint128Low64(val)));
157160
}
158161
block.AppendColumn(mapping.clickhouse_column_name(), col);
159162
break;
@@ -164,6 +167,34 @@ Status ClickHouseExportSinkNode::ConsumeNextImpl(ExecState* /*exec_state*/, cons
164167
}
165168
}
166169

170+
// Auto-derive event_time from time_ if time_ is present but event_time is not.
171+
// The ClickHouse table schema uses event_time (DateTime64(3), milliseconds) for
172+
// partitioning and ordering, but the Pixie table has time_ (TIME64NS, nanoseconds).
173+
bool has_time_ = false;
174+
bool has_event_time = false;
175+
int time_col_index = -1;
176+
for (const auto& mapping : plan_node_->column_mappings()) {
177+
if (mapping.clickhouse_column_name() == "time_") {
178+
has_time_ = true;
179+
time_col_index = mapping.input_column_index();
180+
}
181+
if (mapping.clickhouse_column_name() == "event_time") {
182+
has_event_time = true;
183+
}
184+
}
185+
186+
if (has_time_ && !has_event_time && time_col_index >= 0) {
187+
auto arrow_col = rb.ColumnAt(time_col_index);
188+
int64_t num_rows = arrow_col->length();
189+
auto event_time_col = std::make_shared<clickhouse::ColumnDateTime64>(3);
190+
for (int64_t i = 0; i < num_rows; ++i) {
191+
int64_t ns_val = types::GetValueFromArrowArray<types::TIME64NS>(arrow_col.get(), i);
192+
// Convert nanoseconds to milliseconds for DateTime64(3)
193+
event_time_col->Append(ns_val / 1000000LL);
194+
}
195+
block.AppendColumn("event_time", event_time_col);
196+
}
197+
167198
// Insert the block into ClickHouse
168199
clickhouse_client_->Insert(plan_node_->table_name(), block);
169200

src/e2e_test/perf_tool/cmd/BUILD.bazel

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ go_library(
3333
"//src/e2e_test/perf_tool/pkg/cluster",
3434
"//src/e2e_test/perf_tool/pkg/cluster/gke",
3535
"//src/e2e_test/perf_tool/pkg/cluster/local",
36+
"//src/e2e_test/perf_tool/pkg/exporter",
3637
"//src/e2e_test/perf_tool/pkg/pixie",
3738
"//src/e2e_test/perf_tool/pkg/run",
3839
"//src/e2e_test/perf_tool/pkg/suites",

0 commit comments

Comments
 (0)