You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by "sfc-gh-ebrossard (via GitHub)" <gi...@apache.org> on 2023/08/03 17:35:25 UTC

[GitHub] [arrow] sfc-gh-ebrossard opened a new pull request, #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

sfc-gh-ebrossard opened a new pull request, #37016:
URL: https://github.com/apache/arrow/pull/37016

   ### Rationale for this change
   
   Statistics merging is unnecessarily conservative with respect to preserving distinct counts. If either side is 0, the merge stats can preserve the distinct count, instead of clearing it.
   
   ### What changes are included in this PR?
   
   Distinct count is preserved if either the lhs or rhs has a distinct count of 0 when merging stats.
   
   ### Are these changes tested?
   
   Yes, added a unit test.
   
   ### Are there any user-facing changes?
   
   I don't think this change to stats is considered to be user-facing.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] mapleFU commented on pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "mapleFU (via GitHub)" <gi...@apache.org>.
mapleFU commented on PR #37016:
URL: https://github.com/apache/arrow/pull/37016#issuecomment-1664963461

   Personally, I thin `distinct_count` might only usable when using **dictionary encoding**. And using it would be bug-prune.
   
   Before my patch https://github.com/apache/arrow/pull/35989/files , the `distinct_count` is directly added with another. So I think the distinct_count is always misused.
   
   I think your commit is reasonable, but also I think using `distinct_count` is a bit dangerous. Maybe add a `SetDistinctCount` and maintaining it outside would be better? Personally, I use `SetDistinctCount` when building the statistics of a dictionary-encoded non-fallbacked ColumnChunk
   
   Also cc @pitrou @wgtmac 


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] sfc-gh-ebrossard commented on a diff in pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "sfc-gh-ebrossard (via GitHub)" <gi...@apache.org>.
sfc-gh-ebrossard commented on code in PR #37016:
URL: https://github.com/apache/arrow/pull/37016#discussion_r1307787774


##########
cpp/src/parquet/statistics_test.cc:
##########
@@ -645,6 +652,50 @@ class TestStatisticsHasFlag : public TestStatistics<TestType> {
                              EXPECT_FALSE(merged_statistics->HasDistinctCount());
                              EXPECT_FALSE(merged_statistics->Encode().has_distinct_count);
                            });
+
+    // Create a statistics object with zero distinct count. Merging preserves the distinct
+    // count if either side is zero.
+    std::shared_ptr<TypedStatistics<TestType>> statistics3;
+    std::shared_ptr<TypedStatistics<TestType>> statistics4;
+    {
+      EncodedStatistics encoded_statistics3;
+      encoded_statistics3.has_distinct_count = true;
+      encoded_statistics3.distinct_count = 0;
+      statistics3 = std::dynamic_pointer_cast<TypedStatistics<TestType>>(
+          Statistics::Make(this->schema_.Column(0), &encoded_statistics3,
+                           /*num_values=*/0));
+      EXPECT_TRUE(statistics3->HasDistinctCount());
+
+      EncodedStatistics encoded_statistics4;
+      encoded_statistics4.has_distinct_count = true;
+      encoded_statistics4.distinct_count = 10;
+      statistics4 = std::dynamic_pointer_cast<TypedStatistics<TestType>>(
+          Statistics::Make(this->schema_.Column(0), &encoded_statistics4,
+                           /*num_values=*/10));
+      EXPECT_TRUE(statistics4->HasDistinctCount());
+    }

Review Comment:
   Added a `MergeDistinctCount` test helper; PTAL.



##########
cpp/src/parquet/statistics_test.cc:
##########
@@ -602,18 +602,25 @@ class TestStatisticsHasFlag : public TestStatistics<TestType> {
   }
 
   std::shared_ptr<TypedStatistics<TestType>> MergedStatistics(
-      const TypedStatistics<TestType>& stats1, const TypedStatistics<TestType>& stats2) {
-    auto chunk_statistics = MakeStatistics<TestType>(this->schema_.Column(0));
+      const TypedStatistics<TestType>& stats1, const TypedStatistics<TestType>& stats2,
+      const EncodedStatistics* initial_statistics) {
+    auto chunk_statistics = std::static_pointer_cast<TypedStatistics<TestType>>(
+        initial_statistics != nullptr
+            ? Statistics::Make(this->schema_.Column(0), initial_statistics)
+            : Statistics::Make(this->schema_.Column(0)));
     chunk_statistics->Merge(stats1);
     chunk_statistics->Merge(stats2);
     return chunk_statistics;
   }
 
   void VerifyMergedStatistics(
       const TypedStatistics<TestType>& stats1, const TypedStatistics<TestType>& stats2,
-      const std::function<void(TypedStatistics<TestType>*)>& test_fn) {
-    ASSERT_NO_FATAL_FAILURE(test_fn(MergedStatistics(stats1, stats2).get()));
-    ASSERT_NO_FATAL_FAILURE(test_fn(MergedStatistics(stats2, stats1).get()));
+      const std::function<void(TypedStatistics<TestType>*)>& test_fn,
+      const EncodedStatistics* initial_statistics = nullptr) {

Review Comment:
   Now we just use `MergeDistinctCount` for the distinct count tests, so I removed the overload.



##########
cpp/src/parquet/statistics.cc:
##########
@@ -621,7 +628,9 @@ class TypedStatisticsImpl : public TypedStatistics<DType> {
       // num_values_ is reliable and it means number of non-null values.
       s.all_null_value = num_values_ == 0;
     }
-    // TODO (GH-36505): distinct count is not encoded for now.
+    if (HasDistinctCount()) {

Review Comment:
   Sorry, by, "That seems ok to me," do you mean to leave this here? Or to remove it?



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] mapleFU commented on pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "mapleFU (via GitHub)" <gi...@apache.org>.
mapleFU commented on PR #37016:
URL: https://github.com/apache/arrow/pull/37016#issuecomment-1694657586

   @sfc-gh-ebrossard Hi, overall this patch looks ok for me, would you like to move forward


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] pitrou commented on a diff in pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "pitrou (via GitHub)" <gi...@apache.org>.
pitrou commented on code in PR #37016:
URL: https://github.com/apache/arrow/pull/37016#discussion_r1287315869


##########
cpp/src/parquet/statistics_test.cc:
##########
@@ -645,6 +652,50 @@ class TestStatisticsHasFlag : public TestStatistics<TestType> {
                              EXPECT_FALSE(merged_statistics->HasDistinctCount());
                              EXPECT_FALSE(merged_statistics->Encode().has_distinct_count);
                            });
+
+    // Create a statistics object with zero distinct count. Merging preserves the distinct
+    // count if either side is zero.
+    std::shared_ptr<TypedStatistics<TestType>> statistics3;
+    std::shared_ptr<TypedStatistics<TestType>> statistics4;
+    {
+      EncodedStatistics encoded_statistics3;
+      encoded_statistics3.has_distinct_count = true;
+      encoded_statistics3.distinct_count = 0;
+      statistics3 = std::dynamic_pointer_cast<TypedStatistics<TestType>>(
+          Statistics::Make(this->schema_.Column(0), &encoded_statistics3,
+                           /*num_values=*/0));
+      EXPECT_TRUE(statistics3->HasDistinctCount());
+
+      EncodedStatistics encoded_statistics4;
+      encoded_statistics4.has_distinct_count = true;
+      encoded_statistics4.distinct_count = 10;
+      statistics4 = std::dynamic_pointer_cast<TypedStatistics<TestType>>(
+          Statistics::Make(this->schema_.Column(0), &encoded_statistics4,
+                           /*num_values=*/10));
+      EXPECT_TRUE(statistics4->HasDistinctCount());
+    }

Review Comment:
   There starts to be a lot of copy-pasted code here. How about defining specific helpers? For example:
   ```c++
   std::optional<int64_t> MergeDistinctCount(std::optional<int64_t> initial, std::vector<std::optional<int64_t>> subsequent)
   ```
   
   And then
   ```c++
   ASSERT_EQ(std::nullopt, MergeDistinctCount(std::nullopt, {0});
   ASSERT_EQ(std::nullopt, MergeDistinctCount(std::nullopt, {10, 0});
   ASSERT_EQ({10}, MergeDistinctCount({10}, {0, 0});
   ASSERT_EQ({10}, MergeDistinctCount({0}, {10, 0});
   ASSERT_EQ({10}, MergeDistinctCount({0}, {0, 10});
   ASSERT_EQ(std::nullopt, MergeDistinctCount({10}, {0, 10});
   ASSERT_EQ(std::nullopt, MergeDistinctCount({10}, {0, std::nullopt});
   // etc?
   ```



##########
cpp/src/parquet/statistics_test.cc:
##########
@@ -602,18 +602,25 @@ class TestStatisticsHasFlag : public TestStatistics<TestType> {
   }
 
   std::shared_ptr<TypedStatistics<TestType>> MergedStatistics(
-      const TypedStatistics<TestType>& stats1, const TypedStatistics<TestType>& stats2) {
-    auto chunk_statistics = MakeStatistics<TestType>(this->schema_.Column(0));
+      const TypedStatistics<TestType>& stats1, const TypedStatistics<TestType>& stats2,
+      const EncodedStatistics* initial_statistics) {
+    auto chunk_statistics = std::static_pointer_cast<TypedStatistics<TestType>>(
+        initial_statistics != nullptr
+            ? Statistics::Make(this->schema_.Column(0), initial_statistics)
+            : Statistics::Make(this->schema_.Column(0)));
     chunk_statistics->Merge(stats1);
     chunk_statistics->Merge(stats2);
     return chunk_statistics;
   }
 
   void VerifyMergedStatistics(
       const TypedStatistics<TestType>& stats1, const TypedStatistics<TestType>& stats2,
-      const std::function<void(TypedStatistics<TestType>*)>& test_fn) {
-    ASSERT_NO_FATAL_FAILURE(test_fn(MergedStatistics(stats1, stats2).get()));
-    ASSERT_NO_FATAL_FAILURE(test_fn(MergedStatistics(stats2, stats1).get()));
+      const std::function<void(TypedStatistics<TestType>*)>& test_fn,
+      const EncodedStatistics* initial_statistics = nullptr) {

Review Comment:
   The signature is a bit weird here. How about two different overloads?
   ```c++
   
     void VerifyMergedStatistics(
         const TypedStatistics<TestType>& stats1, const TypedStatistics<TestType>& stats2,
         const std::function<void(TypedStatistics<TestType>*)>& test_fn) { ... }
     void VerifyMergedStatistics(
         const EncodedStatistics& initial_statistics,
         const TypedStatistics<TestType>& stats1, const TypedStatistics<TestType>& stats2,
         const std::function<void(TypedStatistics<TestType>*)>& test_fn) { ... }
   ```



##########
cpp/src/parquet/statistics.cc:
##########
@@ -621,7 +628,9 @@ class TypedStatisticsImpl : public TypedStatistics<DType> {
       // num_values_ is reliable and it means number of non-null values.
       s.all_null_value = num_values_ == 0;
     }
-    // TODO (GH-36505): distinct count is not encoded for now.
+    if (HasDistinctCount()) {

Review Comment:
   That seems ok to me.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] sfc-gh-ebrossard commented on pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "sfc-gh-ebrossard (via GitHub)" <gi...@apache.org>.
sfc-gh-ebrossard commented on PR #37016:
URL: https://github.com/apache/arrow/pull/37016#issuecomment-1664953078

   > I'm OK with the change, but seems that `distinct_count == 0` only happens when the page is all null? Is it a common case?
   > 
   > And encode `distinct_count` seems not applied by parquet-mr and rust impl.
   
   Yeah, the case I was seeing is that we merged stats from an all-null page with a page that had non-null values and ended up with an unset distinct count. I thought it would be useful to preserve the count if we can.
   
   Technically we could make this more general and propagate distinct counts for pages whose min and max ranges don't overlap, too. For example, if one page has a range of `[0, 9]` and the other has a range of `[10, 19]`, we can simply add the distinct counts. What do you think? Maybe that would add too much complexity, though.
   
   Do you mind pointing me to the code for parquet-ml and rust that I should update? If this change looks generally okay for the C++ Parquet code, I'll work on those as well.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] mapleFU commented on pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "mapleFU (via GitHub)" <gi...@apache.org>.
mapleFU commented on PR #37016:
URL: https://github.com/apache/arrow/pull/37016#issuecomment-1664898573

   I'm OK with the change, but seems that `distinct_count == 0` only happens when the page is all null? Is it a common case?
   
   And encode `distinct_count` seems not applied by parquet-mr and rust impl.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] mapleFU commented on a diff in pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "mapleFU (via GitHub)" <gi...@apache.org>.
mapleFU commented on code in PR #37016:
URL: https://github.com/apache/arrow/pull/37016#discussion_r1283978568


##########
cpp/src/parquet/statistics.cc:
##########
@@ -621,7 +628,9 @@ class TypedStatisticsImpl : public TypedStatistics<DType> {
       // num_values_ is reliable and it means number of non-null values.
       s.all_null_value = num_values_ == 0;
     }
-    // TODO (GH-36505): distinct count is not encoded for now.
+    if (HasDistinctCount()) {

Review Comment:
   Yes, previously I think we can write it, but pirtou mentioned that it's bug-prone, and other implemention didn't write that. So I set it not encoded.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] pitrou merged pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "pitrou (via GitHub)" <gi...@apache.org>.
pitrou merged PR #37016:
URL: https://github.com/apache/arrow/pull/37016


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] sfc-gh-ebrossard commented on a diff in pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "sfc-gh-ebrossard (via GitHub)" <gi...@apache.org>.
sfc-gh-ebrossard commented on code in PR #37016:
URL: https://github.com/apache/arrow/pull/37016#discussion_r1283668564


##########
cpp/src/parquet/statistics.cc:
##########
@@ -621,7 +628,9 @@ class TypedStatisticsImpl : public TypedStatistics<DType> {
       // num_values_ is reliable and it means number of non-null values.
       s.all_null_value = num_values_ == 0;
     }
-    // TODO (GH-36505): distinct count is not encoded for now.
+    if (HasDistinctCount()) {

Review Comment:
   @mapleFU FYI I noticed that distinct counts aren't propagated to `EncodedStatistics`, as tracked in https://github.com/apache/arrow/issues/36505. For my new test, I could potentially just check `TypedStatistics` without calling `Encode()`, if you'd rather that I leave this as-is.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] mapleFU commented on a diff in pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "mapleFU (via GitHub)" <gi...@apache.org>.
mapleFU commented on code in PR #37016:
URL: https://github.com/apache/arrow/pull/37016#discussion_r1283978568


##########
cpp/src/parquet/statistics.cc:
##########
@@ -621,7 +628,9 @@ class TypedStatisticsImpl : public TypedStatistics<DType> {
       // num_values_ is reliable and it means number of non-null values.
       s.all_null_value = num_values_ == 0;
     }
-    // TODO (GH-36505): distinct count is not encoded for now.
+    if (HasDistinctCount()) {

Review Comment:
   Yes, previously I think we can write it, but pirtou mentioned that it's bug-prone, and other implemention didn't write that. So I set it not encoded.
   
   I'm ok with this change, but maybe we can take a look how other implemention works.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] sfc-gh-ebrossard commented on a diff in pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "sfc-gh-ebrossard (via GitHub)" <gi...@apache.org>.
sfc-gh-ebrossard commented on code in PR #37016:
URL: https://github.com/apache/arrow/pull/37016#discussion_r1283579685


##########
cpp/src/parquet/statistics_test.cc:
##########
@@ -645,6 +645,50 @@ class TestStatisticsHasFlag : public TestStatistics<TestType> {
                              EXPECT_FALSE(merged_statistics->HasDistinctCount());
                              EXPECT_FALSE(merged_statistics->Encode().has_distinct_count);
                            });
+
+    // Create a statistics object with zero distinct count. Merging preserves the distinct
+    // count if either side is zero.
+    std::shared_ptr<TypedStatistics<TestType>> statistics3;
+    std::shared_ptr<TypedStatistics<TestType>> statistics4;
+    {
+      EncodedStatistics encoded_statistics3;
+      encoded_statistics3.has_distinct_count = true;
+      encoded_statistics3.distinct_count = 0;
+      statistics3 = std::dynamic_pointer_cast<TypedStatistics<TestType>>(
+          Statistics::Make(this->schema_.Column(0), &encoded_statistics3,
+                           /*num_values=*/0));
+      EXPECT_TRUE(statistics3->HasDistinctCount());
+
+      EncodedStatistics encoded_statistics4;
+      encoded_statistics4.has_distinct_count = true;
+      encoded_statistics4.distinct_count = 10;
+      statistics4 = std::dynamic_pointer_cast<TypedStatistics<TestType>>(
+          Statistics::Make(this->schema_.Column(0), &encoded_statistics4,
+                           /*num_values=*/10));
+      EXPECT_TRUE(statistics4->HasDistinctCount());
+    }
+
+    // Both sides have 0 for the distinct count.
+    VerifyMergedStatistics(*statistics3, *statistics3,
+                           [](TypedStatistics<TestType>* merged_statistics) {
+                             EXPECT_TRUE(merged_statistics->HasDistinctCount());

Review Comment:
   Sorry, these tests are still failing. I'll see if I can get them running locally with https://arrow.apache.org/docs/developers/cpp/development.html#running-unit-tests and figure out what I've missed here.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] mapleFU commented on pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "mapleFU (via GitHub)" <gi...@apache.org>.
mapleFU commented on PR #37016:
URL: https://github.com/apache/arrow/pull/37016#issuecomment-1664982479

   1. https://github.com/apache/arrow-rs/blob/841a6a981dfa7ece0369b1fc8be77555f036c1b4/parquet/src/file/statistics.rs#L231 Rust write distinct count. But it will not merge that. The merge logic is consistent with our
   2. parquet-mr seems doesn't write it
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] github-actions[bot] commented on pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "github-actions[bot] (via GitHub)" <gi...@apache.org>.
github-actions[bot] commented on PR #37016:
URL: https://github.com/apache/arrow/pull/37016#issuecomment-1664372829

   :warning: GitHub issue #37014 **has been automatically assigned in GitHub** to PR creator.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] sfc-gh-ebrossard commented on pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "sfc-gh-ebrossard (via GitHub)" <gi...@apache.org>.
sfc-gh-ebrossard commented on PR #37016:
URL: https://github.com/apache/arrow/pull/37016#issuecomment-1696215398

   > @sfc-gh-ebrossard Hi, overall this patch looks ok for me, would you like to move forward
   
   Thanks for the nudge; I addressed the comments :)


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


[GitHub] [arrow] conbench-apache-arrow[bot] commented on pull request #37016: GH-37014: [C++][Parquet] Preserve some Parquet distinct counts when merging stats

Posted by "conbench-apache-arrow[bot] (via GitHub)" <gi...@apache.org>.
conbench-apache-arrow[bot] commented on PR #37016:
URL: https://github.com/apache/arrow/pull/37016#issuecomment-1703883843

   After merging your PR, Conbench analyzed the 6 benchmarking runs that have been run so far on merge-commit c99d318b3306f704b1fa39bdffe15d62e4c5d43b.
   
   There were no benchmark performance regressions. 🎉
   
   The [full Conbench report](https://github.com/apache/arrow/runs/16442520700) has more details. It also includes information about possible false positives for unstable benchmarks that are known to sometimes produce them.


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org