This is an automated email from the ASF dual-hosted git repository. lincoln pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/flink.git
The following commit(s) were added to refs/heads/master by this push:
new 072b7d3a129 [FLINK-39188][docs] Documentation for BITMAP type
072b7d3a129 is described below
commit 072b7d3a12927480a881fe1b4e6d33d4e6cb3650
Author: dylanhz <[email protected]>
AuthorDate: Fri Mar 27 11:24:40 2026 +0800
[FLINK-39188][docs] Documentation for BITMAP type
This closes #27835.
---
.../docs/sql/functions/built-in-functions.md | 6 ++
docs/content.zh/docs/sql/reference/data-types.md | 88 +++++++++++++++------
.../docs/sql/functions/built-in-functions.md | 6 ++
docs/content/docs/sql/reference/data-types.md | 90 ++++++++++++++++------
4 files changed, 142 insertions(+), 48 deletions(-)
diff --git a/docs/content.zh/docs/sql/functions/built-in-functions.md
b/docs/content.zh/docs/sql/functions/built-in-functions.md
index f931534ce6e..4aaf786e860 100644
--- a/docs/content.zh/docs/sql/functions/built-in-functions.md
+++ b/docs/content.zh/docs/sql/functions/built-in-functions.md
@@ -124,6 +124,12 @@ JSON 函数使用符合 ISO/IEC TR 19075-6 SQL标准的 JSON 路径表达式。
### 位图聚合函数
+**性能建议:**
+
+- 强烈建议开启 [MiniBatch 聚合]({{< ref "docs/dev/table/tuning" >}})或在[窗口聚合]({{< ref
"docs/sql/reference/queries/window-agg" >}})中使用位图聚合函数,以优化状态访问开销、显著提升性能。
+- 位图聚合函数在处理仅追加(Append-Only)输入时性能最佳。处理回撤(Retraction)输入时性能会明显下降,因此应尽量避免对 BITMAP
列进行多级 GROUP BY 聚合。
+- 在仅需要基数统计而不需要中间位图的场景中,建议使用 `BITMAP_XX_CARDINALITY_AGG()` 替代
`BITMAP_CARDINALITY(BITMAP_XX_AGG())`。两者功能一致,但前者避免了中间位图的物化,性能更优。
+
{{< sql_functions_zh "bitmapagg" >}}
时间间隔单位和时间点单位标识符
diff --git a/docs/content.zh/docs/sql/reference/data-types.md
b/docs/content.zh/docs/sql/reference/data-types.md
index c0566b13e54..1cbc6f8bae6 100644
--- a/docs/content.zh/docs/sql/reference/data-types.md
+++ b/docs/content.zh/docs/sql/reference/data-types.md
@@ -210,6 +210,7 @@ The default planner supports the following set of SQL types:
| `RAW` | |
| Structured types | Only exposed in user-defined functions yet. |
| `VARIANT` | |
+| `BITMAP` | |
### Character Strings
@@ -1544,6 +1545,43 @@ DataTypes.VARIANT()
{{< /tabs >}}
+#### `BITMAP`
+
+用于以压缩形式存储 32 位整数的位图数据类型,基于 [RoaringBitmap](https://roaringbitmap.org/) 实现。
+
+位图类型适用于高效地表示和查询大量整数集合。它支持多种内置的[标量函数]({{< ref
"docs/sql/functions/built-in-functions" >}}#位图函数)和[聚合函数]({{< ref
"docs/sql/functions/built-in-functions" >}}#位图聚合函数)。
+
+位图类型是对 SQL 标准的扩展。
+
+**声明**
+
+{{< tabs "0b9a98af-2e8d-4839-ba3a-964fa2ec0b97" >}}
+{{< tab "SQL" >}}
+```text
+BITMAP
+```
+
+位图类型可以通过 `BITMAP_BUILD` 函数从 `ARRAY<INT>` 创建。例如:
+
+```sql
+SELECT BITMAP_BUILD(ARRAY[1, 2, 3, 4, 5])
+```
+
+{{< /tab >}}
+{{< tab "Java/Scala" >}}
+```java
+DataTypes.BITMAP()
+```
+
+**桥接到 JVM 类型**
+
+| Java 类型 | 输入 | 输出 | 备注 |
+|:-----------------------------------------------|:----:|:----:|:----------|
+| `org.apache.flink.types.bitmap.Bitmap` | X | X | *默认* |
+
+{{< /tab >}}
+{{< /tabs >}}
+
#### `RAW`
Data type of an arbitrary serialized type. This type is a black box within the
table ecosystem
@@ -1668,30 +1706,31 @@ COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0
的 INT 格
下表展示了各个类型的转换程度,"Y" 表示支持,"!" 表示转换可能会失败,"N" 表示不支持:
-| Input\Target |
`CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` |
`BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` |
`SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` |
`TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` |
`ROW` | `STRUCTURED` | `RAW` | `VARIANT` |
-|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|:---------:|
-| `CHAR`/<br/>`VARCHAR`/<br/>`STRING` | Y
| ! | ! | ! | !
| ! | ! | ! | ! | ! | ! | ! |
! | ! | N | N | N | N | N
| N | N | N |
-| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` | Y
| Y | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `BOOLEAN` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `DECIMAL` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `TINYINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | N | N | N | N | N
| N | N | N |
-| `SMALLINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | N | N | N | N | N
| N | N | N |
-| `INTEGER` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | Y⁵ | N | N | N | N
| N | N | N |
-| `BIGINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | Y⁶ | N | N | N | N
| N | N | N |
-| `FLOAT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `DOUBLE` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `DATE` | Y
| N | N | N | N
| N | N | N | N | N | Y | N |
Y | Y | N | N | N | N | N
| N | N | N |
-| `TIME` | Y
| N | N | N | N
| N | N | N | N | N | N | Y |
Y | Y | N | N | N | N | N
| N | N | N |
-| `TIMESTAMP` | Y
| N | N | N | N
| N | N | N | N | N | Y | Y |
Y | Y | N | N | N | N | N
| N | N | N |
-| `TIMESTAMP_LTZ` | Y
| N | N | N | N
| N | N | N | N | N | Y | Y |
Y | Y | N | N | N | N | N
| N | N | N |
-| `INTERVAL` | Y
| N | N | N | N
| N | Y⁵ | Y⁶ | N | N | N | N |
N | N | Y | N | N | N | N
| N | N | N |
-| `ARRAY` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | !³ | N | N | N
| N | N | N |
-| `MULTISET` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | !³ | N | N
| N | N | N |
-| `MAP` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | !³ | N
| N | N | N |
-| `ROW` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | !³
| N | N | N |
-| `STRUCTURED` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| !³ | N | N |
-| `RAW` | Y
| ! | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | Y⁴ | N |
-| `VARIANT` | N
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N |
+| Input\Target |
`CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` |
`BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` |
`SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` |
`TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` |
`ROW` | `STRUCTURED` | `RAW` | `VARIANT` | `BITMAP` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|:---------:|:--------:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING` | Y
| ! | ! | ! | !
| ! | ! | ! | ! | ! | ! | ! |
! | ! | N | N | N | N | N
| N | N | N | N |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` | Y
| Y | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `BOOLEAN` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `DECIMAL` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `TINYINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | N | N | N | N | N
| N | N | N | N |
+| `SMALLINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | N | N | N | N | N
| N | N | N | N |
+| `INTEGER` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | Y⁵ | N | N | N | N
| N | N | N | N |
+| `BIGINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | Y⁶ | N | N | N | N
| N | N | N | N |
+| `FLOAT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `DOUBLE` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `DATE` | Y
| N | N | N | N
| N | N | N | N | N | Y | N |
Y | Y | N | N | N | N | N
| N | N | N | N |
+| `TIME` | Y
| N | N | N | N
| N | N | N | N | N | N | Y |
Y | Y | N | N | N | N | N
| N | N | N | N |
+| `TIMESTAMP` | Y
| N | N | N | N
| N | N | N | N | N | Y | Y |
Y | Y | N | N | N | N | N
| N | N | N | N |
+| `TIMESTAMP_LTZ` | Y
| N | N | N | N
| N | N | N | N | N | Y | Y |
Y | Y | N | N | N | N | N
| N | N | N | N |
+| `INTERVAL` | Y
| N | N | N | N
| N | Y⁵ | Y⁶ | N | N | N | N |
N | N | Y | N | N | N | N
| N | N | N | N |
+| `ARRAY` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | !³ | N | N | N
| N | N | N | N |
+| `MULTISET` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | !³ | N | N
| N | N | N | N |
+| `MAP` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | !³ | N
| N | N | N | N |
+| `ROW` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | !³
| N | N | N | N |
+| `STRUCTURED` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| !³ | N | N | N |
+| `RAW` | Y
| ! | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | Y⁴ | N | N |
+| `VARIANT` | N
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `BITMAP` | Y
| Y⁷ | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
备注:
@@ -1701,6 +1740,7 @@ COALESCE(TRY_CAST('non-number' AS INT), 0) --- 结果返回数字 0 的
INT 格
4. 支持转换,当且仅当用使用 `RAW` 的类和类的序列化器一样。
5. 支持转换,当且仅当用使用 `INTERVAL` 做“月”到“年”的转换。
6. 支持转换,当且仅当用使用 `INTERVAL` 做“天”到“时间”的转换。
+7. 仅支持转换到无界的 `VARBINARY`(`BYTES`),因为裁剪或填充会破坏序列化的位图数据。
请注意:无论是 `CAST` 还是 `TRY_CAST`,当输入为 `NULL` ,输出也为 `NULL`。
diff --git a/docs/content/docs/sql/functions/built-in-functions.md
b/docs/content/docs/sql/functions/built-in-functions.md
index 3ba23b32f33..42808103674 100644
--- a/docs/content/docs/sql/functions/built-in-functions.md
+++ b/docs/content/docs/sql/functions/built-in-functions.md
@@ -127,6 +127,12 @@ The aggregate functions take an expression across all the
rows as the input and
### Bitmap Aggregate Functions
+**Performance Tips:**
+
+- It is strongly recommended to enable [MiniBatch aggregation]({{< ref
"docs/dev/table/tuning" >}}) or use bitmap aggregate functions within [window
aggregations]({{< ref "docs/sql/reference/queries/window-agg" >}}) to optimize
state access overhead and significantly improve performance.
+- Bitmap aggregate functions perform best with append-only input. Performance
degrades noticeably with retraction input, so avoid multi-level GROUP BY
aggregations on BITMAP columns when possible.
+- For cardinality-only scenarios where the intermediate bitmap is not needed,
prefer `BITMAP_XX_CARDINALITY_AGG()` over
`BITMAP_CARDINALITY(BITMAP_XX_AGG())`. They are functionally equivalent, but
the former avoids materializing the intermediate bitmap and performs better.
+
{{< sql_functions "bitmapagg" >}}
Time Interval and Point Unit Specifiers
diff --git a/docs/content/docs/sql/reference/data-types.md
b/docs/content/docs/sql/reference/data-types.md
index 56d96e915a6..a849ee5dac8 100644
--- a/docs/content/docs/sql/reference/data-types.md
+++ b/docs/content/docs/sql/reference/data-types.md
@@ -218,6 +218,7 @@ The default planner supports the following set of SQL types:
| `RAW` | |
| Structured types | Only exposed in user-defined functions yet. |
| `VARIANT` | |
+| `BITMAP` | |
### Character Strings
@@ -1551,6 +1552,45 @@ DataTypes.VARIANT()
{{< /tab >}}
{{< /tabs >}}
+#### `BITMAP`
+
+Data type of bitmap data that stores 32-bit integers in a compressed form
using [RoaringBitmap](https://roaringbitmap.org/).
+
+The bitmap type is useful for efficiently representing and querying large sets
of integers. It supports
+a variety of built-in [scalar functions]({{< ref
"docs/sql/functions/built-in-functions" >}}#bitmap-functions) and
+[aggregate functions]({{< ref "docs/sql/functions/built-in-functions"
>}}#bitmap-aggregate-functions).
+
+The bitmap type is an extension to the SQL standard.
+
+**Declaration**
+
+{{< tabs "c8a3f1e2-7d5b-4a9e-b6c0-1e2f3a4b5c6d" >}}
+{{< tab "SQL" >}}
+```text
+BITMAP
+```
+
+Bitmap type can be created from an `ARRAY<INT>` using the `BITMAP_BUILD`
function. For example:
+
+```sql
+SELECT BITMAP_BUILD(ARRAY[1, 2, 3, 4, 5])
+```
+
+{{< /tab >}}
+{{< tab "Java/Scala" >}}
+```java
+DataTypes.BITMAP()
+```
+
+**Bridging to JVM Types**
+
+| Java Type | Input | Output | Remarks |
+|:-----------------------------------------------|:-----:|:------:|:----------|
+| `org.apache.flink.types.bitmap.Bitmap` | X | X | *Default* |
+
+{{< /tab >}}
+{{< /tabs >}}
+
#### `RAW`
Data type of an arbitrary serialized type. This type is a black box within the
table ecosystem
@@ -1675,30 +1715,31 @@ COALESCE(TRY_CAST('non-number' AS INT), 0) --- returns
0 of type INT NOT NULL
The matrix below describes the supported cast pairs, where "Y" means
supported, "!" means fallible, "N" means unsupported:
-| Input\Target |
`CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` |
`BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` |
`SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` |
`TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` |
`ROW` | `STRUCTURED` | `RAW` | `VARIANT` |
-|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|:---------:|
-| `CHAR`/<br/>`VARCHAR`/<br/>`STRING` | Y
| ! | ! | ! | !
| ! | ! | ! | ! | ! | ! | ! |
! | ! | N | N | N | N | N
| N | N | N |
-| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` | Y
| Y | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `BOOLEAN` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `DECIMAL` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `TINYINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | N | N | N | N | N
| N | N | N |
-| `SMALLINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | N | N | N | N | N
| N | N | N |
-| `INTEGER` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | Y⁵ | N | N | N | N
| N | N | N |
-| `BIGINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | Y⁶ | N | N | N | N
| N | N | N |
-| `FLOAT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `DOUBLE` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N |
-| `DATE` | Y
| N | N | N | N
| N | N | N | N | N | Y | N |
Y | Y | N | N | N | N | N
| N | N | N |
-| `TIME` | Y
| N | N | N | N
| N | N | N | N | N | N | Y |
Y | Y | N | N | N | N | N
| N | N | N |
-| `TIMESTAMP` | Y
| N | N | N | N
| N | N | N | N | N | Y | Y |
Y | Y | N | N | N | N | N
| N | N | N |
-| `TIMESTAMP_LTZ` | Y
| N | N | N | N
| N | N | N | N | N | Y | Y |
Y | Y | N | N | N | N | N
| N | N | N |
-| `INTERVAL` | Y
| N | N | N | N
| N | Y⁵ | Y⁶ | N | N | N | N |
N | N | Y | N | N | N | N
| N | N | N |
-| `ARRAY` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | !³ | N | N | N
| N | N | N |
-| `MULTISET` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | !³ | N | N
| N | N | N |
-| `MAP` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | !³ | N
| N | N | N |
-| `ROW` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | !³
| N | N | N |
-| `STRUCTURED` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| !³ | N | N |
-| `RAW` | Y
| ! | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | Y⁴ | N |
-| `VARIANT` | N
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N |
+| Input\Target |
`CHAR`¹/<br/>`VARCHAR`¹/<br/>`STRING` |
`BINARY`¹/<br/>`VARBINARY`¹/<br/>`BYTES` | `BOOLEAN` | `DECIMAL` | `TINYINT` |
`SMALLINT` | `INTEGER` | `BIGINT` | `FLOAT` | `DOUBLE` | `DATE` | `TIME` |
`TIMESTAMP` | `TIMESTAMP_LTZ` | `INTERVAL` | `ARRAY` | `MULTISET` | `MAP` |
`ROW` | `STRUCTURED` | `RAW` | `VARIANT` | `BITMAP` |
+|:---------------------------------------|:-------------------------------------:|:----------------------------------------:|:---------:|:---------:|:---------:|:----------:|:---------:|:--------:|:-------:|:--------:|:------:|:------:|:-----------:|:---------------:|:----------:|:-------:|:----------:|:-----:|:-----:|:------------:|:-----:|:---------:|:--------:|
+| `CHAR`/<br/>`VARCHAR`/<br/>`STRING` | Y
| ! | ! | ! | !
| ! | ! | ! | ! | ! | ! | ! |
! | ! | N | N | N | N | N
| N | N | N | N |
+| `BINARY`/<br/>`VARBINARY`/<br/>`BYTES` | Y
| Y | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `BOOLEAN` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `DECIMAL` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `TINYINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | N | N | N | N | N
| N | N | N | N |
+| `SMALLINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | N | N | N | N | N
| N | N | N | N |
+| `INTEGER` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | Y⁵ | N | N | N | N
| N | N | N | N |
+| `BIGINT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N² | N² | Y⁶ | N | N | N | N
| N | N | N | N |
+| `FLOAT` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `DOUBLE` | Y
| N | Y | Y | Y
| Y | Y | Y | Y | Y | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `DATE` | Y
| N | N | N | N
| N | N | N | N | N | Y | N |
Y | Y | N | N | N | N | N
| N | N | N | N |
+| `TIME` | Y
| N | N | N | N
| N | N | N | N | N | N | Y |
Y | Y | N | N | N | N | N
| N | N | N | N |
+| `TIMESTAMP` | Y
| N | N | N | N
| N | N | N | N | N | Y | Y |
Y | Y | N | N | N | N | N
| N | N | N | N |
+| `TIMESTAMP_LTZ` | Y
| N | N | N | N
| N | N | N | N | N | Y | Y |
Y | Y | N | N | N | N | N
| N | N | N | N |
+| `INTERVAL` | Y
| N | N | N | N
| N | Y⁵ | Y⁶ | N | N | N | N |
N | N | Y | N | N | N | N
| N | N | N | N |
+| `ARRAY` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | !³ | N | N | N
| N | N | N | N |
+| `MULTISET` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | !³ | N | N
| N | N | N | N |
+| `MAP` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | !³ | N
| N | N | N | N |
+| `ROW` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | !³
| N | N | N | N |
+| `STRUCTURED` | Y
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| !³ | N | N | N |
+| `RAW` | Y
| ! | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | Y⁴ | N | N |
+| `VARIANT` | N
| N | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
+| `BITMAP` | Y
| Y⁷ | N | N | N
| N | N | N | N | N | N | N |
N | N | N | N | N | N | N
| N | N | N | N |
Notes:
@@ -1708,6 +1749,7 @@ Notes:
4. Supported iff the `RAW` class and serializer are equals.
5. Supported iff `INTERVAL` is a `MONTH TO YEAR` range.
6. Supported iff `INTERVAL` is a `DAY TO TIME` range.
+7. Supported only for unbounded `VARBINARY` (`BYTES`), because trimming or
padding would corrupt the serialized bitmap data.
Also note that a cast of a `NULL` value will always return `NULL`,
regardless of whether the function used is `CAST` or `TRY_CAST`.
