Skip to content

Commit 47185fd

Browse files
committed
reporter: Add support for v2 schema
1 parent a43d44e commit 47185fd

9 files changed

Lines changed: 1536 additions & 42 deletions

File tree

flags/flags.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -345,6 +345,8 @@ type FlagsRemoteStore struct {
345345

346346
ClientCert string `help:"Client certificate for mTLS"`
347347
ClientKey string `help:"Client key for mTLS"`
348+
349+
UseV2Schema bool `default:"false" help:"Use v2 Arrow schema with inline stacktraces and ListView deduplication (experimental)."`
348350
}
349351

350352
// FlagsDebuginfo contains flags to configure debuginfo.

go.mod

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@ module github.com/parca-dev/parca-agent
33
go 1.25.0
44

55
require (
6-
buf.build/gen/go/parca-dev/parca/grpc/go v1.5.1-20250212095114-4db6f2d46517.2
7-
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.6-20250212095114-4db6f2d46517.1
6+
buf.build/gen/go/parca-dev/parca/grpc/go v1.6.1-20260225102827-5fda07223114.1
7+
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.11-20260225102827-5fda07223114.1
88
buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.6-20250320161912-af2aab87b1b3.1
99
github.com/KimMachineGun/automemlimit v0.7.3
1010
github.com/alecthomas/kong v1.12.1
1111
github.com/alecthomas/kong-yaml v0.2.0
12-
github.com/apache/arrow/go/v16 v16.1.0
12+
github.com/apache/arrow-go/v18 v18.5.2
1313
github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2
1414
github.com/common-nighthawk/go-figure v0.0.0-20210622060536-734e95fb86be
1515
github.com/containerd/containerd v1.7.29
@@ -64,6 +64,8 @@ require (
6464
github.com/AdamKorcz/go-118-fuzz-build v0.0.0-20230306123547-8075edf89bb0 // indirect
6565
github.com/Microsoft/go-winio v0.6.2 // indirect
6666
github.com/Microsoft/hcsshim v0.12.9 // indirect
67+
github.com/andybalholm/brotli v1.2.0 // indirect
68+
github.com/apache/thrift v0.22.0 // indirect
6769
github.com/beorn7/perks v1.0.1 // indirect
6870
github.com/blang/semver/v4 v4.0.0 // indirect
6971
github.com/cenkalti/backoff/v4 v4.3.0 // indirect
@@ -97,7 +99,7 @@ require (
9799
github.com/goccy/go-json v0.10.5 // indirect
98100
github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect
99101
github.com/golang/protobuf v1.5.4 // indirect
100-
github.com/google/flatbuffers v25.2.10+incompatible // indirect
102+
github.com/google/flatbuffers v25.12.19+incompatible // indirect
101103
github.com/google/gnostic-models v0.6.9 // indirect
102104
github.com/google/go-cmp v0.7.0 // indirect
103105
github.com/google/gofuzz v1.2.0 // indirect
@@ -111,11 +113,14 @@ require (
111113
github.com/josharian/native v1.1.0 // indirect
112114
github.com/jpillora/backoff v1.0.0 // indirect
113115
github.com/json-iterator/go v1.1.12 // indirect
114-
github.com/klauspost/cpuid/v2 v2.2.11 // indirect
116+
github.com/klauspost/asmfmt v1.3.2 // indirect
117+
github.com/klauspost/cpuid/v2 v2.3.0 // indirect
115118
github.com/mailru/easyjson v0.9.0 // indirect
116119
github.com/mdlayher/kobject v0.0.0-20200520190114-19ca17470d7d // indirect
117120
github.com/mdlayher/netlink v1.7.2 // indirect
118121
github.com/mdlayher/socket v0.4.1 // indirect
122+
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 // indirect
123+
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 // indirect
119124
github.com/minio/sha256-simd v1.0.1 // indirect
120125
github.com/moby/docker-image-spec v1.3.1 // indirect
121126
github.com/moby/locker v1.0.1 // indirect
@@ -134,7 +139,7 @@ require (
134139
github.com/opencontainers/runtime-spec v1.2.1 // indirect
135140
github.com/opencontainers/selinux v1.13.0 // indirect
136141
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 // indirect
137-
github.com/pierrec/lz4/v4 v4.1.22 // indirect
142+
github.com/pierrec/lz4/v4 v4.1.25 // indirect
138143
github.com/pkg/errors v0.9.1 // indirect
139144
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
140145
github.com/prometheus/client_model v0.6.2 // indirect

go.sum

Lines changed: 26 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
buf.build/gen/go/gogo/protobuf/protocolbuffers/go v1.36.6-20240617172848-e1dbca2775a7.1 h1:DHj/fDjM+Ij3KR1IpFs6WdNcCtD4+Th3tEWyx3Xgs14=
22
buf.build/gen/go/gogo/protobuf/protocolbuffers/go v1.36.6-20240617172848-e1dbca2775a7.1/go.mod h1:iCb72C37pWGhjKDeq9IbcMqVJAnXXHs5tEjiePfouhk=
3-
buf.build/gen/go/parca-dev/parca/grpc/go v1.5.1-20250212095114-4db6f2d46517.2 h1:AiTEEAQ8AHE5udDizcA2r3GNjxxlk4f2Buot/hA2oYM=
4-
buf.build/gen/go/parca-dev/parca/grpc/go v1.5.1-20250212095114-4db6f2d46517.2/go.mod h1:U8BtFPtz71GSALR7K7ALn39RnvrKsD++lJzMI5Gf4fs=
5-
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.6-20250212095114-4db6f2d46517.1 h1:gXHJuGlWoXUkH9O9Qxw9skNAhIDgNgJx0tYSbI8fjIo=
6-
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.6-20250212095114-4db6f2d46517.1/go.mod h1:58eXMQL4tavOGzyXIveWU4f3yTFGmLIHxM9uk11DOIo=
3+
buf.build/gen/go/parca-dev/parca/grpc/go v1.6.1-20260225102827-5fda07223114.1 h1:vxHTP5quJBa7/yMhL5KHfci9LxgB970bBJPByU9K9EQ=
4+
buf.build/gen/go/parca-dev/parca/grpc/go v1.6.1-20260225102827-5fda07223114.1/go.mod h1:Gm9/4TuxSC1DmFMqCBuLOWQ2nbRPjt7rSEQiTIksYBY=
5+
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.11-20260225102827-5fda07223114.1 h1:lEamNY09GPFoJ3avHHtvnCR+mjx2sZx418nTVrgjC9Q=
6+
buf.build/gen/go/parca-dev/parca/protocolbuffers/go v1.36.11-20260225102827-5fda07223114.1/go.mod h1:TR9iiFuhuMGsEil3U6KZnYmvZ1W2SY6uw5HPP+4mJU4=
77
buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.6-20250320161912-af2aab87b1b3.1 h1:EuFqAB/kfs/jh9aUGcvBjcxtU89wnXwsuQfcwGX1rhE=
88
buf.build/gen/go/prometheus/prometheus/protocolbuffers/go v1.36.6-20250320161912-af2aab87b1b3.1/go.mod h1:ea/VK8bRnfyOuhQRzIk5hGigCqbZdzI8SHNLC3IyABU=
99
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
@@ -32,8 +32,12 @@ github.com/alecthomas/kong-yaml v0.2.0 h1:iiVVqVttmOsHKawlaW/TljPsjaEv1O4ODx6dlo
3232
github.com/alecthomas/kong-yaml v0.2.0/go.mod h1:vMvOIy+wpB49MCZ0TA3KMts38Mu9YfRP03Q1StN69/g=
3333
github.com/alecthomas/repr v0.4.0 h1:GhI2A8MACjfegCPVq9f1FLvIBS+DrQ2KQBFZP1iFzXc=
3434
github.com/alecthomas/repr v0.4.0/go.mod h1:Fr0507jx4eOXV7AlPV6AVZLYrLIuIeSOWtW57eE/O/4=
35-
github.com/apache/arrow/go/v16 v16.1.0 h1:dwgfOya6s03CzH9JrjCBx6bkVb4yPD4ma3haj9p7FXI=
36-
github.com/apache/arrow/go/v16 v16.1.0/go.mod h1:9wnc9mn6vEDTRIm4+27pEjQpRKuTvBaessPoEXQzxWA=
35+
github.com/andybalholm/brotli v1.2.0 h1:ukwgCxwYrmACq68yiUqwIWnGY0cTPox/M94sVwToPjQ=
36+
github.com/andybalholm/brotli v1.2.0/go.mod h1:rzTDkvFWvIrjDXZHkuS16NPggd91W3kUSvPlQ1pLaKY=
37+
github.com/apache/arrow-go/v18 v18.5.2 h1:3uoHjoaEie5eVsxx/Bt64hKwZx4STb+beAkqKOlq/lY=
38+
github.com/apache/arrow-go/v18 v18.5.2/go.mod h1:yNoizNTT4peTciJ7V01d2EgOkE1d0fQ1vZcFOsVtFsw=
39+
github.com/apache/thrift v0.22.0 h1:r7mTJdj51TMDe6RtcmNdQxgn9XcyfGDOzegMDRg47uc=
40+
github.com/apache/thrift v0.22.0/go.mod h1:1e7J/O1Ae6ZQMTYdy9xa3w9k+XHWPfRvdPyJeynQ+/g=
3741
github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2 h1:7Ip0wMmLHLRJdrloDxZfhMm0xrLXZS8+COSu2bXmEQs=
3842
github.com/armon/circbuf v0.0.0-20190214190532-5111143e8da2/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
3943
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
@@ -166,8 +170,8 @@ github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek
166170
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
167171
github.com/golang/snappy v1.0.0 h1:Oy607GVXHs7RtbggtPBnr2RmDArIsAefDwvrdWvRhGs=
168172
github.com/golang/snappy v1.0.0/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q=
169-
github.com/google/flatbuffers v25.2.10+incompatible h1:F3vclr7C3HpB1k9mxCGRMXq6FdUalZ6H/pNX4FP1v0Q=
170-
github.com/google/flatbuffers v25.2.10+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
173+
github.com/google/flatbuffers v25.12.19+incompatible h1:haMV2JRRJCe1998HeW/p0X9UaMTK6SDo0ffLn2+DbLs=
174+
github.com/google/flatbuffers v25.12.19+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8=
171175
github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
172176
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
173177
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
@@ -219,10 +223,12 @@ github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnr
219223
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
220224
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
221225
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
226+
github.com/klauspost/asmfmt v1.3.2 h1:4Ri7ox3EwapiOjCki+hw14RyKk201CN4rzyCJRFLpK4=
227+
github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE=
222228
github.com/klauspost/compress v1.18.4 h1:RPhnKRAQ4Fh8zU2FY/6ZFDwTVTxgJ/EMydqSTzE9a2c=
223229
github.com/klauspost/compress v1.18.4/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
224-
github.com/klauspost/cpuid/v2 v2.2.11 h1:0OwqZRYI2rFrjS4kvkDnqJkKHdHaRnCm68/DY4OxRzU=
225-
github.com/klauspost/cpuid/v2 v2.2.11/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
230+
github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y=
231+
github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0=
226232
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
227233
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
228234
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
@@ -246,6 +252,10 @@ github.com/mdlayher/netlink v1.7.2 h1:/UtM3ofJap7Vl4QWCPDGXY8d3GIY2UGSDbK+QWmY8/
246252
github.com/mdlayher/netlink v1.7.2/go.mod h1:xraEF7uJbxLhc5fpHL4cPe221LI2bdttWlU+ZGLfQSw=
247253
github.com/mdlayher/socket v0.4.1 h1:eM9y2/jlbs1M615oshPQOHZzj6R6wMT7bX5NPiQvn2U=
248254
github.com/mdlayher/socket v0.4.1/go.mod h1:cAqeGjoufqdxWkD7DkpyS+wcefOtmu5OQ8KuoJGIReA=
255+
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8 h1:AMFGa4R4MiIpspGNG7Z948v4n35fFGB3RR3G/ry4FWs=
256+
github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY=
257+
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3 h1:+n/aFZefKZp7spd8DFdX7uMikMLXX4oubIzJF4kv/wI=
258+
github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE=
249259
github.com/minio/sha256-simd v1.0.1 h1:6kaan5IFmwTNynnKKpDHe6FWHohJOHhCPchzK49dzMM=
250260
github.com/minio/sha256-simd v1.0.1/go.mod h1:Pz6AKMiUdngCLpeTL/RJY1M9rUuPMYujV5xJjtbRSN8=
251261
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
@@ -303,8 +313,8 @@ github.com/parca-dev/opentelemetry-ebpf-profiler v0.0.202611-0.20260318195408-a0
303313
github.com/parca-dev/opentelemetry-ebpf-profiler v0.0.202611-0.20260318195408-a0d0c958888a/go.mod h1:4DvUDuFwWO3OJoe824nY4Tw6jBrLGEY/hS6dsGDd0V8=
304314
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58 h1:onHthvaw9LFnH4t2DcNVpwGmV9E1BkGknEliJkfwQj0=
305315
github.com/pbnjay/memory v0.0.0-20210728143218-7b4eea64cf58/go.mod h1:DXv8WO4yhMYhSNPKjeNKa5WY9YCIEBRbNzFFPJbWO6Y=
306-
github.com/pierrec/lz4/v4 v4.1.22 h1:cKFw6uJDK+/gfw5BcDL0JL5aBsAFdsIT18eRtLj7VIU=
307-
github.com/pierrec/lz4/v4 v4.1.22/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
316+
github.com/pierrec/lz4/v4 v4.1.25 h1:kocOqRffaIbU5djlIBr7Wh+cx82C0vtFb0fOurZHqD0=
317+
github.com/pierrec/lz4/v4 v4.1.25/go.mod h1:EoQMVJgeeEOMsCqCzqFm2O0cJvljX2nGZjcRIPL34O4=
308318
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
309319
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
310320
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
@@ -353,6 +363,8 @@ github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
353363
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
354364
github.com/xyproto/ainur v1.3.3 h1:DjbkZg7iNblH1abwfIQG2siI0z3LOyVuWEmCq2S9GKc=
355365
github.com/xyproto/ainur v1.3.3/go.mod h1:Sn5x2wSx2Q9RoZHIqJr927vVeM0oKwBl4lCMG+My/rk=
366+
github.com/xyproto/randomstring v1.0.5 h1:YtlWPoRdgMu3NZtP45drfy1GKoojuR7hmRcnhZqKjWU=
367+
github.com/xyproto/randomstring v1.0.5/go.mod h1:rgmS5DeNXLivK7YprL0pY+lTuhNQW3iGxZ18UQApw/E=
356368
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
357369
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
358370
github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
@@ -499,8 +511,8 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
499511
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
500512
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da h1:noIWHXmPHxILtqtCOPIhSt0ABwskkZKjD3bXGnZGpNY=
501513
golang.org/x/xerrors v0.0.0-20240903120638-7835f813f4da/go.mod h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
502-
gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
503-
gonum.org/v1/gonum v0.16.0/go.mod h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
514+
gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
515+
gonum.org/v1/gonum v0.17.0/go.mod h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
504516
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
505517
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
506518
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=

main.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ import (
2424
telemetrygrpc "buf.build/gen/go/parca-dev/parca/grpc/go/parca/telemetry/v1alpha1/telemetryv1alpha1grpc"
2525
telemetrypb "buf.build/gen/go/parca-dev/parca/protocolbuffers/go/parca/telemetry/v1alpha1"
2626
_ "github.com/KimMachineGun/automemlimit"
27-
"github.com/apache/arrow/go/v16/arrow/memory"
27+
"github.com/apache/arrow-go/v18/arrow/memory"
2828
"github.com/armon/circbuf"
2929
"github.com/common-nighthawk/go-figure"
3030
"github.com/felixge/fgprof"
@@ -424,6 +424,7 @@ func mainWithExitCode() flags.ExitCode {
424424
f.Metadata.DisableCPULabel,
425425
f.Metadata.DisableThreadIDLabel,
426426
f.Metadata.DisableThreadCommLabel,
427+
f.RemoteStore.UseV2Schema,
427428
)
428429
if err != nil {
429430
return flags.Failure("Failed to start reporting: %v", err)

reporter/arrow.go

Lines changed: 65 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,70 @@ import (
55
"slices"
66
"unsafe"
77

8-
"github.com/apache/arrow/go/v16/arrow"
9-
"github.com/apache/arrow/go/v16/arrow/array"
10-
"github.com/apache/arrow/go/v16/arrow/memory"
8+
"github.com/apache/arrow-go/v18/arrow"
9+
"github.com/apache/arrow-go/v18/arrow/array"
10+
"github.com/apache/arrow-go/v18/arrow/memory"
1111
"golang.org/x/exp/maps"
1212
)
1313

14+
func stringRunEndBuilder(arr array.Builder) *StringRunEndBuilder {
15+
ree := arr.(*array.RunEndEncodedBuilder)
16+
sb := ree.ValueBuilder().(*array.StringBuilder)
17+
return &StringRunEndBuilder{
18+
ree: ree,
19+
sb: sb,
20+
}
21+
}
22+
23+
type StringRunEndBuilder struct {
24+
ree *array.RunEndEncodedBuilder
25+
sb *array.StringBuilder
26+
}
27+
28+
func (b *StringRunEndBuilder) Release() {
29+
b.ree.Release()
30+
}
31+
32+
func (b *StringRunEndBuilder) NewArray() arrow.Array {
33+
return b.ree.NewArray()
34+
}
35+
36+
func (b *StringRunEndBuilder) Len() int {
37+
return b.ree.Len()
38+
}
39+
40+
func (b *StringRunEndBuilder) EnsureLength(l int) {
41+
for b.ree.Len() < l {
42+
b.AppendNull()
43+
}
44+
}
45+
46+
func (b *StringRunEndBuilder) AppendNull() {
47+
b.ree.AppendNull()
48+
}
49+
50+
func (b *StringRunEndBuilder) AppendString(v string) {
51+
if b.sb.Len() > 0 &&
52+
!b.sb.IsNull(b.sb.Len()-1) &&
53+
v == b.sb.Value(int(b.sb.Len()-1)) {
54+
b.ree.ContinueRun(1)
55+
return
56+
}
57+
b.ree.Append(1)
58+
b.sb.Append(v)
59+
}
60+
61+
func (b *StringRunEndBuilder) AppendStringN(v string, n uint64) {
62+
if b.sb.Len() > 0 &&
63+
!b.sb.IsNull(b.sb.Len()-1) &&
64+
v == b.sb.Value(int(b.sb.Len()-1)) {
65+
b.ree.ContinueRun(n)
66+
return
67+
}
68+
b.ree.Append(n)
69+
b.sb.Append(v)
70+
}
71+
1472
func binaryDictionaryRunEndBuilder(arr array.Builder) *BinaryDictionaryRunEndBuilder {
1573
ree := arr.(*array.RunEndEncodedBuilder)
1674
bd := ree.ValueBuilder().(*array.BinaryDictionaryBuilder)
@@ -105,6 +163,10 @@ func (b *Uint64RunEndBuilder) NewArray() arrow.Array {
105163
return b.ree.NewArray()
106164
}
107165

166+
func (b *Uint64RunEndBuilder) Append(v uint64) {
167+
b.AppendN(v, 1)
168+
}
169+
108170
func (b *Uint64RunEndBuilder) AppendN(v uint64, n uint64) {
109171
if b.ub.Len() > 0 && v == b.ub.Value(b.ub.Len()-1) {
110172
b.ree.ContinueRun(n)

0 commit comments

Comments
 (0)