clintropolis commented on code in PR #16516:
URL: https://github.com/apache/druid/pull/16516#discussion_r1623144222


##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |
+| Filtering and grouping | <ul><li>Filters and groupings match the entire 
array value</li><li>Can be used as GROUP BY keys, grouping based on the entire 
array value</li></ul> | <ul><li>Filters match any value within the 
array</li><li>Grouping generates a group for each individual value, similar to 
an implicit UNNEST</li></ul> |
+| Conversion | Convert an MVD to an array using 
[MV_TO_ARRAY](../querying/sql-multivalue-string-functions.md) | Convert an 
array to an MVD using [ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) |
+
+### Query differences between arrays and MVDs

Review Comment:
   i worry this section is a bit more confusing than it is helpful, there are a 
lot of examples of behavior and differences between arrays and mvds in 
https://github.com/apache/druid/blob/master/docs/querying/arrays.md and 
https://github.com/apache/druid/blob/master/docs/querying/multi-value-dimensions.md
   
   currently this table isn't super clear if it is talking about native or SQL 
filters, and in some cases maybe is talking about both? (like array_overlap 
isn't a native filter, but there is a native `arrayContainsElement` which when 
combined with a native `or` filter can construct ARRAY_OVERLAP).
   
   I fear this content is too deep to summarize into this table and we might be 
better off delegating into the in depth docs which have examples



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |
+| Filtering and grouping | <ul><li>Filters and groupings match the entire 
array value</li><li>Can be used as GROUP BY keys, grouping based on the entire 
array value</li></ul> | <ul><li>Filters match any value within the 
array</li><li>Grouping generates a group for each individual value, similar to 
an implicit UNNEST</li></ul> |
+| Conversion | Convert an MVD to an array using 
[MV_TO_ARRAY](../querying/sql-multivalue-string-functions.md) | Convert an 
array to an MVD using [ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) |
+
+### Query differences between arrays and MVDs
+
+Querying an array column returns different results than when querying a MVD 
column depending on the query type. Review the following table on the 
differences. Adjust your applications to handle the new output shapes.
+
+| Query type | Array | MVD |
+|---|---|---|
+| Equality filter | Matches the entire array value | Matches if any value 
within the array matches the filter |
+| Null filter | Matches rows where the entire array value is null | Matches 
rows where the array is empty (considered as null) but does not match arrays 
with empty (`“”`) values |
+| Range filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Not directly 
supported |
+| Contains filter | Use 
[ARRAY_CONTAINS](../querying/sql-functions.md#array_contains)| Use WHERE filter 
|
+| Logical expression filters | Behaves like standard ANSI SQL on the entire 
array value, such as AND, OR, NOT. For example, `WHERE arrayLong = ARRAY[1,2,3] 
OR arrayLong = ARRAY[4,5,6]` | Matches a row if any value within the array 
matches the logical condition. For example, `WHERE tags = 't1' OR tags = 't3'` |
+| Column comparison filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Matches when the 
dimensions have any overlapping values. For example, `WHERE tags IN ('t1', 
't2')` |
+| Behavior with SQL constructs | Follows standard SQL behavior with array 
functions like [ARRAY_CONTAINS](../querying/sql-functions.md#array_contains), 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Requires special 
SQL functions like 
[MV_FILTER_ONLY](../querying/sql-functions.md#mv_filter_none), 
[MV_FILTER_NONE](../querying/sql-functions.md#mv_filter_only) for precise 
filtering |
+| Group by entire array | Groups the entire array as a single value | Not 
supported |
+| Group by individual values | Use [UNNEST](../querying/sql.md#unnest) to 
group by individual array elements | Automatically unnests groups by each 
individual value in the array |
+
+## How to ingest data as arrays
+

Review Comment:
   again i think maybe should just refer to the other external docs which 
include examples of how to ingest both native and sql for both arrays and mvds



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.

Review Comment:
   >Use MVDs for specific use cases, such as arrays of strings.
   
   This seems off, the use case for MVDs is really when the user doesn't care 
about the complete array of values (including ordering of the multiple values 
within the row) as a value itself, rather are only concerned with operating 
directly on the elements as if they were regular strings.



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |
+| Filtering and grouping | <ul><li>Filters and groupings match the entire 
array value</li><li>Can be used as GROUP BY keys, grouping based on the entire 
array value</li></ul> | <ul><li>Filters match any value within the 
array</li><li>Grouping generates a group for each individual value, similar to 
an implicit UNNEST</li></ul> |
+| Conversion | Convert an MVD to an array using 
[MV_TO_ARRAY](../querying/sql-multivalue-string-functions.md) | Convert an 
array to an MVD using [ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) |
+
+### Query differences between arrays and MVDs
+
+Querying an array column returns different results than when querying a MVD 
column depending on the query type. Review the following table on the 
differences. Adjust your applications to handle the new output shapes.
+
+| Query type | Array | MVD |
+|---|---|---|
+| Equality filter | Matches the entire array value | Matches if any value 
within the array matches the filter |
+| Null filter | Matches rows where the entire array value is null | Matches 
rows where the array is empty (considered as null) but does not match arrays 
with empty (`“”`) values |
+| Range filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Not directly 
supported |

Review Comment:
   arrays support range filters using comparison of the sort order of the whole 
array, e.g. `[1, 2, 3]` < `[1, 2, 4]` if i write `... WHERE arrayColumn < 
ARRAY[1, 2, 3]` or whatever. Array overlap is a different filter that checks if 
an array contains any of the elements of some other array.
   
   Multi-value dimensions also support range filters if matching as individual 
string values.



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |
+| Filtering and grouping | <ul><li>Filters and groupings match the entire 
array value</li><li>Can be used as GROUP BY keys, grouping based on the entire 
array value</li></ul> | <ul><li>Filters match any value within the 
array</li><li>Grouping generates a group for each individual value, similar to 
an implicit UNNEST</li></ul> |
+| Conversion | Convert an MVD to an array using 
[MV_TO_ARRAY](../querying/sql-multivalue-string-functions.md) | Convert an 
array to an MVD using [ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) |
+
+### Query differences between arrays and MVDs
+
+Querying an array column returns different results than when querying a MVD 
column depending on the query type. Review the following table on the 
differences. Adjust your applications to handle the new output shapes.
+
+| Query type | Array | MVD |
+|---|---|---|
+| Equality filter | Matches the entire array value | Matches if any value 
within the array matches the filter |
+| Null filter | Matches rows where the entire array value is null | Matches 
rows where the array is empty (considered as null) but does not match arrays 
with empty (`“”`) values |
+| Range filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Not directly 
supported |
+| Contains filter | Use 
[ARRAY_CONTAINS](../querying/sql-functions.md#array_contains)| Use WHERE filter 
|
+| Logical expression filters | Behaves like standard ANSI SQL on the entire 
array value, such as AND, OR, NOT. For example, `WHERE arrayLong = ARRAY[1,2,3] 
OR arrayLong = ARRAY[4,5,6]` | Matches a row if any value within the array 
matches the logical condition. For example, `WHERE tags = 't1' OR tags = 't3'` |
+| Column comparison filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Matches when the 
dimensions have any overlapping values. For example, `WHERE tags IN ('t1', 
't2')` |

Review Comment:
   the native column comparison filter itself is very strange (and not used by 
sql at all), so i think we should drop it from here. It converts everything 
into a string array for comparison regardless of type, so it works more or less 
the same for both mvds and arrays, ish, but again is very weird and i feel like 
only makes things more confusing



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |
+| Filtering and grouping | <ul><li>Filters and groupings match the entire 
array value</li><li>Can be used as GROUP BY keys, grouping based on the entire 
array value</li></ul> | <ul><li>Filters match any value within the 
array</li><li>Grouping generates a group for each individual value, similar to 
an implicit UNNEST</li></ul> |
+| Conversion | Convert an MVD to an array using 
[MV_TO_ARRAY](../querying/sql-multivalue-string-functions.md) | Convert an 
array to an MVD using [ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) |
+
+### Query differences between arrays and MVDs
+
+Querying an array column returns different results than when querying a MVD 
column depending on the query type. Review the following table on the 
differences. Adjust your applications to handle the new output shapes.
+
+| Query type | Array | MVD |
+|---|---|---|
+| Equality filter | Matches the entire array value | Matches if any value 
within the array matches the filter |

Review Comment:
   I think it isn't clear enough that the biggest difference between arrays and 
mvds is how you interact with them in SQL. like array types you treat as SQL 
arrays, while mvds you treat as SQL VARCHAR. Like if i have two columns with 
the same data, some array `['a', 'b', 'c']`, then for the array type the only 
thing that matches that row is`WHERE array = ARRAY['a', 'b', 'c']`, while any 
of `WHERE mvd = 'a'`, `WHERE mvd = 'b'`, `WHERE mvd = 'c'` would match the row.



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |
+| Filtering and grouping | <ul><li>Filters and groupings match the entire 
array value</li><li>Can be used as GROUP BY keys, grouping based on the entire 
array value</li></ul> | <ul><li>Filters match any value within the 
array</li><li>Grouping generates a group for each individual value, similar to 
an implicit UNNEST</li></ul> |
+| Conversion | Convert an MVD to an array using 
[MV_TO_ARRAY](../querying/sql-multivalue-string-functions.md) | Convert an 
array to an MVD using [ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) |
+
+### Query differences between arrays and MVDs
+
+Querying an array column returns different results than when querying a MVD 
column depending on the query type. Review the following table on the 
differences. Adjust your applications to handle the new output shapes.
+
+| Query type | Array | MVD |
+|---|---|---|
+| Equality filter | Matches the entire array value | Matches if any value 
within the array matches the filter |
+| Null filter | Matches rows where the entire array value is null | Matches 
rows where the array is empty (considered as null) but does not match arrays 
with empty (`“”`) values |
+| Range filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Not directly 
supported |
+| Contains filter | Use 
[ARRAY_CONTAINS](../querying/sql-functions.md#array_contains)| Use WHERE filter 
|
+| Logical expression filters | Behaves like standard ANSI SQL on the entire 
array value, such as AND, OR, NOT. For example, `WHERE arrayLong = ARRAY[1,2,3] 
OR arrayLong = ARRAY[4,5,6]` | Matches a row if any value within the array 
matches the logical condition. For example, `WHERE tags = 't1' OR tags = 't3'` |
+| Column comparison filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Matches when the 
dimensions have any overlapping values. For example, `WHERE tags IN ('t1', 
't2')` |
+| Behavior with SQL constructs | Follows standard SQL behavior with array 
functions like [ARRAY_CONTAINS](../querying/sql-functions.md#array_contains), 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Requires special 
SQL functions like 
[MV_FILTER_ONLY](../querying/sql-functions.md#mv_filter_none), 
[MV_FILTER_NONE](../querying/sql-functions.md#mv_filter_only) for precise 
filtering |
+| Group by entire array | Groups the entire array as a single value | Not 
supported |

Review Comment:
   you can use `mv_to_array` to group mvds as arrays



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |
+| Filtering and grouping | <ul><li>Filters and groupings match the entire 
array value</li><li>Can be used as GROUP BY keys, grouping based on the entire 
array value</li></ul> | <ul><li>Filters match any value within the 
array</li><li>Grouping generates a group for each individual value, similar to 
an implicit UNNEST</li></ul> |
+| Conversion | Convert an MVD to an array using 
[MV_TO_ARRAY](../querying/sql-multivalue-string-functions.md) | Convert an 
array to an MVD using [ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) |
+
+### Query differences between arrays and MVDs
+
+Querying an array column returns different results than when querying a MVD 
column depending on the query type. Review the following table on the 
differences. Adjust your applications to handle the new output shapes.
+
+| Query type | Array | MVD |
+|---|---|---|
+| Equality filter | Matches the entire array value | Matches if any value 
within the array matches the filter |
+| Null filter | Matches rows where the entire array value is null | Matches 
rows where the array is empty (considered as null) but does not match arrays 
with empty (`“”`) values |
+| Range filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Not directly 
supported |
+| Contains filter | Use 
[ARRAY_CONTAINS](../querying/sql-functions.md#array_contains)| Use WHERE filter 
|
+| Logical expression filters | Behaves like standard ANSI SQL on the entire 
array value, such as AND, OR, NOT. For example, `WHERE arrayLong = ARRAY[1,2,3] 
OR arrayLong = ARRAY[4,5,6]` | Matches a row if any value within the array 
matches the logical condition. For example, `WHERE tags = 't1' OR tags = 't3'` |

Review Comment:
   this seems confusing and should be left out i think, since the logical 
filters operate on the results of the child filters rather than directly on 
arrays or mvds



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |
+| Filtering and grouping | <ul><li>Filters and groupings match the entire 
array value</li><li>Can be used as GROUP BY keys, grouping based on the entire 
array value</li></ul> | <ul><li>Filters match any value within the 
array</li><li>Grouping generates a group for each individual value, similar to 
an implicit UNNEST</li></ul> |
+| Conversion | Convert an MVD to an array using 
[MV_TO_ARRAY](../querying/sql-multivalue-string-functions.md) | Convert an 
array to an MVD using [ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) |
+
+### Query differences between arrays and MVDs
+
+Querying an array column returns different results than when querying a MVD 
column depending on the query type. Review the following table on the 
differences. Adjust your applications to handle the new output shapes.
+
+| Query type | Array | MVD |
+|---|---|---|
+| Equality filter | Matches the entire array value | Matches if any value 
within the array matches the filter |
+| Null filter | Matches rows where the entire array value is null | Matches 
rows where the array is empty (considered as null) but does not match arrays 
with empty (`“”`) values |
+| Range filter | Use 
[ARRAY_OVERLAP](../querying/sql-functions.md#array_overlap) | Not directly 
supported |
+| Contains filter | Use 
[ARRAY_CONTAINS](../querying/sql-functions.md#array_contains)| Use WHERE filter 
|

Review Comment:
   is "Contains filter" referring to the native `arrayContainsElement` filter? 
Also "Use WHERE filter" isn't correct, perhaps you meant "Use equality filter" 
instead?



##########
docs/release-info/migr-mvd-array.md:
##########
@@ -0,0 +1,68 @@
+---
+id: migr-mvd-array
+title: "Migration guide: MVDs to arrays"
+sidebar_label: MVDs to arrays
+---
+
+<!--
+  ~ Licensed to the Apache Software Foundation (ASF) under one
+  ~ or more contributor license agreements.  See the NOTICE file
+  ~ distributed with this work for additional information
+  ~ regarding copyright ownership.  The ASF licenses this file
+  ~ to you under the Apache License, Version 2.0 (the
+  ~ "License"); you may not use this file except in compliance
+  ~ with the License.  You may obtain a copy of the License at
+  ~
+  ~   http://www.apache.org/licenses/LICENSE-2.0
+  ~
+  ~ Unless required by applicable law or agreed to in writing,
+  ~ software distributed under the License is distributed on an
+  ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+  ~ KIND, either express or implied.  See the License for the
+  ~ specific language governing permissions and limitations
+  ~ under the License.
+-->
+
+
+Druid now supports SQL-compliant [arrays](../querying/arrays.md), and we 
recommend that people use arrays over [multi-value 
dimensions](../querying/multi-value-dimensions.md) (MVDs) whenever possible.
+Use arrays for new projects and complex use cases involving multiple data 
types. Use MVDs for specific use cases, such as arrays of strings.
+
+## Comparison between arrays and MVDs
+
+The following table compares the general behavior between arrays and MVDs.
+For specific query differences between arrays and MVDs, see [Query differences 
between arrays and MVDs](#query-differences-between-arrays-and-mvds).
+
+|  | Arrays| Multi-value dimensions (MVDs) |
+|---|---|---|
+| Data types | Supports VARCHAR, BIGINT, and DOUBLE types (ARRAY<STRING\>, 
ARRAY<LONG\>, ARRAY<DOUBLE\>) | Only supports arrays of strings (VARCHAR) |
+| SQL compliance | Behaves like standard SQL arrays with SQL-compliant 
behavior | Does not behave like standard SQL arrays; requires special SQL 
functions |
+| Ingestion | <ul><li>Can be ingested using native batch or streaming 
ingestion methods</li><li>JSON arrays are ingested as Druid 
arrays</li><li>Managed through the query context parameter `arrayIngestMode` in 
SQL-based ingestion (supported options: `array`, `mvd`, `none`). Note that if 
you set this mode to `none`, Druid raises an exception if you try to store any 
type of array.</li></ul> | <ul><li>Typically ingested from fields with an array 
of values</li><li>JSON arrays are ingested as multi-value 
dimensions</li><li>Managed using functions like 
[ARRAY_TO_MV](../querying/sql-functions.md#array_to_mv) in SQL-based 
ingestion</li></ul> |

Review Comment:
   yea, it seems a bit confusing. this seems tricky to follow without examples



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: commits-unsubscr...@druid.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@druid.apache.org
For additional commands, e-mail: commits-h...@druid.apache.org


Reply via email to