Uploaded image for project: 'Calcite'
  1. Calcite
  2. CALCITE-1472

Support CROSS/OUTER APPLY syntax

    XMLWordPrintableJSON

Details

    • New Feature
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.11.0
    • None
    • None

    Description

      The CROSS/OUTER APPLY is very similar to CROSS JOIN and OUTER JOIN. The difference is that the APPLY operator is used to invoke a table-valued function. This is not a standard SQL syntax , but introduced from MS SQL Server [1].

      The APPLY operator can be expressed by Calciteā€™s LATERAL TABLE . That means the

      SELECT MyTable.*, t.s FROM MyTable CROSS APPLY split(MyTable.a)) AS t(s)

      corresponds to :

      SELECT MyTable.*, t.s FROM MyTable, LATERAL TABLE(split(MyTable.a)) AS t(s)

      and

      SELECT MyTable.*, t.s FROM MyTable OUTER APPLY split(MyTable.a)) AS t(s)

      corresponds to:

      SELECT MyTable.*, t.s FROM MyTable LEFT JOIN LATERAL TABLE(split(MyTable.a)) AS t(s) ON TRUE

      The ON TRUE part is necessary for LEFT JOIN, but it's trivial for users. That's why I'm introducing "CROSS/OUTER APPLY" which will simplify the SQL a lot.

      As the APPLY can be expressed by LATERAL, so the only thing we need to touch is the Parser (see [2] and search FLINK to find the modification).

      [1] https://technet.microsoft.com/en-us/library/ms175156(v=sql.105).aspx
      [2] https://github.com/wuchong/flink/blob/60812e51156ec9fa6088154d2f6dea8c1ff9ac17/flink-libraries/flink-table/src/main/codegen/templates/Parser.jj

      Attachments

        Issue Links

          Activity

            People

              julianhyde Julian Hyde
              jark Jark Wu
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: