Repository navigation
Improve Arrow Parquet writer to include UUID logical type - #100150
Conversation
47ac08b to
ff8664c
Compare
|
Workflow [PR], commit [ff8664c] Summary: ✅ AI ReviewSummaryThis PR updates Arrow-based UUID export by introducing Arrow UUID extension typing and a builder-safe conversion path ( ClickHouse Rules
Final Verdict
|
LLVM Coverage Report
PR changed lines: PR changed-lines coverage: 92.00% (69/75, 0 noise lines excluded) |
|
Looks like the public CI is looking great, but the CH Inc sync check failed. Could a maintainer take a quick look? Let me know if it's related to the Arrow parquet writer UUID changes or not, and I'd be happy to push a fix if needed! Thanks! |
alexey-milovidov
left a comment
There was a problem hiding this comment.
Thanks for the quick fix!
…tion When a PR changes a C++ source file, tests that cover sibling files (same directory, same functional domain) are now included as additional candidates, ranked below direct hits (SIBLING_DIR_WIDTH=10000). Problem solved: for PR #100150 (Arrow writer UUID fix), the 16 directly selected tests all covered CHColumnToArrowColumn.cpp (the writer), but 32 additional tests cover ArrowColumnToCHColumn.cpp (the reader) which lives in the same directory and is functionally related. These tests were missed because they don't call the writer directly. Algorithm (new _query_sibling_dir_tests method): 1. Extract domain keywords from changed C++ source filenames using CamelCase word splitting, filtering out architectural/common words. E.g. CHColumnToArrowColumn.cpp → ["Arrow"] MergeTreeIndexConditionText.cpp → ["Index", "Text"] 2. With one keyword: LIKE '%Arrow%' (OR logic). With multiple: LIKE '%Index%' AND LIKE '%Text%' (AND logic avoids false matches on broad words like "Index" alone). 3. Inner query: find sibling files (same dir, keyword-filtered) that the PRIMARY tests already cover — these are files with a natural code relationship to the changed file. 4. Outer query: find tests covering those same sibling files that were NOT in the primary set — these tests exercise the same domain from a different entry point. Results: PR #100150 (Arrow writer): 16 → 48 tests (+32 Arrow reader tests) PR #100224 (text index): 71 → 112 tests (+41 text/bloom index tests) No false positives added for unrelated PRs. Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
Antalya 26.3 Backport of ClickHouse#99521, ClickHouse#100150 - Add Arrow and Parquet format support for UUID data type
…et-builder Improve Arrow Parquet writer to include UUID logical type
Antalya 26.3 Backport of ClickHouse#99521, ClickHouse#100150 - Add Arrow and Parquet format support for UUID data type
…et-builder Improve Arrow Parquet writer to include UUID logical type
Closes #100119
Changelog category:
Changelog entry:
Exporting UUIDs to Parquet via the Arrow encoder now includes the correct UUID type annotation, eliminating the need to manually cast
FixedString(16)data when reading the files back into ClickHouse or other systems.Motivation
When exporting to Parquet using the Arrow-based writer, UUID columns were previously written as raw
FIXED_LEN_BYTE_ARRAY(16)without thelogicalType.UUIDannotation. This caused downstream systems (and ClickHouse's own Parquet reader) to infer the column asFixedString(16)rather than a proper UUID.Ensures full data interoperability for UUIDs when exporting to Parquet via Arrow, so downstream tools read the type correctly out of the box without requiring manual schema hints.
Parameters
output_format_parquet_use_custom_encoder=0: Applies specifically when this setting is explicitly set to 0 (which routes Parquet generation through the Arrow subsystem). The native Parquet encoder (1, the default) is unaffected and already handles UUIDs correctly.Version info
26.4.1.66