API를 사용하여 싱글톤 테이블 생성

테이블은 유저 데이터를 보유하기 위한 기본 구조입니다. SQL 명령(CREATE TABLE 문) 또는 TableRequest API 명령을 사용하여 새 테이블을 생성합니다.

Oracle NoSQL Cloud Infrastructure(OCI) 콘솔 또는 OCI 명령행 인터페이스(OCI-cli)를 사용하여 NDCS에서 테이블을 생성할 수도 있습니다.

테이블 생성 지침:
  • 테이블 정의에는 하나 이상의 필드 정의와 정확히 하나의 기본 키 정의가 포함되어야 합니다. 기본 키 정의에 대한 자세한 내용은 테이블 생성을 참조하십시오.
  • 필드 정의는 열 이름, 해당 데이터 유형, 열이 널 가능 여부, 선택적 기본값, 열이 IDENTITY 열인지 여부 및 선택적 설명을 지정합니다. 기본적으로 PRIMARY KEY 이외의 모든 필드는 null을 사용할 수 있습니다.
  • 기본 키 사양(key_definition)에 대한 구문은 테이블의 기본 키 열을 정렬된 필드 이름 목록으로 지정합니다.
  • TTL(Time-To-Live) 값은 행의 만료 시간을 계산하는 데 사용됩니다. 만료된 행은 질의 결과에 포함되지 않으며 Oracle NoSQL Database에 의해 테이블에서 자동으로 제거됩니다. 테이블을 생성할 때 TTL 값을 지정하면 이 테이블에 삽입된 모든 행에 대한 기본 TTL로 적용됩니다.

SQL 명령 사용

SQL에서 CREATE TABLE 명령을 사용하여 NoSQL 테이블을 생성할 수 있습니다.

예 1: 다음 CREATE TABLE 문은 항공사 시스템에서 승객의 수하물 정보를 보관하는 BaggageInfo 테이블을 정의합니다.
CREATE TABLE BaggageInfo (
ticketNo LONG,
fullName STRING,
gender STRING,
contactPhone STRING,
confNo STRING,
bagInfo JSON,
PRIMARY KEY (ticketNo)
)
예 2: 다음 CREATE TABLE 문은 TV 스트리밍 응용 프로그램의 데이터를 보관하는 stream_acct 테이블을 정의합니다.
CREATE TABLE stream_acct(
acct_id INTEGER,
profile_name STRING,
account_expiry TIMESTAMP(1),
acct_data JSON, 
PRIMARY KEY(acct_id)
)
예 3: 다음 CREATE TABLE 문은 TV 스트리밍 응용 프로그램의 데이터를 보관하는 stream_acct_new 테이블을 정의합니다. 테이블의 행이 2일 후에 만료됩니다.
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

TableRequest API 사용

TableRequest API를 사용하여 NoSQL 테이블을 생성할 수 있습니다.

TableRequest 클래스는 테이블을 생성하는 데 사용됩니다. 이 요청에 의해 지정된 작업의 실행은 비동기입니다. 이러한 작업은 장기적으로 실행될 수 있습니다. TableResultTableRequest 작업에서 반환되며 테이블의 상태를 캡슐화합니다. TableRequest 클래스 및 해당 메소드에 대한 자세한 내용은 Oracle NoSQL Java SDK API Reference를 참조하십시오.

CreateTable.java 예제에서 전체 코드 를 다운로드하십시오.
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);
}

주:

테이블 제한은 Oracle NoSQL Database Cloud Service에만 적용됩니다. 온프레미스 NoSQL 데이터베이스에 대한 제한이 설정된 경우 자동으로 무시됩니다.

하위 테이블 생성: 동일한 TableRequest 클래스와 메소드를 사용하여 DDL 문을 실행하여 하위 테이블을 생성합니다.

하위 테이블 생성 중:
  • 테이블의 전체 이름(name_parent_table.name_child_table)을 지정해야 합니다.
  • 하위 테이블이 상위 테이블의 제한을 상속하므로 테이블 제한을 명시적으로 설정할 필요는 없습니다.

예제에서 전체 코드 TableJoins.java를 다운로드하여 여기에서 상위-하위 테이블을 생성하는 방법을 이해하십시오.

borneo.TableRequest 클래스는 테이블을 생성하는 데 사용됩니다. borneo.NoSQLHandle.table_request()에 대한 모든 호출은 비동기적이므로 결과를 확인하고 작업이 완료될 때까지 기다리려면 borneo.TableResult.wait_for_completion()를 호출해야 합니다. table_request 및 해당 메소드에 대한 자세한 내용은 Oracle NoSQL Python SDK API Reference를 참조하십시오.

CreateTable.py 예제에서 전체 코드 를 다운로드하십시오.
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()))

주:

테이블 제한은 Oracle NoSQL Database Cloud Service에만 적용됩니다. 온프레미스 NoSQL 데이터베이스에 대한 제한이 설정된 경우 자동으로 무시됩니다.

하위 테이블 생성: 동일한 TableRequest 클래스와 메소드를 사용하여 DDL 문을 실행하여 하위 테이블을 생성합니다.

하위 테이블 생성 중:
  • 테이블의 전체 이름(name_parent_table.name_child_table)을 지정해야 합니다.
  • 하위 테이블이 상위 테이블의 제한을 상속하므로 테이블 제한을 명시적으로 설정할 필요는 없습니다.

TableJoins.py 예제에서 전체 코드 를 다운로드하십시오.

TableRequest 클래스는 테이블을 생성하는 데 사용됩니다. TableRequest로 지정된 작업의 실행은 비동기입니다. 이러한 작업은 장기적으로 실행될 수 있습니다. 이 요청은 Client.DoTableRequest() 작업의 입력으로 사용되며, 테이블이 원하는 상태에 도달할 때까지 폴링에 사용할 수 있는 TableResult를 반환합니다. TableRequest 클래스의 다양한 메소드에 대한 자세한 내용은 Oracle NoSQL Go SDK API Reference를 참조하십시오.

CreateTable.go 예제에서 전체 코드 를 다운로드하십시오.
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
}

주:

테이블 제한은 Oracle NoSQL Database Cloud Service에만 적용됩니다. 온프레미스 NoSQL 데이터베이스에 대한 제한이 설정된 경우 자동으로 무시됩니다.

하위 테이블 생성: 동일한 TableRequest 클래스와 메소드를 사용하여 DDL 문을 실행하여 하위 테이블을 생성합니다.

하위 테이블 생성 중:
  • 테이블의 전체 이름(name_parent_table.name_child_table)을 지정해야 합니다.
  • 하위 테이블이 상위 테이블의 제한을 상속하므로 테이블 제한을 명시적으로 설정할 필요는 없습니다.

TableJoins.go 예제에서 전체 코드 를 다운로드하십시오.

tableDDL 메소드를 사용하여 테이블을 생성할 수 있습니다. 이 메소드는 비동기적이며 Promise TableResult를 반환합니다. TableResult는 TableState, 이름, 스키마 및 TableLimits와 같은 DDL 작업의 상태를 포함하는 일반 JavaScript 객체입니다. 메소드 세부 정보는 NoSQLClient 클래스를 참조하십시오.

tableDDL 메소드는 TableDDLOpt 객체를 두번째 선택적 인수로 사용합니다. 테이블을 생성할 때 해당 TableLimits를 opt 인수의 일부로 지정해야 합니다. TableLimits는 읽기 단위, 쓰기 단위 및 기가바이트의 스토리지 크기로 테이블에 대한 최대 처리량 및 스토리지 용량을 지정합니다.

Download the full JavaScript code CreateTable.js from the examples here and the full TypeScript code CreateTable.ts from the examples here.

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);
}
위의 호출이 반환된 후 결과는 작업의 최종 상태를 반영합니다. 또는 전체 옵션을 사용하려면 위의 try-catch 블록에 있는 코드를 다음 코드 샘플로 대체하십시오.
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);

하위 테이블 생성: 동일한 TableRequest 클래스와 메소드를 사용하여 DDL 문을 실행하여 하위 테이블을 생성합니다.

하위 테이블 생성 중:
  • 테이블의 전체 이름(name_parent_table.name_child_table)을 지정해야 합니다.
  • 하위 테이블이 상위 테이블의 제한을 상속하므로 테이블 제한을 명시적으로 설정할 필요는 없습니다.

Download the full JavaScript code TableJoins.js from the examples here and the full TypeScript code TableJoins.ts from the examples here.

테이블을 생성하려면 ExecuteTableDDLAsync 또는 ExecuteTableDDLWithCompletionAsync 메소드를 사용합니다. 이 두 메소드는 모두 Task<TableResult>를 반환합니다. TableResult 인스턴스는 TableState 및 테이블 스키마와 같은 DDL 작업의 상태를 포함합니다. 이러한 방법에 대한 자세한 내용은 Oracle NoSQL Dotnet SDK API Reference를 참조하십시오.

CreateTable.cs 예제에서 전체 코드 를 다운로드하십시오.
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);  
}

주:

테이블 제한은 Oracle NoSQL Database Cloud Service에만 적용됩니다. 온프레미스 NoSQL 데이터베이스에 대한 제한이 설정된 경우 자동으로 무시됩니다.

하위 테이블 생성: 동일한 TableRequest 클래스와 메소드를 사용하여 DDL 문을 실행하여 하위 테이블을 생성합니다.

하위 테이블 생성 중:
  • 테이블의 전체 이름(name_parent_table.name_child_table)을 지정해야 합니다.
  • 하위 테이블이 상위 테이블의 제한을 상속하므로 테이블 제한을 명시적으로 설정할 필요는 없습니다.

TableJoins.cs 예제에서 전체 코드 를 다운로드하십시오.