Uso de la API de Consulta para Recuperar Datos

Puede utilizar QueryRequest para crear consultas para filtrar datos de la tabla NoSQL.

Para ejecutar la consulta, utilice la API NoSQLHandle.query(). Consulte Referencia de API de SDK de Java de Oracle NoSQL para obtener más información sobre las distintas clases y métodos.

Hay dos formas de obtener los resultados de una consulta: mediante un iterador o un bucle a través de resultados parciales.
  • Iterador: utilice NoSQLHandle.queryIterable(QueryRequest) para obtener un iterable que contenga todos los resultados.
  • Resultados parciales: para calcular y recuperar el juego de resultados completo de una consulta, la misma instancia QueryRequest se tendrá que ejecutar, en general, varias veces (mediante NoSQLHandle.query(oracle.nosql.driver.ops.QueryRequest)). Cada ejecución devuelve un valor QueryRequest, que contiene un subjuego del juego de resultados.
String sqlstmt_allrows="SELECT * FROM stream_acct";
private static void fetchRows(NoSQLHandle handle,String sqlstmt) 
                                              throws Exception {
   try (
      QueryRequest queryRequest = 
            new QueryRequest().setStatement(sqlstmt_allrows);

      QueryIterableResult results = 
            handle.queryIterable(queryRequest)){

      for (MapValue res : results) {
         System.out.println("\t" + res);
      }
   }
}
También puede aplicar condiciones de filtro mediante la cláusula WHERE de la consulta.
String sqlstmt_allrows=
"SELECT account_expiry, acct.acct_data.lastName, 
acct.acct_data.contentStreamed[].showName 
FROM stream_acct acct WHERE acct_id=1";
Descargue el código completo QueryData.java de los ejemplos aquí.

Note:

Para recuperar datos de una tabla secundaria, especifique el nombre completo de la tabla (parent_tablename.child_tablename) en la sentencia SQL. Descargue el código completo TableJoins.java de los ejemplos para saber cómo recuperar datos de una tabla principal-secundaria aquí.

Para ejecutar una consulta, utilice el método borneo.NoSQLHandle.query().

Hay dos formas de obtener los resultados de una consulta: mediante un iterador o un bucle a través de resultados parciales.
  • Utilice borneo.NoSQLHandle.query_iterable() para obtener un iterable que contenga todos los resultados de una consulta.
  • Puede realizar un bucle de resultados parciales mediante el método borneo.NoSQLHandle.query(). Por ejemplo, para ejecutar una consulta SELECT para leer datos de la tabla, borneo.QueryResult contiene una lista de resultados. Y si borneo.QueryRequest.is_done() devuelve False, puede haber más resultados, por lo que las consultas se deben ejecutar generalmente en un bucle. Es posible que una sola solicitud no devuelva ningún resultado, pero la consulta aún no se ha realizado, lo que indica que el bucle de consulta debe continuar.
sqlstmt = 'SELECT * FROM stream_acct'

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))
También puede aplicar condiciones de filtro mediante la cláusula WHERE de la consulta.
sqlstmt = 'SELECT account_expiry, acct.acct_data.lastName,
acct.acct_data.contentStreamed[].showName 
FROM stream_acct acct WHERE acct_id=1'
Descargue el código completo QueryData.py de los ejemplos aquí.

Note:

Para recuperar datos de una tabla secundaria, especifique el nombre completo de la tabla (parent_tablename.child_tablename) en la sentencia SQL. Descargue el código completo TableJoins.py de los ejemplos para saber cómo recuperar datos de una tabla principal-secundaria aquí.

Para ejecutar una consulta, utilice la función Client.Query. Cuando se ejecuta en el servicio en la nube, la cantidad de datos leídos por una única solicitud de consulta está limitada por un valor por defecto del sistema y se puede limitar aún más mediante QueryRequest.MaxReadKB. Esto limita la cantidad de datos leídos y no la cantidad de datos devueltos, lo que significa que una consulta puede devolver cero resultados pero seguir teniendo más datos para leer. Por este motivo, las consultas siempre deben funcionar en un bucle, adquiriendo más resultados, hasta que QueryRequest.IsDone() devuelva true, lo que indica que la consulta se ha realizado.

querystmt := "select * FROM stream_acct"

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()))
   }
}
También puede aplicar condiciones de filtro mediante la cláusula WHERE de la consulta.
querystmt := "SELECT account_expiry, acct.acct_data.lastName, 
acct.acct_data.contentStreamed[].showName 
FROM stream_acct acct where acct_id=1"
Descargue el código completo QueryData.go de los ejemplos aquí.

Note:

Para recuperar datos de una tabla secundaria, especifique el nombre completo de la tabla (parent_tablename.child_tablename) en la sentencia SQL. Descargue el código completo TableJoins.go de los ejemplos para saber cómo recuperar datos de una tabla principal-secundaria aquí.
Puede consultar datos de las tablas NoSQL mediante uno de estos métodos. Para obtener detalles sobre el método, consulte la clase NoSQLClient.
  1. Utilice el método query para ejecutar una consulta. Este método devuelve una promesa de QueryResult, que es un objeto JavaScript sin formato que contiene una matriz de filas resultantes, así como una clave de continuación. Puede utilizar el método query de dos formas:
    • Puede llamar al método query solo una vez para las consultas que acceden como máximo a una fila. Estas consultas solo pueden incluir sentencias select basadas en la clave primaria (la cláusula where debe especificar la igualdad según la clave primaria completa). En todos los demás casos, puede utilizar query en un bucle o el método queryIterable.
    • Puede llamar al método query en un bucle para recuperar varias filas. Como la cantidad de datos devueltos por una consulta está limitada por el valor por defecto del sistema y se puede limitar aún más definiendo la propiedad maxReadKB en el argumento QueryOpt del queryuna llamada del método query no puede devolver todos los resultados disponibles. Para solucionar este problema, ejecute la consulta en un bucle hasta que continuationKey en QueryResult se convierta en null/undefined.
  2. Itere sobre los resultados de la consulta mediante el método queryIterable. Este método devuelve un objeto iterable sobre el que puede iterar con un bucle for-await-of. No es necesario gestionar la continuación en este método.

    Note:

    Con el método queryIterable, también puede utilizar el argumento QueryOpt con propiedades distintas de continuationKey.
JavaScript: descargue el código completo QueryData.js de los ejemplos aquí.
const querystmt = 'SELECT * FROM stream_acct';

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);
    }
}
También puede aplicar condiciones de filtro mediante la cláusula WHERE de la consulta.
const querystmt = 
'SELECT account_expiry, acct.acct_data.lastName, 
acct.acct_data.contentStreamed[].showName 
FROM stream_acct acct WHERE acct_id=1';
TypeScript: puede utilizar los mismos métodos descritos en JavaScript anterior para TypeScript. También puede proporcionar un esquema de resultado de consulta opcional como parámetro type para el método query a fin de proporcionar indicaciones type para las filas devueltas en QueryResult. No tiene que ser lo mismo que el esquema de fila de tabla (a menos que utilice la consulta SELECT *), ya que la consulta puede incluir proyecciones, alias de nombre, valores agregados, etc. Descargue el código completo QueryData.ts de los ejemplos aquí.
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: string) {
   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);
   }
}
También puede aplicar condiciones de filtro mediante la cláusula WHERE de la consulta.
const querystmt = 
'SELECT account_expiry, acct.acct_data.lastName, 
acct.acct_data.contentStreamed[].showName 
FROM stream_acct acct WHERE acct_id=1';

Note:

Para recuperar datos de una tabla secundaria, especifique el nombre completo de la tabla (parent_tablename.child_tablename) en la sentencia SQL. Descargue el código JavaScript completo TableJoins.js aquí y el código TypeScript completo TableJoins.ts aquí para saber cómo recuperar datos de una tabla principal-secundaria.

Para ejecutar una consulta, puede llamar al método QueryAsync o llamar al método GetQueryAsyncEnumerable e iterar sobre el elemento enumerable asíncrono resultante. Puede transferir opciones a cada uno de estos métodos como QueryOptions. El método QueryAsync devuelve Task<QueryResult<RecordValue>>. QueryResult contiene resultados de consulta como una lista de instancias de RecordValue, así como otra información. Cuando la consulta especifica una clave primaria completa, basta con llamar a QueryAsync una vez. El sistema limita la cantidad de datos devueltos por la consulta. También se podría limitar aún más definiendo la propiedad MaxReadKB de QueryOptions. Esto significa que una llamada de QueryAsync puede no devolver todos los resultados disponibles. Esta situación se aborda utilizando la clave de continuación. Una clave de continuación no nula en QueryResult significa que puede haber más resultados de consulta disponibles. Esto significa que las consultas se deben ejecutar en un bucle hasta que la clave de continuación se convierta en nula. Consulte Referencia de API de SDK de Dotnet de Oracle NoSQL para obtener más información sobre todas las clases y métodos.

private const string querystmt ="SELECT * FROM stream_acct";

private static async Task fetchData(NoSQLClient client,String querystmt){
   var queryEnumerable = client.GetQueryAsyncEnumerable(querystmt);
   await DoQuery(queryEnumerable);
 }

//function to display result
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());
      }
   }
}
También puede aplicar condiciones de filtro mediante la cláusula WHERE de la consulta.
private const string querystmt =
"SELECT account_expiry, acct.acct_data.lastName, 
acct.acct_data.contentStreamed[].showName 
FROM stream_acct acct WHERE acct_id=1";
Descargue el código completo QueryData.cs de los ejemplos aquí.

Note:

Para recuperar datos de una tabla secundaria, especifique el nombre completo de la tabla (parent_tablename.child_tablename) en la sentencia SQL. Descargue el código completo TableJoins.cs de los ejemplos para saber cómo recuperar datos de una tabla principal-secundaria aquí.