Usando a API de Consulta para extrair dados
Você pode usar o QueryRequest para construir consultas para filtrar dados da sua tabela NoSQL.
Para executar sua consulta, use a API NoSQLHandle.query(). Consulte Referência da API do Oracle NoSQL Java SDK para obter mais detalhes sobre as várias classes e métodos.
Há duas maneiras de obter os resultados de uma consulta: usando um iterador ou percorrendo resultados parciais.
-
Iterador: Use
NoSQLHandle.queryIterable(QueryRequest)para obter uma iterável que contenha todos os resultados. -
Resultados Parciais: Para calcular e recuperar o conjunto completo de resultados de uma consulta, a mesma instância
QueryRequestterá, em geral, de ser executada várias vezes (por meio deNoSQLHandle.query(oracle.nosql.driver.ops.QueryRequest)). Cada execução retorna umaQueryRequest, que contém um subconjunto do conjunto 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);
}
}
}
Você também pode aplicar condições de filtro usando a cláusula WHERE na consulta.
String sqlstmt_allrows=
"SELECT account_expiry, acct.acct_data.lastName,
acct.acct_data.contentStreamed[].showName
FROM stream_acct acct WHERE acct_id=1";
Faça download do código completo QueryData.java dos exemplos aqui.
Observação: para extrair dados de uma tabela filho, especifique o nome completo da tabela (parent_tablename.child_tablename) na instrução sql. Faça download do código completo TableJoins.java dos exemplos para compreender como extrair dados de uma tabela pai-filho aqui.
Para executar uma consulta, use o método borneo.NoSQLHandle.query().
Há duas maneiras de obter os resultados de uma consulta: usando um iterador ou percorrendo resultados parciais.
-
Use
borneo.NoSQLHandle.query_iterable()para obter uma iterável que contenha todos os resultados de uma consulta. -
Você pode percorrer resultados parciais usando o método
borneo.NoSQLHandle.query(). Por exemplo, para executar uma consulta SELECT para ler dados da sua tabela, umaborneo.QueryResultcontém uma lista de resultados. E se oborneo.QueryRequest.is_done()retornar Falso, poderá haver mais resultados, portanto, as consultas geralmente devem ser executadas em um loop. É possível que uma única solicitação não retorne resultados, mas a consulta ainda não tenha sido concluída, indicando que o loop da consulta deve 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))
Você também pode aplicar condições de filtro usando a cláusula WHERE na consulta.
sqlstmt = 'SELECT account_expiry, acct.acct_data.lastName,
acct.acct_data.contentStreamed[].showName
FROM stream_acct acct WHERE acct_id=1'
Faça download do código completo QueryData.py nos exemplos aqui.
Observação: para extrair dados de uma tabela filho, especifique o nome completo da tabela (parent_tablename.child_tablename) na instrução sql. Faça download do código completo TableJoins.py nos exemplos para entender como extrair dados de uma tabela pai-filho aqui.
Para executar uma consulta, use a função Client.Query. Quando executado no serviço de nuvem, o volume de dados lidos por uma única solicitação de consulta é limitado por um padrão do sistema e pode ser ainda mais limitado usando QueryRequest.MaxReadKB. Isso limita a quantidade de dados lidos e não a quantidade de dados retornados, o que significa que uma consulta pode retornar zero resultados, mas ainda ter mais dados para ler. Por esse motivo, as consultas sempre devem operar em um loop, adquirindo mais resultados, até QueryRequest.IsDone() retornar verdadeiro, indicando que a consulta foi feita.
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()))
}
}
Você também pode aplicar condições de filtro usando a cláusula WHERE na consulta.
querystmt := "SELECT account_expiry, acct.acct_data.lastName,
acct.acct_data.contentStreamed[].showName
FROM stream_acct acct where acct_id=1"
Faça download do código completo QueryData.go nos exemplos aqui.
Observação: para extrair dados de uma tabela filho, especifique o nome completo da tabela (parent_tablename.child_tablename) na instrução sql. Faça download do código completo TableJoins.go dos exemplos para compreender como extrair dados de uma tabela pai-filho aqui.
Você pode consultar dados das tabelas NoSQL usando um desses métodos. Para obter detalhes do método, consulte a classe NoSQLClient.
-
Use o método
querypara executar uma consulta. Este método retorna uma Promessa deQueryResult, que é um objeto JavaScript sem formatação que contém um array de linhas resultantes, bem como uma chave de continuação. Você pode usar o métodoqueryde duas maneiras:-
Você pode chamar o método
queryapenas uma vez para consultas que acessam no máximo uma linha. Essas consultas podem incluir apenas instruções de seleção baseadas na chave primária (a cláusula where deve especificar a igualdade com base na chave primária completa). Em todos os outros casos, você pode usarqueryem um loop ou o métodoqueryIterable. -
Você pode chamar o método
queryem um loop para recuperar várias linhas. Como o volume de dados retornado por uma consulta é limitado pelo padrão do sistema e pode ser ainda mais limitado definindo a propriedademaxReadKBno argumentoQueryOptdoqueryuma chamada do métodoquerynão pode retornar todos os resultados disponíveis. Para resolver esse problema, execute a consulta em um loop até quecontinuationKeyemQueryResultse torne nulo/indefinido.
-
-
Itere os resultados da consulta usando o método
queryIterable. Esse método retorna um objeto iterável sobre o qual você pode iterar com um loop for-await-of. Você não precisa gerenciar a continuação neste método.
Observação: Com o método queryIterable, você também pode usar o argumento QueryOpt com propriedades diferentes de continuationKey.
JavaScript: Faça download do código completo QueryData.js dos exemplos aqui.
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);
}
}
Você também pode aplicar condições de filtro usando a cláusula WHERE na consulta.
const querystmt =
'SELECT account_expiry, acct.acct_data.lastName,
acct.acct_data.contentStreamed[].showName
FROM stream_acct acct WHERE acct_id=1';
TypeScript: Você pode usar os mesmos métodos descritos em JavaScript acima para TypeScript. Você também pode fornecer um esquema de resultado de consulta opcional como o parâmetro type para o método query para fornecer dicas de type para as linhas retornadas em QueryResult. Ele não precisa ser o mesmo que o esquema de linhas da tabela (a menos que use a consulta SELECT), pois a consulta pode incluir projeções, aliases de nome, valores agregados etc. Faça download do código completo QueryData.ts nos exemplos aqui.
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);
}
}
Você também pode aplicar condições de filtro usando a cláusula WHERE na consulta.
const querystmt =
'SELECT account_expiry, acct.acct_data.lastName,
acct.acct_data.contentStreamed[].showName
FROM stream_acct acct WHERE acct_id=1';
Observação: para extrair dados de uma tabela filho, especifique o nome completo da tabela (parent_tablename.child_tablename) na instrução sql. Faça download do código JavaScript completo TableJoins.js aqui e do código TypeScript completo TableJoins.ts aqui para compreender como extrair dados de uma tabela pai-filho.
Para executar uma consulta, você pode chamar o método QueryAsync ou chamar o método GetQueryAsyncEnumerable e iterar sobre o enumerável assíncrono resultante. Você pode passar opções para cada um desses métodos como QueryOptions. O método QueryAsync retorna Task<QueryResult<RecordValue>>. QueryResult contém resultados de consulta como uma lista de instâncias RecordValue, bem como outras informações. Quando sua consulta especifica uma chave primária completa, é suficiente chamar QueryAsync uma vez. A quantidade de dados retornados pela consulta é limitada pelo sistema. Também pode ser ainda mais limitado definindo a propriedade MaxReadKB de QueryOptions. Isso significa que uma chamada de QueryAsync pode não retornar todos os resultados disponíveis. Esta situação é tratada usando a chave de continuação. A chave de continuação não nula em QueryResult significa que mais resultados de consulta podem estar disponíveis. Isso significa que as consultas devem ser executadas em um loop, fazendo loop até que a chave de continuação torne-se nula. Consulte Referência da API do SDK do Oracle NoSQL Dotnet para obter mais detalhes sobre todas as classes e 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());
}
}
}
Você também pode aplicar condições de filtro usando a cláusula WHERE na 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";
Faça download do código completo QueryData.cs nos exemplos aqui.
Observação: para extrair dados de uma tabela filho, especifique o nome completo da tabela (parent_tablename.child_tablename) na instrução sql. Faça download do código completo TableJoins.cs dos exemplos para compreender como extrair dados de uma tabela pai-filho aqui.