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 Oracle NoSQL Java SDK API Reference 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 loop através de 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 QueryRequest terá, em geral, de ser executada várias vezes (por meio de NoSQLHandle.query(oracle.nosql.driver.ops.QueryRequest)). Cada execução retorna um QueryRequest, 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 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.java dos exemplos para entender 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 loop através de resultados parciais.
  • Use borneo.NoSQLHandle.query_iterable() para obter um iterável que contenha todos os resultados de uma consulta.
  • Você pode fazer loop por resultados parciais usando o método borneo.NoSQLHandle.query(). Por exemplo, para executar uma consulta SELECT para ler dados da sua tabela, borneo.QueryResult contém uma lista de resultados. E se borneo.QueryRequest.is_done() retornar False, poderá haver mais resultados; portanto, as consultas geralmente deverão ser executadas em um loop. É possível que uma única solicitação não retorne resultados, mas a consulta ainda não foi 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 dos 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 resultados zero, mas ainda ter mais dados para ler. Por esse motivo, as consultas devem sempre 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 entender 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.
  1. Use o método query para executar uma consulta. Esse método retorna uma Promessa de QueryResult, que é um objeto JavaScript simples que contém um array de linhas resultantes, bem como uma chave de continuação. Você pode usar o método query de duas maneiras:
    • Você só pode chamar o método query uma vez para consultas que acessam no máximo uma linha. Essas consultas só podem incluir instruções SELECT com base 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 usar query em um loop ou o método queryIterable.
    • Você pode chamar o método query em um loop para recuperar várias linhas. Como a quantidade de dados retornados por uma consulta é limitada pelo padrão do sistema e pode ser ainda mais limitada definindo a propriedade maxReadKB no argumento QueryOpt da chamada queryum do método query não pode retornar todos os resultados disponíveis. Para resolver esse problema, execute a consulta em um loop até que continuationKey em QueryResult se torne null/undefined.
  2. Repita os resultados da consulta usando o método queryIterable. Esse método retorna um objeto iterável que 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 nos 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 a fim de fornecer dicas de type para as linhas retornadas em QueryResult. Isso não precisa ser igual ao esquema de linha da tabela (a menos que a consulta SELECT * seja usada), 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. Baixe o código JavaScript completo TableJoins.js aqui e o código TypeScript completo TableJoins.ts aqui para entender 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 como 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 da consulta podem estar disponíveis. Isso significa que as consultas devem ser executadas em um loop, até que a chave de continuação se torne nula. Consulte Oracle NoSQL Dotnet SDK API Reference 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 entender como extrair dados de uma tabela pai-filho aqui.