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.
- 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 (medianteNoSQLHandle.query(oracle.nosql.driver.ops.QueryRequest)
). Cada ejecución devuelve un valorQueryRequest
, 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);
}
}
}
String sqlstmt_allrows=
"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 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()
.
- 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 siborneo.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))
sqlstmt = '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 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()))
}
}
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 completo TableJoins.go de los ejemplos para saber cómo recuperar datos de una tabla principal-secundaria aquí.- Utilice el método
query
para ejecutar una consulta. Este método devuelve una promesa deQueryResult
, 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étodoquery
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 utilizarquery
en un bucle o el métodoqueryIterable
. - 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 propiedadmaxReadKB
en el argumentoQueryOpt
delquery
una llamada del métodoquery
no puede devolver todos los resultados disponibles. Para solucionar este problema, ejecute la consulta en un bucle hasta quecontinuationKey
enQueryResult
se convierta en null/undefined.
- Puede llamar al método
- 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étodoqueryIterable
, también puede utilizar el argumentoQueryOpt
con propiedades distintas decontinuationKey
.
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);
}
}
const querystmt =
'SELECT account_expiry, acct.acct_data.lastName,
acct.acct_data.contentStreamed[].showName
FROM stream_acct acct WHERE acct_id=1';
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);
}
}
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());
}
}
}
private const string 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 completo TableJoins.cs de los ejemplos para saber cómo recuperar datos de una tabla principal-secundaria aquí.