This consists of several subtasks
- implement operators to generate statistics
- add "analyze table" support to parser/planner
- create a metadata provider to allow statistics to be used by optiq in planning optimization
- implement statistics functions
Right now, the bulk of this functionality is implemented, but it hasn't been rigorously tested and needs to have some definite answers for some of the parts "around the edges" (how analyze table figures out where the table statistics are located, how a table "append" should work in a read only file system)
Also, here are a few known caveats:
- table statistics are collected by creating a sql query based on the string path of the table. This should probably be done with a Table reference.
- Case sensitivity for column statistics is probably iffy
- Math for combining two column NDVs into a joint NDV should be checked.
- Schema changes aren't really being considered yet.
- adding getDrillTable is probably unnecessary; it might be better to do getTable().unwrap(DrillTable.class)