You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Julian Hyde (JIRA)" <ji...@apache.org> on 2014/12/01 19:05:12 UTC

[jira] [Commented] (CALCITE-501) Implement indexed access paths in ReflectiveSchema

    [ https://issues.apache.org/jira/browse/CALCITE-501?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14230145#comment-14230145 ] 

Julian Hyde commented on CALCITE-501:
-------------------------------------

Yes, I always wanted to do this. The idea is that there should be rules that know about the various access paths into a collection (full scan, range scan of a sorted collection, indexed access via a map) and those translate into alternative RelNodes. Each rule should be driven by metadata (e.g. annotations).

I think the idea of a sorted table will also be important. Note that ArrayTable.Content.sortField is not used at present - we should use it. And we could extend the Table interface to declare the table's sort order. I don't know whether rules will explicitly look for sorted tables or whether they would create them anyway and discover that range- or point-scans are costed much cheaper.

> Implement indexed access paths in ReflectiveSchema
> --------------------------------------------------
>
>                 Key: CALCITE-501
>                 URL: https://issues.apache.org/jira/browse/CALCITE-501
>             Project: Calcite
>          Issue Type: Bug
>    Affects Versions: 1.0.0-incubating
>            Reporter: Vladimir Sitnikov
>            Assignee: Julian Hyde
>
> {{ReflectiveSchema}} is not able to perform indexed scan of a particular collection.
> It would be nice if it could find rows by a given key.
> This would demonstrate the way to implement indexed access path in Calcite: rules, filter matching.
> The sketch API can be as follows:
> {code:java}
>   public static class CatchallSchema {
>     public final Employee[] employees = {
>       new Employee(1, 10, "A", 0f, null),
>       new Employee(2, 10, "Ab", 0f, null),
>       new Employee(3, 10, "Abc", 0f, null),
>       new Employee(4, 10, "Abd", 0f, null),
>     };
> // Return the data
>    public Employee[] findEmployeesByName(String name);
> // or
> // List of indices into "employees" collection
>    public int[] findEmployeesByName(String name);
> }
> {code}
> Alternative solution is to treat {{Map/SortedMap}} somehow in a special way.
> {code:java}
> // When Filter(name=?, Scan) can be transformed to MapGet(name=?)
> public Map<String, Employee> employees;
> {code}



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)