Goal: Iterate through a basic N1QL SELECT where Eventing interacts with the Data service via an inline N1QL statement.
-
This function basicN1qlSelectStmt demonstrates how to use an inline N1QL SELECT statement with a passed parameter.
-
Requires the "travel-sample" sample dataset to be loaded.
-
Requires Eventing Storage (or metadata collection) and a "source" collection of travel-sample.inventory.airline.
-
Assuming you deployed "From now" mutate any document in "travel-sample" to generate a log line.
-
For more detail refer to N1QL Statements.
-
Configure the Function with a Feed Boundary "From now" (Note you will log 187 lines if you use "Everything").
-
[Optional] if Feed Boundary is "Everything" you can use SQL++ (N1QL) to add an index for performance:
-
CREATE INDEX adv_airline_type ON
default
:`travel-sample`.inventory
.route
(airline
) WHERE (type
= 'route')
-
-
basicN1qlSelectStmt
-
Input Data/Mutation (via the following N1QL statement)
-
Output Data/Logged
// To run configure the settings for this Function, basicN1qlSelectStmt, as follows:
//
// Version 7.1+
// "Function Scope"
// *.* (or try travel-sample.inventory if non-privileged)
// Version 7.0+
// "Listen to Location"
// travel-sample.inventory.airline
// "Eventing Storage"
// rr100.eventing.metadata
// Binding(s) - none
//
// Version 6.X
// "Source Bucket"
// travel-sample
// "MetaData Bucket"
// metadata
// Binding(s) - none
function OnUpdate(doc, meta) {
// ignore information we don't care about
if (doc.type !== 'airline') return;
var route_cnt = 0; // we want to get the total routes per iata
var airline = doc.iata; // need a true variable as a N1QL parameter
var results =
SELECT COUNT(*) AS cnt
FROM `travel-sample`.`inventory`.`route`
WHERE type = "route" AND airline = $airline;
for (var item of results) { // Stream results using 'for' iterator.
route_cnt = item.cnt;
}
results.close(); // End the query and free resources held
// Just log the KEY, AIRLINE and ROUTE_CNT it to the Application log
log("key: " + meta.id + ", airline: "+doc.iata+", route_cnt: "+route_cnt);
}
UPDATE `travel-sample`.`inventory`.`airline` USE KEYS "airline_24" SET id = 24
2021-07-19T07:37:39.237-07:00 [INFO] "key: airline_24, airline: AA, route_cnt: 2354"