Skip to content

Commit 16e06c4

Browse files
committed
Merge remote-tracking branch 'origin/master' into pr-test-expected-join
2 parents 9d03ba7 + 2f4b0ed commit 16e06c4

File tree

252 files changed

+9240
-3677
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

252 files changed

+9240
-3677
lines changed

.claude/CLAUDE.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,4 @@ Always load and apply the following skills:
8484
- .claude/skills/build
8585
- .claude/skills/test
8686
- .claude/skills/fix-sync
87+
- .claude/skills/alloc-profile

.claude/skills/alloc-profile/SKILL.md

Lines changed: 409 additions & 0 deletions
Large diffs are not rendered by default.

.claude/skills/build/SKILL.md

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Build ClickHouse in `build` or `build_debug`, `build_asan`, `build_tsan`, `build
4343
1. **Determine build configuration:**
4444
- Build type: `$0` or `RelWithDebInfo` if not specified
4545
- Target: `$1` or `clickhouse` if not specified
46-
- Build directory: `build/${buildType}` (e.g., `build/RelWithDebInfo`, `build/Debug`, `build/ASAN`)
46+
- Build directory: `build` (e.g., `build`, `build_debug`, `build_asan`)
4747

4848
2. **Create log file and start the build:**
4949

@@ -62,7 +62,7 @@ Build ClickHouse in `build` or `build_debug`, `build_asan`, `build_tsan`, `build
6262

6363
**Step 2b: Start the ninja build:**
6464
```bash
65-
cd build/${buildType} && ninja [target] > [log file path] 2>&1
65+
cd build && ninja [target] > [log file path] 2>&1
6666
```
6767

6868
When using ninja you can pass `-k{num}` to continue building even if some targets fail. For example, `-k20` will keep going after 20 failures. Adjust this number based on your needs.
@@ -90,7 +90,7 @@ Build ClickHouse in `build` or `build_debug`, `build_asan`, `build_tsan`, `build
9090

9191
**If build succeeds:**
9292
- Confirm build completed successfully
93-
- Report binary location: `build/${buildType}/programs/[target]`
93+
- Report binary location: `build/programs/[target]`
9494
- Mention any warnings if present
9595
- Report build time if available
9696
- Keep response concise
@@ -161,7 +161,7 @@ Build ClickHouse in `build` or `build_debug`, `build_asan`, `build_tsan`, `build
161161
- Run: pkill -f \"clickhouse[- ]server\"
162162
- Wait 1 second: sleep 1
163163
- Verify stopped: pgrep -f \"clickhouse[- ]server\" should return nothing
164-
- Report: \"Server stopped. To start the new version, run: ./build/${buildType}/programs/clickhouse server --config-file ./programs/server/config.xml\"
164+
- Report: \"Server stopped. To start the new version, run: ./build/programs/clickhouse server --config-file ./programs/server/config.xml\"
165165
- If user chooses \"No, keep it running\":
166166
- Report: \"Server remains running with the old binary. You'll need to manually restart it to use the new build.\"
167167
@@ -180,7 +180,7 @@ Build ClickHouse in `build` or `build_debug`, `build_asan`, `build_tsan`, `build
180180

181181
**For successful builds:**
182182
- Confirm the build completed successfully
183-
- Report the binary location: `build/${buildType}/programs/[target]`
183+
- Report the binary location: `build/programs/[target]`
184184
- Report the server status outcome from step 5
185185

186186
**For failed builds:**
@@ -207,11 +207,11 @@ Build ClickHouse in `build` or `build_debug`, `build_asan`, `build_tsan`, `build
207207

208208
- Always run from repository root
209209
- **NEVER** create build directories or run `cmake` - the build directory must already be configured
210-
- Build directories follow pattern: `build/${buildType}` (e.g., `build/Debug`, `build/ASAN`)
211-
- Binaries are located in: `build/${buildType}/programs/`
210+
- Build directories follow pattern: `build` (e.g., `build_debug`, `build_asan`)
211+
- Binaries are located in: `build/programs/`
212212
- This skill only runs incremental builds with `ninja`
213213
- To configure a new build directory, the user must manually run CMake first
214-
- For a clean build, the user should remove `build/${buildType}` and reconfigure manually
214+
- For a clean build, the user should remove `build` and reconfigure manually
215215
- **MANDATORY:** After successful builds, this skill MUST check for running ClickHouse servers and ask the user if they want to stop them to use the new build
216216
- **MANDATORY:** ALL build output (success or failure) MUST be analyzed by a Task agent with `subagent_type=general-purpose`
217217
- **MANDATORY:** ALWAYS provide a final summary to the user at the end of the skill execution (step 6)

CHANGELOG.md

Lines changed: 375 additions & 0 deletions
Large diffs are not rendered by default.

README.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ curl https://clickhouse.com/ | sh
3535

3636
## Monthly Release & Community Call
3737

38-
Join us for the [ClickHouse **26.1** Release Call](https://clickhouse.com/company/events/v26-01-community-release-call) on January 29, 2026.
38+
Join us for the [ClickHouse **26.2** Release Call](https://clickhouse.com/company/events/v26-2-community-release-call) on February 26, 2026.
3939

4040
Watch all release presentations and videos at [ClickHouse Theater](https://presentations.clickhouse.com/) and [YouTube Playlist](https://www.youtube.com/playlist?list=PL0Z2YDlm0b3jAlSy1JxyP8zluvXaN3nxU).
4141

@@ -47,17 +47,23 @@ Please feel free to reach out to tyler `<at>` clickhouse `<dot>` com.
4747
You can also peruse [ClickHouse Events](https://clickhouse.com/company/news-events) for a list of all upcoming trainings, meetups, speaking engagements, etc.
4848

4949
Upcoming meetups
50-
* [AI Night San Francisco](https://luma.com/j2ck1sbz)- February 11th, 2026
51-
* [Toronto Meetup](https://luma.com/8p8unbnw) - February 19th, 2026
5250
* [Melbourne Meetup](https://www.meetup.com/clickhouse-melbourne-user-group/events/312871833/) - February 24th, 2026
5351
* [Seattle Meetup](https://luma.com/jsctpwoa) - February 26th, 2026
5452
* [Bangalore GDG + Deutsche Bank Meetup](https://www.meetup.com/clickhouse-bangalore-user-group/events/313325219/) - February 28th, 2026
5553
* [LA Meetup](https://luma.com/wbkqmaqk) - March 6th, 2026
5654
* [Tokyo Meetup - LibreChat Night](https://www.meetup.com/clickhouse-tokyo-user-group/events/313275265/) - March 9th, 2026
5755
* [Women+ in open source](https://luma.com/qcqlia4g) - March 9th, 2026
5856
* [Sao Paulo Meetup](https://www.meetup.com/clickhouse-brasil-user-group/events/313294062) - March 10th, 2026
57+
* [San Francisco Meetup](https://luma.com/6rnu6wzs) - March 11th, 2026
58+
* [Apache Iceberg™ Meetup Pittsburgh](https://luma.com/mqgwk79x) - March 12th, 2026
59+
* [NY Meetup](https://luma.com/c7tprb51) - March 19th, 2026
60+
* [Seattle Observability Meetup](https://luma.com/vph3jbkm) - March 26th, 2026
61+
* [San Francisco Observability FireSide Chat](https://luma.com/v5d8u087) - March 31st, 2026
62+
5963

6064
Recent meetups
65+
* [Toronto Meetup](https://luma.com/8p8unbnw) - February 19th, 2026
66+
* [AI Night San Francisco](https://luma.com/j2ck1sbz)- February 11th, 2026
6167
* [ClickHouse London Meetup](https://www.meetup.com/clickhouse-london-user-group/events/312314505/) - February 10th, 2026
6268
* [ClickHouse Barcelona Meetup](https://www.meetup.com/clickhouse-barcelona-user-group/events/312714616/) - February 5th, 2026
6369
* [ClickHouse Dinner at FOSDEM](https://luma.com/czvs584m) - January 31st, 2026
@@ -70,8 +76,8 @@ Recent meetups
7076
* [Data & AI Paris Meetup](https://luma.com/3szhmv9h) - January 22nd, 2026
7177
* [Iceberg Meetup Menlo Park](https://luma.com/abggijbh) - January 21st, 2026
7278
* [Gurgaon/Delhi Meetup](https://www.meetup.com/clickhouse-delhi-user-group/events/312621832/) - January 10th, 2026
73-
74-
79+
* [AI Night San Francisco](https://luma.com/j2ck1sbz)- February 11th, 2026
80+
* [Toronto Meetup](https://luma.com/8p8unbnw) - February 19th, 2026
7581

7682

7783
## Recent Recordings

ci/jobs/functional_tests.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,7 @@ def configure_log_export():
432432
commands.append(CH.enable_thread_fuzzer_config)
433433

434434
os.environ["MALLOC_CONF"] = (
435-
f"prof_active:true,prof_prefix:{temp_dir}/jemalloc_profiles/clickhouse.jemalloc"
435+
f"prof_prefix:{temp_dir}/jemalloc_profiles/clickhouse.jemalloc"
436436
)
437437

438438
if not is_coverage:

ci/jobs/scripts/clickhouse_proc.py

Lines changed: 36 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -534,14 +534,45 @@ def create_minio_log_tables(self):
534534
verbose=True,
535535
strict=True,
536536
)
537-
status = (
538-
"failed"
539-
if not res
540-
else Shell.get_output(
537+
if not res:
538+
return False
539+
540+
# Restart minio with a timeout to avoid hanging forever (see #97647).
541+
# If the restart hangs, kill minio and start it again.
542+
restart_timeout = 60
543+
try:
544+
print(f"Restarting clickminio (timeout {restart_timeout}s)")
545+
result = subprocess.run(
541546
"/mc admin service restart clickminio --wait --json 2>&1 | jq -r .status",
547+
shell=True,
548+
stdout=subprocess.PIPE,
549+
stderr=subprocess.PIPE,
550+
text=True,
551+
timeout=restart_timeout,
552+
executable="/bin/bash",
553+
)
554+
status = result.stdout.strip()
555+
except subprocess.TimeoutExpired:
556+
print(
557+
f"WARNING: minio restart timed out after {restart_timeout}s, killing and restarting"
558+
)
559+
Shell.check("pkill -9 -f 'minio server'", verbose=True)
560+
time.sleep(2)
561+
Shell.check(
562+
f"nohup minio server --address :11111 {temp_dir}/minio_data &",
542563
verbose=True,
543564
)
544-
)
565+
# Wait for minio to be ready
566+
for _ in range(30):
567+
if Shell.check(
568+
"/mc ls clickminio/test", verbose=False
569+
):
570+
status = "success"
571+
break
572+
time.sleep(1)
573+
else:
574+
status = "failed"
575+
545576
res = "success" in status
546577
if not res:
547578
print(f"ERROR: Failed to restart clickminio, status: {status}")

docs/en/engines/table-engines/integrations/iceberg.md

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,8 @@ CREATE TABLE iceberg_table ENGINE=IcebergS3(iceberg_conf, filename = 'test_table
7575
Table engine `Iceberg` is an alias to `IcebergS3` now.
7676

7777
## Schema evolution {#schema-evolution}
78-
At the moment, with the help of CH, you can read iceberg tables, the schema of which has changed over time. We currently support reading tables where columns have been added and removed, and their order has changed. You can also change a column where a value is required to one where NULL is allowed. Additionally, we support permitted type casting for simple types, namely:  
78+
ClickHouse supports reading Iceberg tables whose schema has evolved over time. This includes tables where columns have been added, removed, or reordered, as well as columns changed from required to nullable. Additionally, the following type casts are supported:
79+
7980
* int -> long
8081
* float -> double
8182
* decimal(P, S) -> decimal(P', S) where P' > P.
@@ -94,10 +95,12 @@ ClickHouse supports time travel for Iceberg tables, allowing you to query histor
9495

9596
## Processing of tables with deleted rows {#deleted-rows}
9697

97-
Currently, only Iceberg tables with [position deletes](https://iceberg.apache.org/spec/#position-delete-files) are supported.
98+
ClickHouse supports reading Iceberg tables that use the following deletion methods:
99+
100+
- [Position deletes](https://iceberg.apache.org/spec/#position-delete-files)
101+
- [Equality deletes](https://iceberg.apache.org/spec/#equality-delete-files) (supported from version 25.8+)
98102

99-
The following deletion methods are **not supported**:
100-
- [Equality deletes](https://iceberg.apache.org/spec/#equality-delete-files)
103+
The following deletion method is **not supported**:
101104
- [Deletion vectors](https://iceberg.apache.org/spec/#deletion-vectors) (introduced in v3)
102105

103106
### Basic usage {#basic-usage}

docs/en/sql-reference/table-functions/iceberg.md

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -420,7 +420,7 @@ y: 993
420420

421421
### Schema evolution {#iceberg-writes-schema-evolution}
422422

423-
ClickHouse allows you to add, drop, or modify columns with simple types (non-tuple, non-array, non-map).
423+
ClickHouse allows you to add, drop, modify, or rename columns with simple types (non-tuple, non-array, non-map).
424424

425425
### Example {#example-iceberg-writes-evolution}
426426

@@ -479,6 +479,27 @@ Row 1:
479479
──────
480480
x: Ivanov
481481
y: 993
482+
483+
ALTER TABLE iceberg_writes_example RENAME COLUMN y TO value;
484+
SHOW CREATE TABLE iceberg_writes_example;
485+
486+
┌─statement─────────────────────────────────────────────────┐
487+
1. │ CREATE TABLE default.iceberg_writes_example ↴│
488+
│↳( ↴│
489+
│↳ `x` Nullable(String), ↴│
490+
│↳ `value` Nullable(Int64) ↴│
491+
│↳) ↴│
492+
│↳ENGINE = IcebergLocal('/home/scanhex12/iceberg_example/') │
493+
└───────────────────────────────────────────────────────────┘
494+
495+
SELECT *
496+
FROM iceberg_writes_example
497+
FORMAT VERTICAL;
498+
499+
Row 1:
500+
──────
501+
x: Ivanov
502+
value: 993
482503
```
483504

484505
### Compaction {#iceberg-writes-compaction}

programs/format/Format.cpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,16 +208,25 @@ int mainEntryClickHouseFormat(int argc, char ** argv)
208208
additional_names.insert(word);
209209
}
210210

211+
/// Add lowercased versions of all additional names for case-insensitive matching.
212+
std::unordered_set<std::string> additional_names_lowercase;
213+
for (const auto & name : additional_names)
214+
additional_names_lowercase.insert(Poco::toLower(name));
215+
211216
KnownIdentifierFunc is_known_identifier = [&](std::string_view name)
212217
{
213218
std::string what(name);
214219

215-
return FunctionFactory::instance().has(what)
220+
if (FunctionFactory::instance().has(what)
216221
|| AggregateFunctionFactory::instance().isAggregateFunctionName(what)
217222
|| TableFunctionFactory::instance().isTableFunctionName(what)
218223
|| FormatFactory::instance().isOutputFormat(what)
219224
|| FormatFactory::instance().isInputFormat(what)
220-
|| additional_names.contains(what);
225+
|| additional_names.contains(what))
226+
return true;
227+
228+
/// Case-insensitive fallback for additional names (storage names, data types, settings, etc.)
229+
return additional_names_lowercase.contains(Poco::toLower(what));
221230
};
222231

223232
WriteBufferFromFileDescriptor out(STDOUT_FILENO);

0 commit comments

Comments
 (0)