Thanks! One thing I’ve noticed (in my short time using this) is that if I provide the a list with the empty set, it seems to consider *all* columns as unique. I observe this AggregateRemoveRule, where no matter what field I used to group by it removes the aggregate if the aggregations allow it. Is that expected?
From: Steven Phillips <ste...@dremio.com.INVALID> Reply-To: "dev@calcite.apache.org" <dev@calcite.apache.org> Date: Friday, February 28, 2025 at 10:51 To: "dev@calcite.apache.org" <dev@calcite.apache.org> Subject: Re: Understanding Statistic unique keys Yes, your understanding is correct. See the code <https: //urldefense. com/v3/__https: //github. com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/schema/Statistics. java*L79__;Iw!!Iz9xO38YGHZK!__IoxmI3k4LRQpWH1La5xkTnACIGx12YCEM-FiYbO59VwM4y4GsgNencLrOAO3Lg2KibvVHEtdQqmCB9UebWF2WRwg$> Yes, your understanding is correct. See the code <https://urldefense.com/v3/__https://github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/schema/Statistics.java*L79__;Iw!!Iz9xO38YGHZK!__IoxmI3k4LRQpWH1La5xkTnACIGx12YCEM-FiYbO59VwM4y4GsgNencLrOAO3Lg2KibvVHEtdQqmCB9UebWF2WRwg$<https://urldefense.com/v3/__https:/github.com/apache/calcite/blob/main/core/src/main/java/org/apache/calcite/schema/Statistics.java*L79__;Iw!!Iz9xO38YGHZK!__IoxmI3k4LRQpWH1La5xkTnACIGx12YCEM-FiYbO59VwM4y4GsgNencLrOAO3Lg2KibvVHEtdQqmCB9UebWF2WRwg$>> for the isKey() method: @Override public boolean isKey(ImmutableBitSet columns) { for (ImmutableBitSet key : keysCopy) { if (columns.contains(key)) { return true; } } return false; } If any key combination includes any of the key combinations of the list, then it is a key. On Fri, Feb 28, 2025 at 10:32 AM Ian Bertolacci <ian.bertola...@workday.com.invalid> wrote: > Howdy, > From Statistic.getKeys: Returns a list of unique keys, or null if no key > exist. > I’m not understanding why this is a list of bitsets. > Is the idea that each entry in the list is a bitset of keys which are > unique when used together? > For example, lets say I have this table: > C0 | C1 | C2 > 0 | 2 | 2 > 0 | 3 | 4 > 1 | 2 | 2 > 1 | 3 | 5 > None of these columns are individually unique, but when used together (C0, > C1), and (C0, C2) form a unique set. > So would this be described by the list: ImmutableList.of( > ImmutableBitSet.of(0, 1), ImmutableBitSet.of(0, 2) ) ? > > Thanks! > > >