There are a few things in the gray area between the official standard and the 
de facto standard. CROSS/OUTER APPLY is well thought out, does not conflict 
with standard SQL, and has a couple of big vendors behind it. I think it’s safe 
to add it. (Calcite has a conformance setting so that someone can disable it if 
they choose.)

SQL Server goes a bit further, in that allows you to invoke a UDF without the 
TABLE keyword. We do not allow that in Calcite, at this point, because it could 
be ambiguous[2].

I recommend that you do not start building key features on LATERAL. LATERAL is 
a concept that is tricky for users to get their heads around - it is really a 
hack that subtly adjusts the namespaces that the SQL validator uses when 
resolving table aliases inside a join. It’s not inherently about unnesting data 
or calling functions - in fact LATERAL is implicit if you use UNNEST. The less 
your end users need to type LATERAL, the better.

Julian

[2] https://issues.apache.org/jira/browse/CALCITE-1490 
<https://issues.apache.org/jira/browse/CALCITE-1490>

> On Jan 30, 2018, at 12:20 PM, Chunhui Shi <c...@mapr.com> wrote:
> 
> Hi Julian, I think CROSS APPLY and OUTER APPLY are what we want and we have 
> discussed internally. the only problem is, they are not standard SQL although 
> they are supported in SQL server and Oracle 12. Since SQL syntax does not 
> have way to "invoke table function for each row", we have to choose between 
> using APPLY or overloading the meaning of LATERAL as in the current document 
> attached in the JIRA. Which way you think is the better way?
> 
> 
> Thanks,
> 
> Chunhui
> 
> ________________________________
> From: Julian Hyde <jh...@apache.org>
> Sent: Tuesday, January 30, 2018 12:01:47 PM
> To: dev@drill.apache.org
> Subject: Re: LATERAL and UNNEST support for Drill
> 
> LATERAL is a prefix operator not a binary operator, so I believe you are 
> missing a comma:
> 
>> FROM t1 LATERAL UNNEST (t1.array1), UNNEST (t1.array2)
> 
> should be
> 
>> FROM t1, LATERAL UNNEST (t1.array1), LATERAL UNNEST (t1.array2)
> 
> I agree with your remarks about the extra power of putting UNNEST in the FROM 
> clause (per the standard) versus the SELECT clause (per PostgreSQL).
> 
> Note that Calcite supports CROSS APPLY and OUTER APPLY[1]. This is useful 
> when you want to apply a table function for each row of a table. It is just 
> syntactic sugar for LATERAL TABLE so you may get it virtually for free.
> 
> Julian
> 
> 
> [1] 
> https://urldefense.proofpoint.com/v2/url?u=https-3A__issues.apache.org_jira_browse_CALCITE-2D1472&d=DwIFAg&c=cskdkSMqhcnjZxdQVpwTXg&r=FCGQb-L4gJ1XbsL1WU2sugDtPvzIxWFzAi5u4TTtxaI&m=9Y08i3YgrresMOxi7InbjxT0WSHQkcPjJufQWLI9PGk&s=PfJfEyQhvXOSwuTo04m94qSHfz2KHZrR2WPazXpUl6g&e=
>  
> <https://urldefense.proofpoint.com/v2/url?u=https-3A__issues.apache.org_jira_browse_CALCITE-2D1472&d=DwIFAg&c=cskdkSMqhcnjZxdQVpwTXg&r=FCGQb-L4gJ1XbsL1WU2sugDtPvzIxWFzAi5u4TTtxaI&m=9Y08i3YgrresMOxi7InbjxT0WSHQkcPjJufQWLI9PGk&s=PfJfEyQhvXOSwuTo04m94qSHfz2KHZrR2WPazXpUl6g&e=>
> 
> 
> 
>> On Jan 29, 2018, at 8:58 AM, Sorabh Hamirwasia <shamirwa...@mapr.com> wrote:
>> 
>> Hi Ted,
>> Thanks for you question. Array type aggregator is not planned along with 
>> this project. But probably after this is done we can look into it.
>> 
>> Thanks,
>> Sorabh
>> 
>> Get Outlook for 
>> iOS<https://urldefense.proofpoint.com/v2/url?u=https-3A__aka.ms_o0ukef&d=DwIFAg&c=cskdkSMqhcnjZxdQVpwTXg&r=FCGQb-L4gJ1XbsL1WU2sugDtPvzIxWFzAi5u4TTtxaI&m=9Y08i3YgrresMOxi7InbjxT0WSHQkcPjJufQWLI9PGk&s=InfpmexAnhHoPUeNA7M-E8qIORMLXwvsqDfFAA69glg&e=>
>> ________________________________
>> From: Ted Dunning <ted.dunn...@gmail.com>
>> Sent: Sunday, January 28, 2018 10:30:30 PM
>> To: dev@drill.apache.org
>> Cc: Chunhui Shi; Parth Chandra; Aman Sinha; Sorabh Hamirwasia
>> Subject: Re: LATERAL and UNNEST support for Drill
>> 
>> 
>> I haven't looked at the design doc, but this is a great thing to have.
>> 
>> Would you be building something to do the inverse as well?
>> 
>> Something like an aggregator such as array_collect, perhaps?
>> 
>> 
>> 
>> On Thu, Jan 25, 2018 at 2:56 PM, Sorabh Hamirwasia 
>> <sohami.apa...@gmail.com<mailto:sohami.apa...@gmail.com>> wrote:
>> Hi All,
>> 
>> We (people in cc list) have been looking into design for support of LATERAL
>> and UNNEST within Drill. With upgrade of Calcite to 1.15, these keywords
>> are supported in Calcite too. As a first cut we have created a design
>> document which proposes the changes and limitation's for this project.
>> There are still few items which are in progress. I am sharing the JIRA
>> details along with link to design document below. Please feel free to take
>> a look and provide any feedback.
>> 
>> 
>> DRILL-5999 
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__issues.apache.org_jira_browse_DRILL-2D5999&d=DwIFAg&c=cskdkSMqhcnjZxdQVpwTXg&r=FCGQb-L4gJ1XbsL1WU2sugDtPvzIxWFzAi5u4TTtxaI&m=9Y08i3YgrresMOxi7InbjxT0WSHQkcPjJufQWLI9PGk&s=v0h-mUzhxxODVbYyAScphlkT0gnnF6vdvLAiaND2JvY&e=<https://urldefense.proofpoint.com/v2/url?u=https-3A__issues.apache.org_jira_browse_DRILL-2D5999&d=DwMFaQ&c=cskdkSMqhcnjZxdQVpwTXg&r=gRpEl0WzXE3EMrwj0KFbZXGXRyadOthF2jlYxvhTlQg&m=iKu0hCGDHFbZsyzbsmTFjCYxYuLB4FUf26dimMQ8ErE&s=s-Ja1U7TeOgi96_QzCmtlKlV9S8uvtBgjfywbJKp-Tw&e=>>
>> 
>> Design Document
>> <https://urldefense.proofpoint.com/v2/url?u=https-3A__docs.google.com_document_d_1-2DRCIJ0F7VwAqOxkVB305zADwtX-2DOS43Qj2kUmIILUaQ_edit-3Fusp-3Dsharing&d=DwIFAg&c=cskdkSMqhcnjZxdQVpwTXg&r=FCGQb-L4gJ1XbsL1WU2sugDtPvzIxWFzAi5u4TTtxaI&m=9Y08i3YgrresMOxi7InbjxT0WSHQkcPjJufQWLI9PGk&s=30KoGGEUntrnoT-iDtbBdvnQKz25w3l-Op_ksZVNhRA&e=<https://urldefense.proofpoint.com/v2/url?u=https-3A__docs.google.com_document_d_1-2DRCIJ0F7VwAqOxkVB305zADwtX-2DOS43Qj2kUmIILUaQ_edit-3Fusp-3Dsharing&d=DwMFaQ&c=cskdkSMqhcnjZxdQVpwTXg&r=gRpEl0WzXE3EMrwj0KFbZXGXRyadOthF2jlYxvhTlQg&m=iKu0hCGDHFbZsyzbsmTFjCYxYuLB4FUf26dimMQ8ErE&s=keKwGEfpcC8MLXAV4QFiAXASguRR9R1dsGMZdyUmd2E&e=>>
>> 
>> 
>> Thanks,
>> Sorabh
>> 
> 

Reply via email to