That’s true, the trick will work only for homogeneous lists. > On Dec 7, 2015, at 13:00, Ian Maxon <[email protected]> wrote: > > We still can't declare a list of mixed type though, I don't think. I > was trying that earlier and ran into some cryptic errors about Java > typecasting. Hopefully that isn't necessary though as the NetCDF (or > the json representation thereof) isn't dynamically structured (e.g. > open types aren't necessary)? > > On Mon, Dec 7, 2015 at 12:48 PM, Ildar Absalyamov > <[email protected] <mailto:[email protected]>> wrote: >> Namrata, >> >> I assume the aforementioned query with record defined in let clause was only >> the example. >> That query indeed has a bug, but is happen only because the type of the list >> is not statically enforced. >> >> Do you load your data into dataset? I so what is the type of that dataset? >> If you enforce the type of your nested ordered lists upon data ingestion you >> can calculate the average: >> >> drop dataverse test if exists >> create dataverse test >> use dataverse test >> >> create type testType as { >> id: int32, >> list: [[double]] >> } >> >> create dataset testDS(testType) primary key id; >> insert into dataset testDS({"id": 1, "list": [[1.2, 2.3, 3.4],[6,3,7,2]]}); >> >> for $x in dataset testDS >> for $y in $x.list >> return {"avg": avg($y)} >> >>> On Dec 7, 2015, at 09:57, Malarout, Namrata (398M-Affiliate) >>> <[email protected]> wrote: >>> >>> Hi, >>> >>> Wail, thanks for looking into it and explaining the use of for. I will be >>> following the issue. However, working with my sample data may be a little >>> more tricky. I have a couple hundred of records which contain such nested >>> ordered lists. I would like to perform an aggregation over all the values >>> across all the records. Any suggestions on how to do it? >>> >>> Mike, thanks for understanding :) Appreciate all the help. >>> -Namrata >>> >>> From: Michael Carey <[email protected] <mailto:[email protected]> >>> <mailto:[email protected] <mailto:[email protected]>>> >>> Reply-To: "[email protected] >>> <mailto:[email protected]> >>> <mailto:[email protected] >>> <mailto:[email protected]>>" >>> <[email protected] >>> <mailto:[email protected]> >>> <mailto:[email protected] >>> <mailto:[email protected]>>> >>> Date: Monday, December 7, 2015 at 7:28 AM >>> To: "[email protected] >>> <mailto:[email protected]> >>> <mailto:[email protected] >>> <mailto:[email protected]>>" >>> <[email protected] >>> <mailto:[email protected]> >>> <mailto:[email protected] >>> <mailto:[email protected]>>>, >>> "[email protected] >>> <mailto:[email protected]> >>> <mailto:[email protected] >>> <mailto:[email protected]>>" >>> <[email protected] >>> <mailto:[email protected]><mailto:[email protected] >>> <mailto:[email protected]>>> >>> Subject: Re: Aggregate function on collection of ordered list >>> >>> + Looping in the dev list to try and get fast attention to the fix, if it's >>> easy! >>> (I know that Namarata's under time pressure in a NASA bakeoff exercise. :-)) >>> >>> On 12/7/15 4:59 AM, Wail Alkowaileet wrote: >>>> It's an easy fix... >>>> Thanks for reporting that. >>>> >>>> I reported it in https://issues.apache.org/jira/browse/ASTERIXDB-1216 >>>> <https://issues.apache.org/jira/browse/ASTERIXDB-1216> >>>> <https://issues.apache.org/jira/browse/ASTERIXDB-1216 >>>> <https://issues.apache.org/jira/browse/ASTERIXDB-1216>> >>>> >>>> On Mon, Dec 7, 2015 at 3:33 PM, Wail Alkowaileet <[email protected] >>>> <mailto:[email protected]> <mailto:[email protected] >>>> <mailto:[email protected]>>> wrote: >>>> Hi Namrata, >>>> >>>> The best way to think of for in lists is to think it works as foreach in >>>> java. >>>> So .. >>>> in your first query, it should be like: >>>> >>>> let $l := [[1.2, 2.3, 3.4],[6,3,7,2]] >>>> for $x in $l // for each list in the outer list >>>> return {"avg”: avg($y)} >>>> >>>> However, I tried it and it seems that there is a bug for applying >>>> aggregation on nested open field. >>>> >>>> I'll look into it to see if it's an easy fix >>>> >>>> >>>> >>>> On Mon, Dec 7, 2015 at 2:52 PM, Malarout, Namrata (398M-Affiliate) >>>> <[email protected] >>>> <mailto:[email protected]><mailto:[email protected] >>>> <mailto:[email protected]>>> wrote: >>>> Hi, >>>> >>>> I am trying to perform avg, sum, min and max functions on a collection of >>>> ordered lists. An example is: >>>> let $l := [[1.2, 2.3, 3.4],[6,3,7,2]] >>>> return {"avg”: avg($l)} >>>> >>>> I have tried both avg and sql-avg. But I get the following error: >>>> Cannot compute AVG for values of type ORDEREDLIST >>>> [NotImplementedException]. >>>> >>>> I’ve attached the sample data that I’m working with (sample.adm). My AQL >>>> query to find the average of analysis_error looks like: >>>> >>>> use dataverse Test; >>>> for $f in dataset sample >>>> where not(is-null($f.analysis_error)) >>>> return avg($f.analysis_error); >>>> >>>> The error seen is as follows: >>>> Type of argument in function-call: asterix:avg, Args:[function-call: >>>> asterix:field-access-by-name, Args:[%0->$$0, AString: {analysis_error}]] >>>> should be a collection type instead of ANY [AlgebricksException] >>>> >>>> I would like to know what is the correct syntax to find the average. >>>> Appreciate the help. >>>> Thanks, >>>> Namrata >>>> >>>> >>>> >>>> >>>> >>>> -- >>>> >>>> Regards, >>>> Wail Alkowaileet >>>> >>>> >>>> >>>> -- >>>> >>>> Regards, >>>> Wail Alkowaileet >>> >> >> Best regards, >> Ildar
Best regards, Ildar
