Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions core/guides/use-cases/data-warehousing/support-matrix.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -166,10 +166,10 @@ The following catalogs are currently supported. Refer to each catalog's referenc
|---------|---------|:-:|:-:|:-:|---------|
| [AWS Glue Catalog](/core/guides/use-cases/data-warehousing/glue-catalog) | Iceberg | ✅ Beta | ❌ | ❌ | [Glue catalog guide](/core/guides/use-cases/data-warehousing/glue-catalog) |
| [BigLake Metastore](/core/guides/use-cases/data-warehousing/biglake-catalog) | Iceberg | ✅ Beta | ❌ | ❌ | [BigLake Metastore guide](/core/guides/use-cases/data-warehousing/biglake-catalog) |
| [Databricks Unity Catalog](/core/guides/use-cases/data-warehousing/unity-catalog) | Delta, Iceberg | ✅ Beta | ❌ | ❌ | [Unity Catalog guide](/core/guides/use-cases/data-warehousing/unity-catalog) |
| [Databricks Unity Catalog](/core/guides/use-cases/data-warehousing/unity-catalog) | Delta, Iceberg | ✅ Beta | ✅ Beta | ✅ Beta | [Unity Catalog guide](/core/guides/use-cases/data-warehousing/unity-catalog) |
| [Iceberg REST](/core/guides/use-cases/data-warehousing/rest-catalog) | Iceberg | ✅ Beta | ❌ | ❌ | [REST catalog guide](/core/guides/use-cases/data-warehousing/rest-catalog) |
| [Lakekeeper](/core/guides/use-cases/data-warehousing/lakekeeper-catalog) | Iceberg | ✅ Beta | ❌ | ❌ | [Lakekeeper catalog guide](/core/guides/use-cases/data-warehousing/lakekeeper-catalog) |
| [Project Nessie](/core/guides/use-cases/data-warehousing/nessie-catalog) | Iceberg | ✅ Experimental | ❌ | ❌ | [Nessie catalog guide](/core/guides/use-cases/data-warehousing/nessie-catalog) |
| [Microsoft OneLake](/core/guides/use-cases/data-warehousing/onelake-catalog) | Iceberg | ✅ Beta | ❌ | ❌ | [OneLake catalog guide](/core/guides/use-cases/data-warehousing/onelake-catalog) |
| [Microsoft OneLake](/core/guides/use-cases/data-warehousing/onelake-catalog) | Iceberg | ✅ Beta | ✅ Beta | ✅ Beta | [OneLake catalog guide](/core/guides/use-cases/data-warehousing/onelake-catalog) |

All catalog integrations currently require an experimental or beta setting to be enabled and expose **read-only** access — tables can be queried but not created or written to through the catalog connection. To load data from a catalog into ClickHouse for faster analytics, use `INSERT INTO SELECT` as described in the [accelerating analytics guide](/core/guides/use-cases/data-warehousing/getting-started/accelerating-analytics). To write data back to open table formats, create standalone Iceberg tables as described in the [writing data guide](/core/guides/use-cases/data-warehousing/getting-started/writing-data).
All catalog integrations currently require an experimental or beta setting to be enabled. With the exception of Microsoft OneLake and Databricks Unity Catalog, all catalogs expose **read-only** access — tables can be queried but not created or written to through the catalog connection. To load data from a catalog into ClickHouse for faster analytics, use `INSERT INTO SELECT` as described in the [accelerating analytics guide](/core/guides/use-cases/data-warehousing/getting-started/accelerating-analytics). To write data back to open table formats, create standalone Iceberg tables as described in the [writing data guide](/core/guides/use-cases/data-warehousing/getting-started/writing-data).
58 changes: 29 additions & 29 deletions integrations/language-clients/java/jdbc.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -195,27 +195,27 @@ There are few ways to change the mapping:

**Numeric Types**

| ClickHouse Type | JDBC Type | Java Class |
|-----------------------------|------------------------------|-----------------------------|
| Int8 | TINYINT | java.lang.Byte |
| Int16 | SMALLINT | java.lang.Short |
| Int32 | INTEGER | java.lang.Integer |
| Int64 | BIGINT | java.lang.Long |
| Int128 | OTHER | java.math.BigInteger |
| Int256 | OTHER | java.math.BigInteger |
| UInt8 | OTHER | java.lang.Short |
| UInt16 | OTHER | java.lang.Integer |
| UInt32 | OTHER | java.lang.Long |
| UInt64 | OTHER | java.math.BigInteger |
| UInt128 | OTHER | java.math.BigInteger |
| UInt256 | OTHER | java.math.BigInteger |
| Float32 | REAL | java.lang.Float |
| Float64 | DOUBLE | java.lang.Double |
| Decimal32 | DECIMAL | java.math.BigDecimal |
| Decimal64 | DECIMAL | java.math.BigDecimal |
| Decimal128 | DECIMAL | java.math.BigDecimal |
| Decimal256 | DECIMAL | java.math.BigDecimal |
| Bool | BOOLEAN | java.lang.Boolean |
| ClickHouse Type | JDBC Type | Java Class |
|-----------------------------|-------------|-----------------------------|
| Int8 | TINYINT | java.lang.Byte |
| Int16 | SMALLINT | java.lang.Short |
| Int32 | INTEGER | java.lang.Integer |
| Int64 | BIGINT | java.lang.Long |
| Int128 | NUMERIC | java.math.BigInteger |
| Int256 | NUMERIC | java.math.BigInteger |
| UInt8 | SMALLINT | java.lang.Short |
| UInt16 | INTEGER | java.lang.Integer |
| UInt32 | BIGINT | java.lang.Long |
| UInt64 | NUMERIC | java.math.BigInteger |
| UInt128 | NUMERIC | java.math.BigInteger |
| UInt256 | NUMERIC | java.math.BigInteger |
| Float32 | FLOAT | java.lang.Float |
| Float64 | DOUBLE | java.lang.Double |
| Decimal32 | DECIMAL | java.math.BigDecimal |
| Decimal64 | DECIMAL | java.math.BigDecimal |
| Decimal128 | DECIMAL | java.math.BigDecimal |
| Decimal256 | DECIMAL | java.math.BigDecimal |
| Bool | BOOLEAN | java.lang.Boolean |

- numeric types are interconvertible. So `Int8` can be get as `Float64` and vice versa.:
- `rs.getObject(1, Float64.class)` will return `Float64` value of `Int8` column.
Expand All @@ -228,20 +228,20 @@ There are few ways to change the mapping:

**String Types**

| ClickHouse Type | JDBC Type | Java Class |
|-----------------------------|------------------------------|-----------------------------|
| String | VARCHAR | java.lang.String |
| FixedString | VARCHAR | java.lang.String |
| ClickHouse Type | JDBC Type | Java Class |
|-----------------------------|-------------|-----------------------------|
| String | VARCHAR | java.lang.String |
| FixedString | VARCHAR | java.lang.String |

- `String` can be read only as `java.lang.String` or `byte[]`.
- `FixedString` is read as is and will be padded with zeros to the length of the column. (For example `FixedString(10)` for `'John'` will be read as `'John\0\0\0\0\0\0\0\0\0'`.)

**Enum Types**

| ClickHouse Type | JDBC Type | Java Class |
|-----------------------------|------------------------------|-----------------------------|
| Enum8 | OTHER | java.lang.String |
| Enum16 | OTHER | java.lang.String |
| ClickHouse Type | JDBC Type | Java Class |
|-----------------------------|-------------|-----------------------------|
| Enum8 | VARCHAR | java.lang.String |
| Enum16 | VARCHAR | java.lang.String |

- `Enum8` and `Enum16` are mapped to `java.lang.String` by default.
- Enum values can be read as numeric values using designtated getter method or `getObject(columnIndex, Integer.class)` method.
Expand Down
29 changes: 28 additions & 1 deletion products/bring-your-own-cloud/reference/privilege.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ description: 'Deploy ClickHouse on your own cloud infrastructure'
doc_type: 'reference'
---

## CloudFormation IAM roles {#cloudformation-iam-roles}
## AWS IAM roles {#aws-iam-roles}
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Renamed anchor breaks cross-reference in security playbook

Medium Severity

The heading anchor was renamed from #cloudformation-iam-roles to #aws-iam-roles, but byoc-security-playbook.mdx still links to the old anchor at /products/bring-your-own-cloud/reference/privilege#cloudformation-iam-roles. This creates a broken fragment link — the page will load but won't scroll to the intended section, which is confusing for users following a security incident playbook.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit 22774d0. Configure here.


### Bootstrap IAM role {#bootstrap-iam-role}

Expand All @@ -23,6 +23,7 @@ The bootstrap IAM role has the following permissions:
In addition to the `ClickHouseManagementRole` created via CloudFormation, the controller will create several additional roles.

These roles are assumed by applications running within the customer's EKS cluster:

- **State Exporter Role**
- ClickHouse component that reports service health information to ClickHouse Cloud.
- Requires permission to write to an SQS queue owned by ClickHouse Cloud.
Expand All @@ -39,3 +40,29 @@ These roles are assumed by applications running within the customer's EKS cluste
**K8s-control-plane** and **k8s-worker** roles are meant to be assumed by AWS EKS services.

Lastly, **`data-plane-mgmt`** allows a ClickHouse Cloud Control Plane component to reconcile necessary custom resources, such as `ClickHouseCluster` and the Istio Virtual Service/Gateway.

## GCP service accounts {#gcp-service-accounts}

### Bootstrap service account {#bootstrap-service-account}

The bootstrap service account is granted project-scoped custom roles with the following permissions:

- **Common**: Baseline read and identity permissions.
- **VPC**: Manage the VPC, subnets, routing, and Private Service Connect attachments that host your BYOC infrastructure.
- **Cluster**: Manages GKE clusters and in-cluster resources.
- **Storage**: Used to manage Cloud Storage buckets used for ClickHouse backups, shared state, and monitoring data.
- **IAM Role**: Manages service accounts and custom roles inside the project. This role does not grant the ability to create service account keys, bind organization policies, or touch any resources in other projects.

### Additional service accounts created by the controller {#additional-service-accounts-created-by-the-controller}

In addition to the `clickhouse-management` service account created via Terraform as part of onboarding. When you provision your first BYOC service, ClickHouse's control plane (authenticating as `clickhouse-management`) creates additional service accounts in your project for specific in-cluster workloads. Each of these is created with a narrow, single-purpose permission set.

- **GKE node runtime identity**
- Attached to every GKE node virtual machine in your BYOC cluster.
- Used by kubelet, node-local agents, and the Cloud Operations collectors to emit logs and metrics, and by the image pulling subsystem to download container images.
- **Billing scraper identity**
- Used by standalone scraper workload to collect billing telemetry.
- **Monitoring identity**
- Target identity for the monitoring stack running in your cluster. Used to read/write long-term metric storage in a GCS bucket dedicated to this deployment.
- **ClickHouse runtime management identity**
- Used by ClickHouse's runtime data-plane management controller which handles day-2 operations such as Private Service Connect endpoint management, bucket lifecycle adjustments, and service-account rotations.
90 changes: 90 additions & 0 deletions products/clickstack/demo-days/2026/2026-05-22.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
slug: /use-cases/observability/clickstack/demo-days/2026/2026-05-22
title: 'Demo days - 2026-05-22'
sidebarTitle: '2026-05-22'
description: 'ClickStack demo days for 2026-05-22'
doc_type: 'guide'
keywords: ['ClickStack', 'Demo days']
---

## ClickCannon data generation update {#clickcannon-data-generation-update}

*Demo by [@SpencerTorres](https://github.com/SpencerTorres)*

<Frame>
<iframe src="https://www.youtube.com/embed/Zljd07_4uF4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</Frame>

[ClickCannon](https://github.com/clickhouse/clickcannon) is the tool we use internally for sizing exercises: generating large volumes of OpenTelemetry data while issuing concurrent queries to estimate the resources customers need for a given ingest and query workload. At OpenHouse we announced it publicly, and Spencer walked through the latest iteration.

Rather than pre-configuring data on disk, you can now configure the generator inline. Enable it, set how many threads, how many rows per block, how many rows per second in total, and a few memory constraints. There is no need to stage two terabytes of test data on disk first, which is what made the tool hard to share before.

We will be pointing more users at ClickCannon for their own sizing efforts. The repo lives at [https://github.com/clickhouse/clickcannon](https://github.com/clickhouse/clickcannon).

## Date input for full-screen tiles and source-scoped filters {#date-input-for-full-screen-tiles-and-source-scoped-filters}

*Demo by [@pulpdrew](https://github.com/pulpdrew)*

<Frame>
<iframe src="https://www.youtube.com/embed/Mop1EYtGwKc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</Frame>

Two related dashboard improvements landed together. When you full-screen a single tile, you now get a dedicated time picker and granularity selector that is independent from the dashboard's own time range. That means you can zoom in on a long history for one specific metric (say, one chart on the ClickHouse cluster dashboard) without forcing every other tile on the dashboard to refresh. The dashboard name now also appears in the browser tab title.

The second piece is source scoping for dashboard filters. Filters can be limited so they only broadcast to tiles backed by specific sources, instead of being applied globally across every tile. On a mixed-source dashboard that combines, say, logs and traces, you can keep a filter from leaking into a tile where it does not belong.

**Related PRs:** [#2302](https://github.com/hyperdxio/hyperdx/pull/2302) feat: Minor dashboard improvements, [#2331](https://github.com/hyperdxio/hyperdx/pull/2331) feat: Add source scoping to dashboard filters

## Text index recognised on lower(Body) {#text-index-recognised-on-lower-body}

*Demo by [@pulpdrew](https://github.com/pulpdrew)*

<Frame>
<iframe src="https://www.youtube.com/embed/l0GpNBP859o" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</Frame>

A small but real correctness fix for case-insensitive search. If your source has a text index defined on `lower(Body)` without a preprocessor argument, the query planner previously generated a `hasAllTokens(Body, ...)` condition. Because that expression did not match the index expression, the text index was not used and the query fell back to a scan.

The query is now generated as `hasAllTokens(lower(Body), ...)`, which matches the index expression. Case-insensitive search on sources configured this way is now correctly accelerated by the text index.

**Related PRs:** [#2326](https://github.com/hyperdxio/hyperdx/pull/2326) feat: support text index on lower(Body) with no preprocessor

## Simpler event deltas experience {#simpler-event-deltas-experience}

*Demo by [@alex-fedotyev](https://github.com/alex-fedotyev)*

<Frame>
<iframe src="https://www.youtube.com/embed/BrIHHFz_Aw8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</Frame>

Event Deltas used to require an extra step. You had to click a button to enter comparison mode before dragging a selection on the heatmap. That step is gone: distribution bars appear immediately on load, and the moment you drag a region on the heatmap the bars switch into selection-vs-background comparison mode. Click outside the selection and it drops back to the all-spans view.

The original change went into OSS some weeks ago, but a piece of it was missing from Managed ClickStack. That gap has now been closed so the simpler flow is the same across both editions.

**Related PRs:** [#1899](https://github.com/hyperdxio/hyperdx/pull/1899) feat: always-on attribute distribution mode

## Dashboard table of contents and bulk collapse {#dashboard-table-of-contents-and-bulk-collapse}

*Demo by [@teeohhem](https://github.com/teeohhem)*

<Frame>
<iframe src="https://www.youtube.com/embed/Pojo5zf_hrE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</Frame>

Once dashboards grow past a handful of sections (which we want, because sections are how you organise a large dashboard) navigating them becomes painful. Tom added a right-rail table of contents that lists every section and lets you jump between them directly. There is also a bulk collapse and expand control that hides every section's contents at once, so you can scan the structure of a long dashboard without scrolling through all of it.

Still in draft form, but already useful on the multi-section dashboards we ship for ClickHouse cluster and Kubernetes views.

**Related PRs:** [#2350](https://github.com/hyperdxio/hyperdx/pull/2350) feat(dashboard): add Table of Contents right rail with bulk collapse/expand

## Column resize persisted across sessions {#column-resize-persisted-across-sessions}

*Demo by [@teeohhem](https://github.com/teeohhem)*

<Frame>
<iframe src="https://www.youtube.com/embed/7l-Rz1tFlq8" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>
</Frame>

A customer report from yesterday: when you resize a column in a results table, that sizing should stick. It now does. Resize widths are stored in local storage, keyed per table ID, so different tables keep independent column layouts. Close the browser, come back later, the columns are still the way you left them. Adding or removing a column from the table does not reset the widths of the other columns either.

**Related PRs:** [#2327](https://github.com/hyperdxio/hyperdx/pull/2327) fix: persist column widths in search results table
1 change: 1 addition & 0 deletions products/clickstack/navigation.json
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,7 @@
{
"group": "2026",
"pages": [
"products/clickstack/demo-days/2026/2026-05-22",
"products/clickstack/demo-days/2026/2026-05-15",
"products/clickstack/demo-days/2026/2026-05-08",
"products/clickstack/demo-days/2026/2026-04-17",
Expand Down
Loading