[
https://issues.apache.org/jira/browse/FLINK-41333?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yuepeng Pan updated FLINK-41333:
--------------------------------
Fix Version/s: 2.4.0
> MIN, MAX and streaming COUNT(DISTINCT) reject the UUID type
> -----------------------------------------------------------
>
> Key: FLINK-41333
> URL: https://issues.apache.org/jira/browse/FLINK-41333
> Project: Flink
> Issue Type: Sub-task
> Components: Table SQL / Planner, Table SQL / Runtime
> Affects Versions: 2.4.0
> Reporter: Ramin Gharib
> Priority: Major
> Fix For: 2.4.0
>
>
> {{UUID}} can be compared, ordered and grouped, but three aggregates reject it
> at planning time.
> {code:sql}
> CREATE TABLE src (k INT) WITH (
> 'connector' = 'datagen', 'number-of-rows' = '6',
> 'fields.k.kind' = 'sequence', 'fields.k.start' = '1', 'fields.k.end' = '6');
> CREATE VIEW keyed AS
> SELECT CAST(LPAD(CAST(MOD(k, 3) AS STRING), 32, '0') AS UUID) AS u, k FROM
> src;
> {code}
> ||Query||Streaming||Batch||
> |{{SELECT MIN(u), MAX(u) FROM keyed}}|{{Min aggregate function does not
> support type: ''UUID''.}}|same error|
> |{{SELECT COUNT(DISTINCT u) FROM keyed}}|{{Distinct aggregate function does
> not support type: UUID.}}|3|
> |{{SELECT APPROX_COUNT_DISTINCT(u) FROM keyed}}|not supported in streaming
> for any type|{{APPROX_COUNT_DISTINCT aggregate function does not support
> type: ''UUID''.}}|
> |{{SELECT DISTINCT u}}, {{GROUP BY u}}, {{FIRST_VALUE(u)}},
> {{LAST_VALUE(u)}}, {{ARRAY_AGG(u)}}|works|works|
> {{MIN}} over {{UUID_V7()}} values gives the earliest event, which is a common
> query on the new type.
> h3. Cause
> {{AggFunctionFactory.createMinAggFunction}} and {{createMaxAggFunction}} list
> the supported type roots for the plain and the retracting variant. {{UUID}}
> is not in either list. {{AggregateUtil.createDistinctKeyType}} lists the key
> types for a streaming distinct view, and {{UUID}} is missing there too.
> {{VARBINARY}} fails in exactly the same places, and {{UUID}} shares its
> internal {{byte[]}} form. I have not checked why {{BINARY}} is excluded from
> the distinct key types. If the reason is identity equality on {{byte[]}}
> keys, as in FLINK-41327, then adding {{UUID}} to the list is not enough.
> Workaround: go through the canonical string. Fixed-width lower-case hex sorts
> the same as the unsigned bytes.
> {code:sql}
> SELECT CAST(MIN(CAST(u AS STRING)) AS UUID) FROM keyed; --
> 00000000-0000-0000-0000-000000000000
> SELECT COUNT(DISTINCT CAST(u AS STRING)) FROM keyed; -- 3
> {code}
--
This message was sent by Atlassian Jira
(v10.3.26#10030026)