@@ -73,118 +73,125 @@ should not be used in production. The feature will be enabled in a future releas
7373
7474Cast operations in Comet fall into three levels of support:
7575
76- - ** C ( Compatible) ** : The results match Apache Spark
77- - ** I ( Incompatible) ** : The results may match Apache Spark for some inputs, but there are known issues where some inputs
76+ - ** Compatible** : The results match Apache Spark
77+ - ** Incompatible** : The results may match Apache Spark for some inputs, but there are known issues where some inputs
7878 will result in incorrect results or exceptions. The query stage will fall back to Spark by default. Setting
7979 ` spark.comet.expression.Cast.allowIncompatible=true ` will allow all incompatible casts to run natively in Comet, but this is not
8080 recommended for production use.
81- - ** U ( Unsupported) ** : Comet does not provide a native version of this cast expression and the query stage will fall back to
81+ - ** Unsupported** : Comet does not provide a native version of this cast expression and the query stage will fall back to
8282 Spark.
83- - ** N/A** : Spark does not support this cast.
8483
85- ### Legacy Mode
84+ ### Compatible Casts
8685
87- <!-- WARNING! DO NOT MANUALLY MODIFY CONTENT BETWEEN THE BEGIN AND END TAGS -->
88-
89- <!-- BEGIN:CAST_LEGACY_TABLE-->
90- <!-- prettier-ignore-start -->
91- | | binary | boolean | byte | date | decimal | double | float | integer | long | short | string | timestamp |
92- | ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---|
93- | binary | - | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | C | N/A |
94- | boolean | N/A | - | C | N/A | U | C | C | C | C | C | C | U |
95- | byte | U | C | - | N/A | C | C | C | C | C | C | C | U |
96- | date | N/A | U | U | - | U | U | U | U | U | U | C | U |
97- | decimal | N/A | C | C | N/A | - | C | C | C | C | C | C | U |
98- | double | N/A | C | C | N/A | I | - | C | C | C | C | C | U |
99- | float | N/A | C | C | N/A | I | C | - | C | C | C | C | U |
100- | integer | U | C | C | N/A | C | C | C | - | C | C | C | U |
101- | long | U | C | C | N/A | C | C | C | C | - | C | C | U |
102- | short | U | C | C | N/A | C | C | C | C | C | - | C | U |
103- | string | C | C | C | C | I | C | C | C | C | C | - | I |
104- | timestamp | N/A | U | U | C | U | U | U | U | C | U | C | - |
105- <!-- prettier-ignore-end -->
106-
107- ** Notes:**
108-
109- - ** decimal -> string** : There can be formatting differences in some case due to Spark using scientific notation where Comet does not
110- - ** double -> decimal** : There can be rounding differences
111- - ** double -> string** : There can be differences in precision. For example, the input "1.4E-45" will produce 1.0E-45 instead of 1.4E-45
112- - ** float -> decimal** : There can be rounding differences
113- - ** float -> string** : There can be differences in precision. For example, the input "1.4E-45" will produce 1.0E-45 instead of 1.4E-45
114- - ** string -> date** : Only supports years between 262143 BC and 262142 AD
115- - ** string -> decimal** : Does not support fullwidth unicode digits (e.g \\ uFF10)
116- or strings containing null bytes (e.g \\ u0000)
117- - ** string -> timestamp** : Not all valid formats are supported
118- <!-- END:CAST_LEGACY_TABLE-->
119-
120- ### Try Mode
86+ The following cast operations are generally compatible with Spark except for the differences noted here.
12187
12288<!-- WARNING! DO NOT MANUALLY MODIFY CONTENT BETWEEN THE BEGIN AND END TAGS -->
12389
124- <!-- BEGIN:CAST_TRY_TABLE -->
90+ <!-- BEGIN:COMPAT_CAST_TABLE -->
12591<!-- prettier-ignore-start -->
126- | | binary | boolean | byte | date | decimal | double | float | integer | long | short | string | timestamp |
127- | ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---|
128- | binary | - | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | C | N/A |
129- | boolean | N/A | - | C | N/A | U | C | C | C | C | C | C | U |
130- | byte | U | C | - | N/A | C | C | C | C | C | C | C | U |
131- | date | N/A | U | U | - | U | U | U | U | U | U | C | U |
132- | decimal | N/A | C | C | N/A | - | C | C | C | C | C | C | U |
133- | double | N/A | C | C | N/A | I | - | C | C | C | C | C | U |
134- | float | N/A | C | C | N/A | I | C | - | C | C | C | C | U |
135- | integer | U | C | C | N/A | C | C | C | - | C | C | C | U |
136- | long | U | C | C | N/A | C | C | C | C | - | C | C | U |
137- | short | U | C | C | N/A | C | C | C | C | C | - | C | U |
138- | string | C | C | C | C | I | C | C | C | C | C | - | I |
139- | timestamp | N/A | U | U | C | U | U | U | U | C | U | C | - |
92+ | From Type | To Type | Notes |
93+ | -| -| -|
94+ | boolean | byte | |
95+ | boolean | short | |
96+ | boolean | integer | |
97+ | boolean | long | |
98+ | boolean | float | |
99+ | boolean | double | |
100+ | boolean | string | |
101+ | byte | boolean | |
102+ | byte | short | |
103+ | byte | integer | |
104+ | byte | long | |
105+ | byte | float | |
106+ | byte | double | |
107+ | byte | decimal | |
108+ | byte | string | |
109+ | byte | binary | |
110+ | short | boolean | |
111+ | short | byte | |
112+ | short | integer | |
113+ | short | long | |
114+ | short | float | |
115+ | short | double | |
116+ | short | decimal | |
117+ | short | string | |
118+ | short | binary | |
119+ | integer | boolean | |
120+ | integer | byte | |
121+ | integer | short | |
122+ | integer | long | |
123+ | integer | float | |
124+ | integer | double | |
125+ | integer | decimal | |
126+ | integer | string | |
127+ | integer | binary | |
128+ | long | boolean | |
129+ | long | byte | |
130+ | long | short | |
131+ | long | integer | |
132+ | long | float | |
133+ | long | double | |
134+ | long | decimal | |
135+ | long | string | |
136+ | long | binary | |
137+ | float | boolean | |
138+ | float | byte | |
139+ | float | short | |
140+ | float | integer | |
141+ | float | long | |
142+ | float | double | |
143+ | float | string | There can be differences in precision. For example, the input "1.4E-45" will produce 1.0E-45 instead of 1.4E-45 |
144+ | double | boolean | |
145+ | double | byte | |
146+ | double | short | |
147+ | double | integer | |
148+ | double | long | |
149+ | double | float | |
150+ | double | string | There can be differences in precision. For example, the input "1.4E-45" will produce 1.0E-45 instead of 1.4E-45 |
151+ | decimal | boolean | |
152+ | decimal | byte | |
153+ | decimal | short | |
154+ | decimal | integer | |
155+ | decimal | long | |
156+ | decimal | float | |
157+ | decimal | double | |
158+ | decimal | decimal | |
159+ | decimal | string | There can be formatting differences in some case due to Spark using scientific notation where Comet does not |
160+ | string | boolean | |
161+ | string | byte | |
162+ | string | short | |
163+ | string | integer | |
164+ | string | long | |
165+ | string | float | |
166+ | string | double | |
167+ | string | date | Only supports years between 262143 BC and 262142 AD |
168+ | binary | string | |
169+ | date | string | |
170+ | timestamp | long | |
171+ | timestamp | string | |
172+ | timestamp | date | |
140173<!-- prettier-ignore-end -->
174+ <!-- END:COMPAT_CAST_TABLE-->
141175
142- ** Notes: **
176+ ### Incompatible Casts
143177
144- - ** decimal -> string** : There can be formatting differences in some case due to Spark using scientific notation where Comet does not
145- - ** double -> decimal** : There can be rounding differences
146- - ** double -> string** : There can be differences in precision. For example, the input "1.4E-45" will produce 1.0E-45 instead of 1.4E-45
147- - ** float -> decimal** : There can be rounding differences
148- - ** float -> string** : There can be differences in precision. For example, the input "1.4E-45" will produce 1.0E-45 instead of 1.4E-45
149- - ** string -> date** : Only supports years between 262143 BC and 262142 AD
150- - ** string -> decimal** : Does not support fullwidth unicode digits (e.g \\ uFF10)
151- or strings containing null bytes (e.g \\ u0000)
152- - ** string -> timestamp** : Not all valid formats are supported
153- <!-- END:CAST_TRY_TABLE-->
154-
155- ### ANSI Mode
178+ The following cast operations are not compatible with Spark for all inputs and are disabled by default.
156179
157180<!-- WARNING! DO NOT MANUALLY MODIFY CONTENT BETWEEN THE BEGIN AND END TAGS -->
158181
159- <!-- BEGIN:CAST_ANSI_TABLE -->
182+ <!-- BEGIN:INCOMPAT_CAST_TABLE -->
160183<!-- prettier-ignore-start -->
161- | | binary | boolean | byte | date | decimal | double | float | integer | long | short | string | timestamp |
162- | ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---| ---|
163- | binary | - | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | C | N/A |
164- | boolean | N/A | - | C | N/A | U | C | C | C | C | C | C | U |
165- | byte | U | C | - | N/A | C | C | C | C | C | C | C | U |
166- | date | N/A | U | U | - | U | U | U | U | U | U | C | U |
167- | decimal | N/A | C | C | N/A | - | C | C | C | C | C | C | U |
168- | double | N/A | C | C | N/A | I | - | C | C | C | C | C | U |
169- | float | N/A | C | C | N/A | I | C | - | C | C | C | C | U |
170- | integer | U | C | C | N/A | C | C | C | - | C | C | C | U |
171- | long | U | C | C | N/A | C | C | C | C | - | C | C | U |
172- | short | U | C | C | N/A | C | C | C | C | C | - | C | U |
173- | string | C | C | C | C | I | C | C | C | C | C | - | I |
174- | timestamp | N/A | U | U | C | U | U | U | U | C | U | C | - |
184+ | From Type | To Type | Notes |
185+ | -| -| -|
186+ | float | decimal | There can be rounding differences |
187+ | double | decimal | There can be rounding differences |
188+ | string | decimal | Does not support fullwidth unicode digits (e.g \\ uFF10)
189+ or strings containing null bytes (e.g \\ u0000) |
190+ | string | timestamp | Not all valid formats are supported |
175191<!-- prettier-ignore-end -->
192+ <!-- END:INCOMPAT_CAST_TABLE-->
176193
177- ** Notes:**
178-
179- - ** decimal -> string** : There can be formatting differences in some case due to Spark using scientific notation where Comet does not
180- - ** double -> decimal** : There can be rounding differences
181- - ** double -> string** : There can be differences in precision. For example, the input "1.4E-45" will produce 1.0E-45 instead of 1.4E-45
182- - ** float -> decimal** : There can be rounding differences
183- - ** float -> string** : There can be differences in precision. For example, the input "1.4E-45" will produce 1.0E-45 instead of 1.4E-45
184- - ** string -> date** : Only supports years between 262143 BC and 262142 AD
185- - ** string -> decimal** : Does not support fullwidth unicode digits (e.g \\ uFF10)
186- or strings containing null bytes (e.g \\ u0000)
187- - ** string -> timestamp** : ANSI mode not supported
188- <!-- END:CAST_ANSI_TABLE-->
194+ ### Unsupported Casts
189195
190- See the [ tracking issue] ( https://github.com/apache/datafusion-comet/issues/286 ) for more details.
196+ Any cast not listed in the previous tables is currently unsupported. We are working on adding more. See the
197+ [ tracking issue] ( https://github.com/apache/datafusion-comet/issues/286 ) for more details.
0 commit comments