Primäre Ausdrücke in SQL verwenden
Wenn Sie zusammen mit den Beispielen folgen möchten, lesen Sie Beispieldaten zum Ausführen von Abfragen, um Beispieldaten anzuzeigen. Außerdem erfahren Sie, wie Sie mit der OCI-Konsole die Beispieltabellen erstellen und Daten mit JSON-Dateien laden.
Ausdrücke in Klammern
In Klammern stehende Ausdrücke werden hauptsächlich verwendet, um die Standardpriorität zwischen Operatoren zu ändern. Sie werden auch als syntaktische Hilfe verwendet, um Ausdrücke auf eine Weise zu mischen, die sonst syntaktische Mehrdeutigkeiten verursachen würde.
Beispiel: Rufen Sie den vollständigen Namen, die Tag-Nummer und die Routing-Details von Passagieren ab, die bei JFK/Traversing über JFK einsteigen, und ihr Ziel ist entweder MAD oder VIE.
SELECT fullName, bag.bagInfo.tagNum,
bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest
FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "JFK" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "MAD" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "VIE" )
Erläuterung: Sie möchten den vollständigen Namen, die Tag-Nummer und die Weiterleitungsdetails der Passagiere abrufen. Die erste Filterbedingung ist, dass der Einstiegspunkt/Transit JFK ist. Sobald dies erfüllt ist, ist die zweite Filterbedingung, dass das Ziel entweder MAD oder VIE ist. Sie verwenden eine ODER-Bedingung, um den Zielwert zu filtern.
Ausgabe:
{"fullName":"Dierdre Amador","tagNum":"17657806240229","routing":"JFK/MAD","fltRouteDest":"MAD"}
{"fullName":"Rosalia Triplett","tagNum":"17657806215913","routing":"JFK/IST/VIE","fltRouteDest":["IST","VIE"]}
{"fullName":"Kendal Biddle","tagNum":"17657806296887","routing":"JFK/IST/VIE","fltRouteDest":["IST","VIE"]}
Case-Ausdrücke
Der gesuchte CASE-Ausdruck ähnelt den if-then-else-Anweisungen traditioneller Programmiersprachen. Es besteht aus einer Reihe von WHEN-THEN-Paaren, gefolgt von einer optionalen ELSE-Klausel am Ende. Jeder WHEN-Ausdruck ist eine Bedingung, d.h. er muss BOOLEAN zurückgeben. Die THEN-Ausdrücke sowie der ELSE-Ausdruck können eine beliebige Elementfolge zurückgeben. Der CASE-Ausdruck wird ausgewertet, indem zuerst die WHEN-Ausdrücke von oben nach unten bis zum ersten ausgewertet werden, der "true" zurückgibt. Wenn der i-th WHEN-Ausdruck true zurückgibt, wird der i-th THEN-Ausdruck ausgewertet und sein Ergebnis ist das Ergebnis des gesamten CASE-Ausdrucks. Wenn kein WHEN-Ausdruck "true" zurückgibt, wird sein Ausdruck ausgewertet, und das Ergebnis ist das Ergebnis des gesamten CASE-Ausdrucks. Andernfalls ist das Ergebnis des CASE-Ausdrucks die leere Sequenz.
Beispiel:
SELECT
fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762340683564
Erläuterung: Sie möchten mit einer CASE-Anweisung ermitteln, wie viele Transits für den Passagier bagInfo vorhanden sind. Wenn das Array flightLegs keine Elemente enthält, hat der Passagier keine Beuteldaten. Wenn das flightLegs-Array nur ein Element enthält, gibt es nur einen Transitpunkt. Wenn das Array flightLegs zwei Elemente enthält, gibt es zwei Hops. Ansonsten gibt es drei Transitpunkte. Hier geht man davon aus, dass eine Tasche maximal drei Transitpunkte/Hops haben kann.
Ausgabe:
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
Beispiel 2: Schreiben Sie eine Abfrage, um das System zu warnen, die tagNum der Passagiere zu aktualisieren, wenn der vorhandene Wert keine Zeichenfolge ist.
SELECT bag.bagInfo[].tagNum,
CASE
WHEN bag.bagInfo[0].tagNum is of type (NUMBER)
THEN "Tagnumber is not a STRING. Update the data"
ELSE "Tagnumber has correct datatype"
END AS tag_NUM_TYPE
FROM BaggageInfo bag
Erklärung: Die tagNum der Passagiere im Schema bagInfo ist ein STRING-Datentyp. Die Anwendung könnte jedoch versehentlich einen NUMBER-Wert als Wert von tagNum annehmen. Die Abfrage verwendet den Operator "ist vom Typ", um dies zu erfassen, und fordert das System auf, die tagNum zu aktualisieren, wenn der vorhandene Wert keine Zeichenfolge ist.
Ausgabe (aus Gründen der Kürze werden nur wenige Zeilen angezeigt).
{"tagNum":"17657806240001","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":"17657806224224","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":17657806243578,"tag_NUM_TYPE":"Tagnumber is not a STRING. Update the data"}
{"tagNum":"1765780623244","tag_NUM_TYPE":"Tagnumber has correct datatype"}
Cast-Ausdruck
Der Cast-Ausdruck erstellt, wenn möglich, neue Elemente eines bestimmten Zieltyps aus den Elementen seiner Eingabefolge. Beispiel: Eine STRING kann mit dem CAST-Ausdruck in TIMESTAMP(0) konvertiert werden.
Regeln gefolgt von einem CAST-Ausdruck:
-
Wenn der Typ des Eingabeelements dem Zielobjekttyp entspricht, ist der Cast ein No-Op: Das Eingabeelement selbst wird zurückgegeben.
-
Wenn der Zieltyp ein anderer Platzhaltertyp als JSON ist und der Typ des Eingabeelements ein Subtyp des Platzhaltertyps ist, ist die Umwandlung ein No-op.
-
Wenn der Zieltyp "JSON" lautet, wird ein Fehler ausgelöst, wenn das Eingabeelement ein nicht-json-atomarer Typ ist.
-
Wenn der Zieltyp ein Arraytyp ist, wird ein Fehler ausgelöst, wenn das Eingabeelement kein Array ist.
-
Wenn der Zieltyp "Zeichenfolge" ist, kann das Eingabeelement einen beliebigen Typ aufweisen. Das bedeutet, dass jedes Element in eine Zeichenfolge umgewandelt werden kann. Bei Zeitstempeln lautet der Zeichenfolgenwert UTC und hat das Format
uuuu-MM-dd['T'HH:mm:ss]. -
Wenn der Zieltyp ein atomarer Typ ist, der keine Zeichenfolge ist, muss das Eingabeelement ebenfalls atomar sein.
-
-
Ganzzahlen und Längen können in Zeitstempel umgewandelt werden. Der Eingabewert wird als die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 GMT interpretiert.
-
String-Elemente können in alle anderen atomaren Typen umgewandelt werden. Ob der Cast erfolgreich ist oder nicht, hängt davon ab, ob der tatsächliche Zeichenfolgenwert in einen Wert geparst werden kann, der zur Domain des Zieltyps gehört.
-
Zeitsteuerelemente können in alle Zeitstempeltypen umgewandelt werden. Wenn der Zieltyp eine geringere Genauigkeit als das Eingabeelement aufweist, ist der resultierende Zeitstempel derjenige, der dem Eingabezeitstempel in der Zielgenauigkeit am nächsten liegt.
-
-
-
Um eine STRING in TIMESTAMP zu konvertieren, wenn die Eingabe STRING-Werte im ISO-8601-Format aufweist, wird sie automatisch von der SQL-Laufzeit in den TIMESTAMP-Datentyp konvertiert.
Hinweis:
ISO8601 beschreibt eine international akzeptierte Art, Daten, Zeiten und Dauer darzustellen.
Syntax: Datum mit Uhrzeit: JJJJ-MM-TTThh:mm:ss[.s[s[s[s[s]]]]][Z|(+|-)hh:mm]
Dabei gilt:
- JJJJ gibt das Jahr als vier Dezimalstellen an
- MM gibt den Monat als zwei Dezimalstellen zwischen 00 und 12 an
- DD gibt den Tag als zwei Dezimalstellen zwischen 00 und 31 an
- hh gibt die Stunde als zwei Dezimalstellen an, 00 bis 23
- mm gibt die Minuten an, als zwei Dezimalstellen, 00 bis 59
- ss[.s[s[s[s]]]]] gibt die Sekunden als zwei Dezimalstellen an, 00 bis 59, optional gefolgt von einem Dezimalzeichen und 1 bis 6 Dezimalstellen (die den Bruchteil einer Sekunde darstellen).
- Z gibt die UTC-Zeit an (Zeitzone 0). (Sie kann auch mit +00:00, aber nicht mit -00:00 angegeben werden.)
- (+|-)hh:mm gibt die Zeitzone als Differenz von UTC an. (Einer der Werte + oder - ist erforderlich.)
Beispiel 1: Rufen Sie das Ankunftsdatum der Tasche für den Passagier mit dem Reservierungscode DN3I4Q im TIMESTAMP(3)-Format ab.
SELECT CAST (bag.bagInfo.bagArrivalDate AS Timestamp(3))
AS BAG_ARRIVING_DATE
FROM BaggageInfo bag WHERE bag.confNo=DN3I4Q
Erklärung: Die bagArrivalDate ist eine STRING-Anweisung. Mit CAST konvertieren Sie dieses Feld in ein TIMESTAMP-Format.
Ausgabe:
{"BAG_ARRIVING_DATE":"2019-02-15T21:21:00.000Z"}
Beispiel 2: Rufen Sie den vollständigen Namen und die Tag-Nummer für das gesamte nach 2019 versendete Kundengepäck ab.
SELECT fullName, bag.ticketNo,
bag.bagInfo[].bagArrivalDate
FROM BaggageInfo bag WHERE
exists bag.bagInfo[$element.bagArrivalDate >="2019-01-01T00:00:00"]
Erläuterung: Sie möchten die Details des Gepäcks filtern und anzeigen, das nach 2019 versandt wird. Das Ankunftsdatum der Tasche für jedes Element im flightLegs-Array wird mit dem angegebenen Zeitstempel (2019-01-01T00:00:00) verglichen. Hier ist das Casting implizit, da bagArrivalDate eine STRING ist und direkt mit einem statischen Zeitstempelwert verglichen wird. Eine explizite CAST-Funktion ist nicht erforderlich, wenn ein implizites Casting durchgeführt werden kann. Ihre Daten sollten jedoch das Format YYYY-MM-DDTHH:MI:SS aufweisen. Anschließend prüfen Sie mit der Bedingung EXISTS, ob bagInfo für diese Zeitstempelbedingung vorhanden ist.
Ausgabe:
{"fullName":"Kendal Biddle","ticketNo":1762377974281,"bagArrivalDate":"2019-03-05T12:00:00Z"}
{"fullName":"Lucinda Beckman","ticketNo":1762320569757,"bagArrivalDate":"2019-03-12T15:05:00Z"}
{"fullName":"Adelaide Willard","ticketNo":1762392135540,"bagArrivalDate":"2019-02-15T21:21:00Z"}
{"fullName":"Raymond Griffin","ticketNo":1762399766476,"bagArrivalDate":"2019-02-03T08:09:00Z"}
{"fullName":"Elane Lemons","ticketNo":1762324912391,"bagArrivalDate":"2019-03-15T10:13:00Z"}
{"fullName":"Zina Christenson","ticketNo":1762390789239,"bagArrivalDate":"2019-02-04T10:08:00Z"}
{"fullName":"Zulema Martindale","ticketNo":1762340579411,"bagArrivalDate":"2019-02-25T20:15:00Z"}
{"fullName":"Dierdre Amador","ticketNo":1762376407826,"bagArrivalDate":"2019-03-07T13:51:00Z"}
{"fullName":"Henry Jenkins","ticketNo":176234463813,"bagArrivalDate":"2019-03-02T13:18:00Z"}
{"fullName":"Rosalia Triplett","ticketNo":1762311547917,"bagArrivalDate":"2019-02-12T07:04:00Z"}
{"fullName":"Lorenzo Phil","ticketNo":1762320369957,"bagArrivalDate":["2019-03-12T15:05:00Z","2019-03-12T16:25:00Z"]}
{"fullName":"Gerard Greene","ticketNo":1762341772625,"bagArrivalDate":"2019-03-07T16:01:00Z"}
{"fullName":"Adam Phillips","ticketNo":1762344493810,"bagArrivalDate":"2019-02-01T16:13:00Z"}
{"fullName":"Doris Martin","ticketNo":1762355527825,"bagArrivalDate":"2019-03-22T10:17:00Z"}
{"fullName":"Joanne Diaz","ticketNo":1762383911861,"bagArrivalDate":"2019-02-16T16:13:00Z"}
{"fullName":"Teena Colley","ticketNo":1762357254392,"bagArrivalDate":"2019-02-13T11:15:00Z"}
{"fullName":"Michelle Payne","ticketNo":1762330498104,"bagArrivalDate":"2019-02-02T23:59:00Z"}
{"fullName":"Mary Watson","ticketNo":1762340683564,"bagArrivalDate":"2019-03-14T06:22:00Z"}
{"fullName":"Omar Harvey","ticketNo":1762348904343,"bagArrivalDate":"2019-03-02T16:09:00Z"}
{"fullName":"Fallon Clements","ticketNo":1762350390409,"bagArrivalDate":"2019-02-21T14:08:00Z"}
{"fullName":"Lisbeth Wampler","ticketNo":1762355854464,"bagArrivalDate":"2019-02-10T10:01:00Z"}
Sequenztransformationsausdrücke
Ein Sequenztransformationsausdruck transformiert eine Sequenz in eine andere Sequenz. Syntaktisch sieht es wie eine Funktion aus, deren Name seq_transform lautet. Das erste Argument ist ein Ausdruck, der die zu transformierende Sequenz (die Eingabefolge) generiert, und das zweite Argument ist ein "Mapper"-Ausdruck, der für jedes Element der Eingabefolge berechnet wird. Das Ergebnis des seq_transform-Ausdrucks ist die Verkettung von Sequenzen, die von jeder Auswertung des Mapper-Ausdrucks erzeugt werden. Der Mapper-Ausdruck kann über die Variable $ auf das aktuelle Eingabeelement zugreifen.
Beispiel: Rufen Sie für jede ticketNo ein flaches Array mit allen Aktionen ab, die für das Gepäck dieser ticketNo ausgeführt werden.
SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
"at" : $sq3.actionAt,
"action" : $sq3.actionCode,
"flightNo" : $sq2.flightNo,
"tagNum" : $sq1.tagNum
}
)
)
) AS actions
FROM baggageInfo l WHERE ticketNo=1762340683564
Erläuterung: Sie können den Sequenztransformationsausdruck zum Transformieren von JSON-Dokumenten verwenden, die in Tabellenzeilen gespeichert sind. In solchen Fällen verwenden Sie häufig mehrere Sequenztransformationsausdrücke, die ineinander verschachtelt sind. Hier muss der Mapper-Ausdruck einer inneren Sequenztransformation möglicherweise auf das aktuelle Element einer äußeren Sequenztransformation zugreifen. Um dies zuzulassen, deklariert jeder Sequenztransformationsausdruck "S" eine Variable mit dem Namen $sqN, wobei "N" die Verschachtelungsebene des Ausdrucks S innerhalb der äußeren Sequenztransformationsausdrücke ist. $sqN ist im Grunde ein Synonym für $, d.h. es ist an die vom Eingabeausdruck S zurückgegebenen Elemente gebunden. Auf $sqN können jedoch andere Sequenztransformationsausdrücke zugreifen, die im Ausdruck S verschachtelt sein können.
Ausgabe:
{
"actions":[
{"action":"ONLOAD to HKG","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
{"action":"BagTag Scan at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
{"action":"Checkin at YYZ","at":"YYZ","flightNo":"BM267","tagNum":"17657806299833"},
{"action":"Offload to Carousel at BLR","at":"BLR","flightNo":"BM115","tagNum":"17657806299833"},
{"action":"ONLOAD to BLR","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"},
{"action":"OFFLOAD from HKG","at":"HKG","flightNo":"BM115","tagNum":"17657806299833"}
]
}
Beispiele für SQL-Ausdrücke mit QueryRequest-API
Sie können die QueryRequest-API verwenden und Daten aus einer NoSQL-Tabelle mit SQL-Ausdrücken filtern.
Zum Ausführen der Abfrage verwenden Sie die NoSQLHandle.query()-API.
Laden Sie den vollständigen Code SQLExpressions.java aus den Beispielen hier herunter.
//Fetch rows from the table
private static void fetchRows(NoSQLHandle handle,String sqlstmt) throws Exception {
try (
QueryRequest queryRequest = new QueryRequest().setStatement(sqlstmt);
QueryIterableResult results = handle.queryIterable(queryRequest)){
for (MapValue res : results) {
System.out.println("\t" + res);
}
}
}
String paran_expr="SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing, "+
"bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag WHERE "+
"bag.bagInfo.flightLegs[].fltRouteSrc=any \"SFO\" AND "+
"(bag.bagInfo[].flightLegs[].fltRouteDest=any \"ATH\" OR "+
"bag.bagInfo[].flightLegs[].fltRouteDest=any \"JTR\" )";
System.out.println("Using Paranthesized expression ");
fetchRows(handle,paran_expr);
String case_expr="SELECT fullName,"+
"CASE WHEN NOT exists bag.bagInfo.flightLegs[0] "+
"THEN \"you have no bag info\" "+
"WHEN NOT exists bag.bagInfo.flightLegs[1] "+
"THEN \"you have one hop\" "+
"WHEN NOT exists bag.bagInfo.flightLegs[2] "+
"THEN \"you have two hops.\" "+
"ELSE \"you have three hops.\" "+
"END AS NUMBER_HOPS "+
"FROM BaggageInfo bag WHERE ticketNo=1762341772625";
System.out.println("Using Case Expression ");
fetchRows(handle,case_expr);
String seq_trn_expr="SELECT seq_transform(l.bagInfo[],"+
"seq_transform("+
"$sq1.flightLegs[],"+
"seq_transform("+
"$sq2.actions[],"+
"{"+
"\"at\" : $sq3.actionAt,"+
"\"action\" : $sq3.actionCode,"+
"\"flightNo\" : $sq2.flightNo,"+
"\"tagNum\" : $sq1.tagNum"+
"}"+
")"+
")"+
") AS actions FROM baggageInfo l WHERE ticketNo=1762376407826";
System.out.println("Using Sequence Transform Expressions ");
fetchRows(handle,seq_trn_expr);
Um die Abfrage auszuführen, verwenden Sie die Methode borneo.NoSQLHandle.query().
Laden Sie den vollständigen Code SQLExpressions.py aus den Beispielen hier herunter.
# Fetch data from the table
def fetch_data(handle,sqlstmt):
request = QueryRequest().set_statement(sqlstmt)
print('Query results for: ' + sqlstmt)
result = handle.query(request)
for r in result.get_results():
print('\t' + str(r))
paran_expr = '''SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )'''
print('Using Paranthesized expression:')
fetch_data(handle,paran_expr)
case_expr = '''SELECT fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762341772625'''
print('Using Case Expression:')
fetch_data(handle,case_expr)
seq_trn_expr = '''SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
"at" : $sq3.actionAt,
"action" : $sq3.actionCode,
"flightNo" : $sq2.flightNo,
"tagNum" : $sq1.tagNum
}
)
)
) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826'''
print('Using Sequence Transform Expressions:')
fetch_data(handle,seq_trn_expr)
Um eine Abfrage auszuführen, verwenden Sie die Funktion Client.Query.
Laden Sie den vollständigen Code SQLExpressions.go aus den Beispielen hier herunter.
//fetch data from the table
func fetchData(client *nosqldb.Client, err error, tableName string, querystmt string)(){
prepReq := &nosqldb.PrepareRequest{
Statement: querystmt,
}
prepRes, err := client.Prepare(prepReq)
if err != nil {
fmt.Printf("Prepare failed: %v\n", err)
return
}
queryReq := &nosqldb.QueryRequest{
PreparedStatement: &prepRes.PreparedStatement, }
var results []*types.MapValue
for {
queryRes, err := client.Query(queryReq)
if err != nil {
fmt.Printf("Query failed: %v\n", err)
return
}
res, err := queryRes.GetResults()
if err != nil {
fmt.Printf("GetResults() failed: %v\n", err)
return
}
results = append(results, res...)
if queryReq.IsDone() {
break
}
}
for i, r := range results {
fmt.Printf("\t%d: %s\n", i+1, jsonutil.AsJSON(r.Map()))
}
}
paran_expr := `SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )`
fmt.Printf("Using Paranthesized expression:\n")
fetchData(client, err,tableName,paran_expr)
case_expr := `SELECT fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762341772625`
fmt.Printf("Using Case Expression:\n")
fetchData(client, err,tableName,case_expr)
seq_trn_expr := `SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
"at" : $sq3.actionAt,
"action" : $sq3.actionCode,
"flightNo" : $sq2.flightNo,
"tagNum" : $sq1.tagNum
}
)
)
) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826`
fmt.Printf("Using Sequence Transform Expressions:\n")
fetchData(client, err,tableName,seq_trn_expr)
Um eine Abfrage auszuführen, verwenden Sie die Methode query.
JavaScript: Laden Sie den vollständigen Code SQLExpressions.js aus den Beispielen hier herunter.
//fetches data from the table
async function fetchData(handle,querystmt) {
const opt = {};
try {
do {
const result = await handle.query(querystmt, opt);
for(let row of result.rows) {
console.log(' %O', row);
}
opt.continuationKey = result.continuationKey;
} while(opt.continuationKey);
} catch(error) {
console.error(' Error: ' + error.message);
}
}
TypeScript: Laden Sie den vollständigen Code SQLExpressions.ts aus den Beispielen hier herunter.
interface StreamInt {
acct_Id: Integer;
profile_name: String;
account_expiry: TIMESTAMP;
acct_data: JSON;
}
/* fetches data from the table */
async function fetchData(handle: NoSQLClient,querystmt: any) {
const opt = {};
try {
do {
const result = await handle.query<StreamInt>(querystmt, opt);
for(let row of result.rows) {
console.log(' %O', row);
}
opt.continuationKey = result.continuationKey;
} while(opt.continuationKey);
} catch(error) {
console.error(' Error: ' + error.message);
}
}
const paran_expr = `SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any "SFO" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any "ATH" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any "JTR" )`
console.log("Using Paranthesized expression");
await fetchData(handle,paran_expr);
const case_expr = `SELECT fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN "you have no bag info"
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN "you have one hop"
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN "you have two hops."
ELSE "you have three hops."
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762341772625`
console.log("Using Case Expression");
await fetchData(handle,case_expr);
const seq_trn_expr = `SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
"at" : $sq3.actionAt,
"action" : $sq3.actionCode,
"flightNo" : $sq2.flightNo,
"tagNum" : $sq1.tagNum
}
)
)
) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826`
console.log("Using Sequence Transform Expressions");
await fetchData(handle,seq_trn_expr);
Um eine Abfrage auszuführen, können Sie die Methode QueryAsync aufrufen oder die Methode GetQueryAsyncEnumerable aufrufen und über die resultierende asynchrone aufzählbare Methode iterieren.
Laden Sie den vollständigen Code SQLExpressions.cs aus den Beispielen hier herunter.
private static async Task fetchData(NoSQLClient client,String querystmt){
var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
await DoQuery(queryEnumerable);
}
private static async Task DoQuery(IAsyncEnumerable<QueryResult<RecordValue>> queryEnumerable){
Console.WriteLine(" Query results:");
await foreach (var result in queryEnumerable) {
foreach (var row in result.Rows)
{
Console.WriteLine();
Console.WriteLine(row.ToJsonString());
}
}
}
private const string paran_expr =@"SELECT fullName, bag.bagInfo.tagNum, bag.bagInfo.routing,
bag.bagInfo[].flightLegs[].fltRouteDest FROM BaggageInfo bag
WHERE bag.bagInfo.flightLegs[].fltRouteSrc=any ""SFO"" AND
(bag.bagInfo[].flightLegs[].fltRouteDest=any ""ATH"" OR
bag.bagInfo[].flightLegs[].fltRouteDest=any ""JTR"" )";
Console.WriteLine("\nUsing Paranthesized expression:!");
await fetchData(client,paran_expr);
private const string case_expr =@"SELECT fullName,
CASE
WHEN NOT exists bag.bagInfo.flightLegs[0]
THEN ""you have no bag info""
WHEN NOT exists bag.bagInfo.flightLegs[1]
THEN ""you have one hop""
WHEN NOT exists bag.bagInfo.flightLegs[2]
THEN ""you have two hops.""
ELSE ""you have three hops.""
END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762341772625";
Console.WriteLine("\nUsing Case Expression!");
await fetchData(client,case_expr);
private const string seq_trn_expr =@"SELECT seq_transform(l.bagInfo[],
seq_transform(
$sq1.flightLegs[],
seq_transform(
$sq2.actions[],
{
""at"" : $sq3.actionAt,
""action"" : $sq3.actionCode,
""flightNo"" : $sq2.flightNo,
""tagNum"" : $sq1.tagNum
}
)
)
) AS actions FROM baggageInfo l WHERE ticketNo=1762376407826" ;
Console.WriteLine("\nUsing Sequence Transform Expressions!");
await fetchData(client,seq_trn_expr);