AQL: Querying TinySocial AsterixDB

Query 0-A - Exact-Match Lookup

use dataverse TinySocial;

for $user in dataset FacebookUsers
where $user.id = 8
return $user;
var expression0a = new FLWOGRExpression({
"dataverse" : "TinySocial",
"success" : function(res) {
$('#result0a').html(res["results"]);
}
})
.bind( new ForClause("user", null, new AsterixExpression().set(["dataset FacebookUsers"])) )
.bind( new WhereClause(new BooleanExpression("$user.id = 8")) )

Query 0-B - Range Scan

use dataverse TinySocial;

for $user in dataset FacebookUsers
where $user.id >= 2 and $user.id <= 4
return $user;

Query 1 - Other Query Filters

use dataverse TinySocial;

for $user in dataset FacebookUsers
where $user.user-since >= datetime('2010-07-22T00:00:00')
and $user.user-since <= datetime('2012-07-29T23:59:59')
return $user;

Query 2-A - Equijoin

use dataverse TinySocial;

for $user in dataset FacebookUsers
for $message in dataset FacebookMessages
where $message.author-id = $user.id
return {
"uname": $user.name,
"message": $message.message
};

Query 2-B - Index join

use dataverse TinySocial;

for $user in dataset FacebookUsers
for $message in dataset FacebookMessages
where $message.author-id /*+ indexnl */ = $user.id
return {
"uname": $user.name,
"message": $message.message
};

Query 3 - Nested Outer Join

use dataverse TinySocial;

for $user in dataset FacebookUsers
return {
"uname": $user.name,
"messages": for $message in dataset FacebookMessages
where $message.author-id = $user.id
return $message.message
};

Query 4 - Theta Join

use dataverse TinySocial;

for $t in dataset TweetMessages
return {
"message": $t.message-text,
"nearby-messages": for $t2 in dataset TweetMessages
where spatial-distance($t.sender-location, $t2.sender-location) <= 1
return { "msgtxt":$t2.message-text}
};

Query 5 - Fuzzy Join

use dataverse TinySocial;

set simfunction "edit-distance";
set simthreshold "3";

for $fbu in dataset FacebookUsers
return {
"id": $fbu.id,
"name": $fbu.name,
"similar-users": for $t in dataset TweetMessages
let $tu := $t.user
where $tu.name ~= $fbu.name
return {
"twitter-screenname": $tu.screen-name,
"twitter-name": $tu.name
}
};

Query 6 - Existential Quantification

use dataverse TinySocial;

for $fbu in dataset FacebookUsers
where (some $e in $fbu.employment satisfies is-null($e.end-date))
return $fbu;

Query 7 - Universal Quantification

use dataverse TinySocial;

for $fbu in dataset FacebookUsers
where (every $e in $fbu.employment satisfies not(is-null($e.end-date)))
return $fbu;

Query 8 - Simple Aggregation

use dataverse TinySocial;

count(for $fbu in dataset FacebookUsers return $fbu);
var expression8 = new FunctionExpression({
"function" : "count",
"expression" : new ForClause(
"fbu", null, new AsterixExpression().set(["dataset FacebookUsers"])
).bind(
{"return" : new AsterixExpression().set(["$fbu"])}
),
"dataverse" : "TinySocial",
"success" : function(res) {
$('#result8').html(res["results"]);
}
}).run();

Query 9-A - Grouping and Aggregation

use dataverse TinySocial;

for $t in dataset TweetMessages
group by $uid := $t.user.screen-name with $t
return {
"user": $uid,
"count": count($t)
};

Query 9-B - (Hash-Based) Grouping and Aggregation

use dataverse TinySocial;

for $t in dataset TweetMessages
/*+ hash*/
group by $uid := $t.user.screen-name with $t
return {
"user": $uid,
"count": count($t)
};

Query 10 - Grouping and Limits

use dataverse TinySocial;

for $t in dataset TweetMessages
group by $uid := $t.user.screen-name with $t
let $c := count($t)
order by $c desc
limit 3
return {
"user": $uid,
"count": $c
};

Query 11 - Left Outer Fuzzy Join

use dataverse TinySocial;

set simfunction "jaccard";
set simthreshold "0.3";

for $t in dataset TweetMessages
return {
"tweet": $t,
"similar-tweets": for $t2 in dataset TweetMessages
where $t2.referred-topics ~= $t.referred-topics
and $t2.tweetid != $t.tweetid
return $t2.referred-topics
};