Primäre Ausdrücke in SQL verwenden

Wenn Sie die Beispiele befolgen möchten, finden Sie unter Beispieldaten zum Ausführen von Abfragen Informationen zum Anzeigen von Beispieldaten und zum Erstellen der Beispieltabellen mit der OCI-Konsole und zum Laden von Daten mit JSON-Dateien.

Klammern

Klammerausdrü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 Belegnummer und die Routingdetails der Passagiere ab, die entweder bei JFK einsteigen/durch JFK reisen und deren Ziel entweder MAD oder VIE ist.
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 Belegnummer und die Routingdetails der Passagiere abrufen. Die erste Filterbedingung ist, dass der Boarding Point/Transit JFK ist. Sobald dies erfüllt ist, ist die zweite Filterbedingung, dass das Ziel entweder MAD oder VIE ist. Sie verwenden eine OR-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 Folge von Elementen zurückgeben. Der CASE-Ausdruck wird ausgewertet, indem zuerst die WHEN-Ausdrücke von oben nach unten ausgewertet werden, bis der erste, der True zurückgibt. Wenn der i-te WHEN-Ausdruck "true" zurückgibt, wird der i-te THEN-Ausdruck ausgewertet, und das Ergebnis ist das Ergebnis des gesamten CASE-Ausdrucks. Wenn kein WHEN-Ausdruck True zurückgibt, wird der 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 anhand einer CASE-Anweisung ermitteln, wie viele Übertragungen 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. Ebenso gibt es zwei Hops, wenn das Array flightLegs zwei Elemente enthält. Ansonsten gibt es drei Transitpunkte. Hier gehen Sie davon aus, dass eine Tasche maximal drei Transitpunkte/Hops haben kann.

Ausgabe:
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
Beispiel 2: Erstellen Sie eine Abfrage, um das System aufzufordern, 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 

Erläuterung: Die tagNum der Passagiere im Schema bagInfo ist ein STRING-Datentyp. Die Anwendung könnte jedoch versehentlich einen NUMBER-Wert als Wert von tagNum verwenden. Die Abfrage verwendet den Operator "ist vom Typ", um dies zu erfassen, und fordert das System auf, 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 nach Möglichkeit neue Elemente eines bestimmten Zieltyps aus den Elementen seiner Eingabesequenz. Beispiel: Ein STRING kann mit dem CAST-Ausdruck in TIMESTAMP(0) konvertiert werden.

Regeln, die in einem CAST-Ausdruck gefolgt werden:
  • Wenn der Typ des Eingabeelements dem Typ des Zielelements entspricht, ist der Cast ein No-Op: Das Eingabeelement selbst wird zurückgegeben.
  • Wenn der Zieltyp ein anderer Platzhalter als JSON ist und der Typ des Eingabeelements ein Subtyp des Platzhaltertyps ist, ist die Konvertierung ein No-Op.
  • Wenn der Zieltyp "JSON" lautet, wird ein Fehler ausgelöst, wenn das Eingabeelement ein atomarer Nicht-Json-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 hat ihr Zeichenfolgenwert das Format uuuu-MM-dd['T'HH:mm:ss].
  • Wenn der Zieltyp ein anderer atomarer Typ als String ist, muss das Eingabeelement auch atomar sein.
      • Ganzzahlen und Längen können in Zeitstempel umgewandelt werden. Der Eingabewert wird als die Anzahl von ms seit dem 1. Januar 1970, 00:00:00 GMT interpretiert.
      • String-Elemente können auf alle anderen atomaren Typen umformbar sein. Ob die Konvertierung erfolgreich verläuft oder nicht, hängt davon ab, ob der tatsächliche Zeichenfolgenwert in einen Wert geparst werden kann, der zur Domain des Zieltyps gehört.
      • Zeitstempeltelemente können in alle Zeitstempeltypen übernommen werden. Wenn der Zieltyp eine geringere Genauigkeit als das Eingabeelement aufweist, ist der resultierende Zeitstempel der Zeitstempel, der am nächsten zum Eingabezeitstempel in der Zielgenauigkeit liegt.
  • Um einen STRING in TIMESTAMP umzuwandeln, wenn die Eingabe STRING-Werte im ISO-8601-Format aufweist, wird er automatisch von der SQL-Laufzeit in den Datentyp TIMESTAMP konvertiert.

    Hinweis:

    ISO8601 beschreibt eine international akzeptierte Möglichkeit, Daten, Zeiten und Dauer darzustellen.

    Syntax: Date with time: YYYY-MM-DDThh:mm:ss[.s[s[s[s[s[s]]]]][Z|(+|-)hh:mm]

    Dabei gilt:
    • YYYY gibt das Jahr als vier Dezimalstellen an
    • MM gibt den Monat als zwei Dezimalstellen an, 00 bis 12
    • DD gibt den Tag als zwei Dezimalstellen an, 00 bis 31
    • hh gibt die Stunde als zwei Dezimalstellen an, 00 bis 23
    • mm gibt die Minuten als zwei Dezimalstellen an, 00 bis 59
    • ss[.s[s[s[s]]]]] gibt die Sekunden als zwei Dezimalstellen an, 00 bis 59, optional gefolgt von einem Dezimalpunkt und 1 bis 6 Dezimalstellen (d.h. den Bruchteil einer Sekunde).
    • Z gibt die UTC-Zeit an (Zeitzone 0). (Sie kann auch durch +00:00 angegeben werden, aber nicht durch -00:00.)
    • (+|-)hh:mm gibt die Zeitzone als Differenz zur UTC an. (Eines von + oder - ist erforderlich.)
Beispiel 1: Rufen Sie das Ankunftsdatum der Gepäckstücke 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. 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 Inventarnummer für alle Kundengepäckstücke ab, die nach 2019 versandt wurden.
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 Details des nach 2019 gelieferten Gepäcks filtern und anzeigen. Das Ankunftsdatum der Mischentity für jedes Element im Array flightLegs wird mit dem angegebenen Zeitstempel (2019-01-01T00:00:00) verglichen. Hier ist das Casting implizit, da bagArrivalDate ein 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. Syntaktisch sieht es aus wie eine Funktion mit dem Namen seq_transform. 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 Ausdrucks seq_transform 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 wurden.
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: Mit dem Sequenztransformationsausdruck können Sie JSON-Dokumente transformieren, 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 Elemente gebunden, die vom Eingabeausdruck S zurückgegeben werden. Auf $sqN können jedoch andere Sequenztransformationsausdrücke zugegriffen werden, 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 der 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ählung 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);