Description
Is your feature request related to a problem or challenge?
DataFusion could be made faster for queries that have a GROUP BY <string> column
For example, in ClickBench Q34
Q34: SELECT "URL", COUNT(*) AS c FROM hits GROUP BY "URL" ORDER BY c DESC LIMIT 10;
You can run this query from a datafusion checkout like this (using the code in #7060, which hopefully will be merged shortly):
# get data
./benchmarks/bench.sh data clickbench_1
# run benchmark
cargo run --release --bin dfbench -- clickbench --query 34
Here is the profile from running 16 cores:
cargo run --release --bin dfbench -- clickbench --query 34 --iterations 10 --partitions 16

Describe the solution you'd like
I would like a special cased GroupsValue
for this case of a single string (hopefully Utf8, LargeUTf8, Binary, and LargeBinary) column that:
- Does no allocations per group (aka stores all strings in some single contiguous location)
- Avoids the Row format / copy of values
Other ideas that could make this faster:
- Small String optimization
- special case ASCII (to avoid UTF8 checks for data, like TPCH, that does not contain UTF8 data)
"Small String optimization" refers to the format described in the umbra paper,

This would have to be adapted for Rust / safetly but the same general idea applies (inlining the first few bytes of the string into the hash table for quick "is it equal" comparisons, and then having an offset to an external area for larger strings)
Describe alternatives you've considered
No response
Additional context
@tustvold's changes in #6969 and #7043 should make it very easy to code this up as a different GroupValues implementation