Utiliser des API pour créer une table unique

La table est la structure de base qui contient les données utilisateur. Vous utilisez une commande SQL (instruction CREATE TABLE) ou des commandes d'API TableRequest pour créer une table.

Vous pouvez également utiliser la console Oracle NoSQL Cloud Infrastructure (OCI) ou l'interface de ligne de commande OCI (OCI-cli) pour créer une table dans NDCS.

Instructions relatives à la création d'une table :
  • La définition de table doit inclure au moins une définition de champ et exactement une définition de clé primaire. Pour plus d'informations sur la définition de clé primaire, reportez-vous à Créer une table.
  • La définition de champ spécifie le nom de la colonne, son type de données, si la colonne peut ou non être NULL, une valeur par défaut facultative, si la colonne est ou non une colonne IDENTITY et un commentaire facultatif. Tous les champs (autres que la clé primaire) peuvent être NULL par défaut.
  • La syntaxe de la spécification de clé primaire (key_definition) spécifie les colonnes de clé primaire de la table sous la forme d'une liste ordonnée de noms de champ.
  • La valeur Durée de vie est utilisée pour calculer la durée d'expiration d'une ligne. Les lignes expirées ne sont pas incluses dans les résultats de requête et sont finalement supprimées automatiquement de la table par Oracle NoSQL Database. Si vous indiquez une valeur de durée de vie lors de la création de la table, elle s'applique comme durée de vie par défaut pour chaque ligne insérée dans cette table.

Utilisation des commandes SQL

Vous pouvez utiliser la commande CREATE TABLE dans SQL pour créer des tables NoSQL.

Exemple 1 : L'instruction CREATE TABLE suivante définit une table BaggageInfo qui contient les informations sur les bagages des passagers dans un système aérien.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)
Exemple 2 : l'instruction CREATE TABLE suivante définit une table stream_acct qui contient les données d'une application de diffusion en continu de télévision.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON, 
PRIMARY KEY(acct_id)
)
Exemple 3 : l'instruction CREATE TABLE suivante définit une table stream_acct_new qui contient les données d'une application de diffusion en continu de télévision. Les lignes de la table expirent dans 2 jours.
CREATE TABLE stream_acct_new(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON, 
PRIMARY KEY(acct_id)) USING TTL 2 days

Utilisation de l'API TableRequest

Vous pouvez utiliser l'API TableRequest pour créer des tables NoSQL.

La classe TableRequest est utilisée pour créer des tables. L'exécution des opérations spécifiées par cette demande est asynchrone. Il s'agit d'opérations potentiellement longues. TableResult est renvoyé par les opérations TableRequest et encapsule l'état de la table. Pour plus d'informations sur la classe TableRequest et ses méthodes, reportez-vous à Référence d'API du kit SDK Java Oracle NoSQL.

Téléchargez le code complet CreateTable.java à partir des exemples ici.
private static void createTab(NoSQLHandle handle) throws Exception {
   String createTableDDL = 
   "CREATE TABLE IF NOT EXISTS " + tableName +
                               "(acct_Id INTEGER," +
                               "profile_name STRING," +
                               "account_expiry TIMESTAMP(1) ," +
                               "acct_data JSON, " +
                               "PRIMARY KEY(acct_Id))";

   TableLimits limits = new TableLimits(20, 20, 1);
   TableRequest treq = new TableRequest()
          .setStatement(createTableDDL)
          .setTableLimits(limits);
   TableResult tres = handle.tableRequest(treq);
   /* The request is async,
    * so wait for the table to become active.
    */
    tres.waitForCompletion(handle, 60000,1000); 
    System.out.println("Created Table: " + tableName);
}

Remarques :

Les limites de table ne sont applicables qu'à Oracle NoSQL Database Cloud Service. Si des limites sont définies pour une base de données NoSQL sur site, elles sont ignorées sans invite.

Création d'une table enfant : vous utilisez les mêmes classe et méthodes TableRequest pour exécuter une instruction DDL afin de créer une table enfant.

Lors de la création d'une table enfant :
  • Vous devez indiquer le nom complet de la table (name_parent_table.name_child_table)
  • Il n'est pas nécessaire de définir explicitement les limites de table car une table enfant hérite des limites d'une table parent.

Téléchargez le code complet TableJoins.java à partir des exemples pour comprendre comment créer une table parent-enfant ici.

La classe borneo.TableRequest permet de créer une table. Tous les appels vers borneo.NoSQLHandle.table_request() sont asynchrones. Il est donc nécessaire de vérifier le résultat et d'appeler borneo.TableResult.wait_for_completion() pour attendre la fin de l'opération. Pour plus d'informations sur table_request et ses méthodes, reportez-vous à Référence d'API du kit SDK Python Oracle NoSQL.

Téléchargez le code complet CreateTable.py à partir des exemples ici.
def create_table(handle):
  statement = '''create table if not exists 
              stream_acct (acct_Id INTEGER,
                           profile_name STRING,
                           account_expiry TIMESTAMP(1),
                           acct_data JSON,
                           primary key(acct_Id))'''

    request = TableRequest().set_statement(statement)
                            .set_table_limits(TableLimits(20, 10, 1))

    table_result = handle.do_table_request(request, 40000, 3000)
    table_result.wait_for_completion(handle, 40000, 3000)

    if (table_result.get_state() == State.ACTIVE):
        print('Created table: stream_acct')
    else:
        raise NameError('Table stream_acct is in an unexpected state ' + 
                             str(table_result.get_state()))

Remarques :

Les limites de table ne sont applicables qu'à Oracle NoSQL Database Cloud Service. Si des limites sont définies pour une base de données NoSQL sur site, elles sont ignorées sans invite.

Création d'une table enfant : vous utilisez les mêmes classe et méthodes TableRequest pour exécuter une instruction DDL afin de créer une table enfant.

Lors de la création d'une table enfant :
  • Vous devez indiquer le nom complet de la table (name_parent_table.name_child_table).
  • Il n'est pas nécessaire de définir explicitement les limites de table car une table enfant hérite des limites d'une table parent.

Téléchargez le code complet TableJoins.py à partir des exemples ici.

La classe TableRequest permet de créer une table. L'exécution des opérations indiquées par TableRequest est asynchrone. Il s'agit d'opérations potentiellement longues. Cette demande est utilisée en tant qu'entrée d'une opération Client.DoTableRequest(), qui renvoie une valeur TableResult pouvant être utilisée pour effectuer une interrogation jusqu'à ce que la table atteigne l'état souhaité. Pour plus d'informations sur les différentes méthodes de la classe TableRequest, reportez-vous à Référence d'API du kit SDK Go Oracle NoSQL.

Téléchargez le code complet CreateTable.go à partir des exemples ici.
func createTable(client *nosqldb.Client, err error, tableName string)(){
// Creates a table
 stmt := fmt.Sprintf("CREATE TABLE IF NOT EXISTS %s ("+
     	"acct_Id INTEGER," +
     	"profile_name STRING," +
     	"account_expiry TIMESTAMP(1) ," +
     	"acct_data JSON, " +
     	"PRIMARY KEY(acct_Id))",tableName)

 tableReq := &nosqldb.TableRequest{
		Statement: stmt,
		TableLimits: &nosqldb.TableLimits{
			ReadUnits:  20,
			WriteUnits: 20,
			StorageGB:  1,
              },
 }

 tableRes, err := client.DoTableRequest(tableReq)
 if err != nil {
    fmt.Printf("cannot initiate CREATE TABLE request: %v\n", err)
    return
 }
 // The create table request is asynchronous, 
 // wait for table creation to complete.
 _, err = tableRes.WaitForCompletion(client, 60*time.Second, time.Second)

 if err != nil {
    fmt.Printf("Error finishing CREATE TABLE request: %v\n", err)
    return
 }
 fmt.Println("Created table: ", tableName)
 return
}

Remarques :

Les limites de table ne sont applicables qu'à Oracle NoSQL Database Cloud Service. Si des limites sont définies pour une base de données NoSQL sur site, elles sont ignorées sans invite.

Création d'une table enfant : vous utilisez les mêmes classe et méthodes TableRequest pour exécuter une instruction DDL afin de créer une table enfant.

Lors de la création d'une table enfant :
  • Vous devez indiquer le nom complet de la table (name_parent_table.name_child_table).
  • Il n'est pas nécessaire de définir explicitement les limites de table car une table enfant hérite des limites d'une table parent.

Téléchargez le code complet TableJoins.go à partir des exemples ici.

Vous pouvez créer une table à l'aide de la méthode tableDDL. Cette méthode est asynchrone et renvoie la promesse TableResult. TableResult est un objet JavaScript simple qui contient le statut de l'opération DDL, tel que TableState, son nom, son schéma et son TableLimits. Pour plus d'informations sur les méthodes, reportez-vous à la classe NoSQLClient.

La méthode tableDDL prend l'objet TableDDLOpt comme deuxième argument facultatif. Lorsque vous créez une table, vous devez indiquer son élément TableLimits dans le cadre de l'argument opt. TableLimits indique le débit maximal et la capacité de stockage de la table en tant qu'unités de lecture, unités d'écriture et gigaoctets de stockage.

Téléchargez le code JavaScript complet CreateTable.js à partir des exemples ici et le code TypeScript complet CreateTable.ts à partir des exemples ici.

import {NoSQLClient, TableState } from 'oracle-nosqldb';
const client = new NoSQLClient('config.json');
const TABLE_NAME = 'stream_acct;
async function createTable(handle) {
  const createDDL = `CREATE TABLE IF NOT EXISTS 
                  ${TABLE_NAME} (acct_Id INTEGER,
                                 profile_name STRING,
                                 account_expiry TIMESTAMP(1),
                                 acct_data JSON,
                                 primary key(acct_Id))`;
   /* For Provisioned Capacity specify read units, write units, and storage limit as shown below*/
   /* For On-demand Capacity - set only the storage limit and specify the mode as shown here.
    * { storageGB: 25, mode: CapacityMode.ON_DEMAND }; 
    */
  let res =  await handle.tableDDL(createDDL, {
             complete: true,
             tableLimits: {
              readUnits: 20,
              writeUnits: 20,
              storageGB: 1
             }
  });
  console.log('Created table: ' + TABLE_NAME);
}
Une fois l'appel ci-dessus renvoyé, le résultat reflète l'état final de l'opération. Sinon, pour utiliser l'option complète, remplacez le code du bloc try-catch ci-dessus par l'exemple de code suivant.
const createDDL = `CREATE TABLE IF NOT EXISTS 
                  ${TABLE_NAME} (acct_Id INTEGER,
                                 profile_name STRING,
                                 account_expiry TIMESTAMP(1),
                                 acct_data JSON,
                                 primary key(acct_Id))`;
 let res =  await client.tableDDL(createDDL, {complete: true,});
console.log('Created table: ' + TABLE_NAME);

Création d'une table enfant : vous utilisez les mêmes classe et méthodes TableRequest pour exécuter une instruction DDL afin de créer une table enfant.

Lors de la création d'une table enfant :
  • Vous devez indiquer le nom complet de la table (name_parent_table.name_child_table)
  • Il n'est pas nécessaire de définir explicitement les limites de table car une table enfant hérite des limites d'une table parent.

Téléchargez le code JavaScript complet TableJoins.js à partir des exemples ici et le code TypeScript complet TableJoins.ts à partir des exemples ici.

Pour créer une table, utilisez l'une des méthodes ExecuteTableDDLAsync ou ExecuteTableDDLWithCompletionAsync. Ces deux méthodes renvoient Task<TableResult>. L'instance TableResult contient le statut de l'opération LDD telle que TableState et le schéma de table. Pour plus d'informations sur ces méthodes, reportez-vous à Référence d'API du kit SDK Dotnet Oracle NoSQL.

Téléchargez le code complet CreateTable.cs à partir des exemples ici.
private static async Task createTable(NoSQLClient client){
// Create a table
  var sql =
    $@"CREATE TABLE IF NOT EXISTS 
         {TableName}(acct_Id INTEGER,
                     profile_name STRING,
                     account_expiry TIMESTAMP(1),
                     acct_data JSON,
                     primary key(acct_Id))";
  var tableResult = await client.ExecuteTableDDLAsync(sql,
    new TableDDLOptions{TableLimits = new TableLimits(20, 20, 1)});

  // Wait for the operation completion
  await tableResult.WaitForCompletionAsync();
  Console.WriteLine("  Created table: ",tableResult.TableName);  
}

Remarques :

Les limites de table ne sont applicables qu'à Oracle NoSQL Database Cloud Service. Si des limites sont définies pour une base de données NoSQL sur site, elles sont ignorées sans invite.

Création d'une table enfant : vous utilisez les mêmes classe et méthodes TableRequest pour exécuter une instruction DDL afin de créer une table enfant.

Lors de la création d'une table enfant :
  • Vous devez indiquer le nom complet de la table (name_parent_table.name_child_table)
  • Il n'est pas nécessaire de définir explicitement les limites de table car une table enfant hérite des limites d'une table parent.

Téléchargez le code complet TableJoins.cs à partir des exemples ici.