すべてのプロダクト
Search
ドキュメントセンター

Tablestore:データテーブルを作成する

最終更新日:Dec 28, 2024

このトピックでは、Tablestore SDK for Node.js を使用して、パラメータとサンプルコードを使用してデータテーブルを作成する方法について説明します。データテーブルを作成する際には、データテーブルのスキーマ情報と構成情報を指定する必要があります。高性能インスタンスのデータテーブルに予約読み取り/書き込みスループットを指定できます。

使用上の注意

  • データテーブルを作成した後、データテーブルのロードに数秒かかります。この期間中は、データテーブルに対するすべての読み取りおよび書き込み操作は失敗します。データテーブルがロードされた後に、データテーブルに対する操作を実行してください。

  • E コマース Web サイトのアイテム ID やフォーラムの投稿 ID など、自動インクリメント主キー列が必要なシナリオでは、データテーブルの作成時に自動インクリメント主キー列を指定できます。詳細については、自動インクリメント主キー列を構成するをご参照ください。

前提条件

API 操作

/**
 * 説明: 指定されたテーブルスキーマに基づいてデータテーブルを作成します。
 * データテーブルを作成した後、データテーブル内のパーティションをロードするために数秒かかります。パーティションがロードされた後にのみ、データテーブルに対する操作を実行できます。
 */
createTable(params, callback)

パラメータ

次の表は、paramsに含まれるパラメータについて説明しています。

パラメータ

説明

tableMeta (必須)

データテーブルに関するスキーマ情報。次のパラメータを構成して、スキーマ情報を指定できます。

  • tableName: このパラメータは必須であり、データテーブルの名前を指定します。

  • primaryKey: このパラメータは必須であり、データテーブルの主キーのスキーマを指定します。詳細については、コアコンポーネントをご参照ください。

    • 主キー列のタイプは、String、Integer、または Binary にすることができます。

    • 1 ~ 4 つの主キー列を指定できます。Tablestore は、主キー列が指定された順序で主キーを生成します。デフォルトでは、データテーブルの行は主キーによって降順にソートされます。

    • 最初の主キー列はパーティションキーです。

  • definedColumn: このパラメータはオプションであり、データテーブルの定義済み列を指定します。定義済み列のタイプは、String、Integer、Double、または Boolean にすることができます。

    説明
    • 定義済み列は、データクエリを高速化するためにデータテーブルに作成されたセカンダリインデックスの主キー列または定義済み列として使用できる、主キー以外の列です。

    • データテーブルを作成するときに属性列のスキーマを指定する必要はありません。データテーブルにデータを書き込むときに、行ごとに異なる数の属性列と異なる属性列名を指定できます。

tableOptions (必須)

データテーブルに関する構成情報。次のパラメータを構成して、構成情報を指定できます。

  • timeToLive: このパラメータは必須であり、データテーブル内のデータの保持期間を指定します。単位:秒。

    このパラメータは、86400 以上または -1 に設定できます。値 86400 は 1 日を指定します。値 -1 は、データが期限切れにならないことを指定します。

    重要

    データテーブルの検索インデックスまたはセカンダリインデックスを作成する場合、このパラメータを -1 に設定するか、allowUpdate パラメータを false に設定する必要があります。

  • maxVersions: このパラメータは必須であり、各属性列のデータに保持できる最大バージョン数を指定します。

    重要

    データテーブルの検索インデックスまたはセカンダリインデックスを作成する場合、このパラメータを 1 に設定する必要があります。

  • maxTimeDeviation: このパラメータはオプションであり、現在のシステム時刻と書き込まれたデータのタイムスタンプの最大差を指定します。単位:秒。

    デフォルト値:86400。属性列のデータの有効なバージョン範囲は、左閉右開区間であり、次の式を使用して計算されます。有効なバージョン範囲 = [max{データ書き込み時刻 - 最大バージョンオフセット、データ書き込み時刻 - TTL 値}、データ書き込み時刻 + 最大バージョンオフセット)

  • allowUpdate: このパラメータはオプションであり、データテーブルの更新操作を許可するかどうかを指定します。デフォルト値:true。

    重要

    データテーブルに作成された検索インデックスの Time To Live (TTL) 機能を使用する場合、このパラメータを false に設定する必要があります。データテーブルのデータを更新する場合は、PutRow 操作を呼び出してデータテーブルにデータを書き込むことができます。

indexMetas (オプション)

インデックスのリスト。各インデックスについて、次のパラメータを構成できます。

  • name: このパラメータは必須であり、インデックスの名前を指定します。

  • primaryKey: このパラメータは必須であり、インデックスの主キー列を指定します。インデックスの主キー列は、インデックスが作成されたデータテーブルの主キー列と定義済み列の組み合わせです。

    重要

    ローカルセカンダリインデックスを作成する場合、インデックスの最初の主キー列は、データテーブルの最初の主キー列である必要があります。

  • definedColumn: このパラメータはオプションであり、インデックスの定義済み列を指定します。インデックスの定義済み列は、インデックスが作成されたデータテーブルの定義済み列の組み合わせです。

  • indexType: このパラメータはオプションであり、インデックスのタイプを指定します。有効な値:

    • IT_GLOBAL_INDEX: グローバルセカンダリインデックス。これはデフォルト値です。

    • IT_LOCAL_INDEX: ローカルセカンダリインデックス。

  • indexUpdateMode: このパラメータはオプションであり、インデックスの更新モードを指定します。有効な値:

    • IUM_ASYNC_INDEX: 非同期更新モード。これはデフォルト値です。

      説明

      グローバルセカンダリインデックス機能を使用する場合、indexUpdateMode パラメータを IUM_ASYNC_INDEX に設定する必要があります。

    • IUM_SYNC_INDEX: 同期更新モード。

      説明

      ローカルセカンダリインデックス機能を使用する場合、indexUpdateMode パラメータを IUM_SYNC_INDEX に設定する必要があります。

reservedThroughput (必須)

予約読み取り/書き込みスループット。単位:キャパシティユニット (CU)。デフォルト値:0。

重要

高性能インスタンスのデータテーブルの場合のみ、予約読み取り/書き込みスループットを 0 以外の値に設定できます。

streamSpecification (オプション)

データテーブルに関する Stream 構成情報。次のパラメータを構成して、Stream 構成情報を指定できます。

  • enableStream: このパラメータはオプションであり、Stream 機能を有効にするかどうかを指定します。デフォルト値:false。値 false は、Stream 機能が無効になっていることを指定します。

  • expirationTime: このパラメータはオプションであり、増量ログの有効期間を指定します。単位:時間。最大値:168。値 168 は 7 日を指定します。

    説明

    Stream 機能が有効になっている場合は、expirationTime パラメータを構成する必要があります。

データテーブルを作成する

次のサンプルコードは、データテーブルを作成する方法の例を示しています。

var params = {
  tableMeta: {
    // データテーブルの名前を指定します。
    tableName: '<TABLE_NAME>',
    // データテーブルの主キー列を指定します。テーブルには、String タイプの pk1 主キー列と Integer タイプの pk2 主キー列が含まれています。pk1 主キー列はパーティションキーです。pk2 主キー列は自動インクリメント主キー列です。
    primaryKey: [
      {
        name: 'pk1',
        type: 'STRING'
      },
      {
        name: 'pk2',
        type: 'INTEGER',
        option: 'AUTO_INCREMENT'
      }
    ]
  },
  tableOptions: {
    // データテーブル内のデータの Time To Live (TTL) を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
    timeToLive: -1,
    // データテーブルの各属性列のデータに保持できる最大バージョン数を指定します。この例では、各属性列の最新バージョンのみを保持できます。
    maxVersions: 1,
    // 現在のシステム時刻と書き込まれたデータのタイムスタンプの最大差を指定します。この例では、最大差は 86,400 秒 (1 日) に設定されています。
    maxTimeDeviation: 86400
  },
  // 予約読み取り/書き込みスループットを指定します。キャパシティインスタンスのデータテーブルの場合、予約読み取り/書き込みスループットは 0 のみに設定できます。高性能インスタンスのデータテーブルの場合、予約読み取り/書き込みスループットを 0 以外の値に設定できます。
  reservedThroughput: {
    capacityUnit: {
      read: 0,
      write: 0
    }
  }
};

client.createTable(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

データテーブルとセカンダリインデックスを作成する

データテーブルとグローバルセカンダリインデックスを作成する

次のサンプルコードは、データテーブルとデータテーブルのグローバルセカンダリインデックスを同時に作成する方法の例を示しています。

var params = {
  tableMeta: {
    // データテーブルの名前を指定します。
    tableName: '<TABLE_NAME>',
    // データテーブルの主キー列を指定します。データテーブルには、String タイプの pk1 主キー列と Integer タイプの pk2 主キー列が含まれています。
    primaryKey: [
      {
        name: 'pk1',
        type: 'STRING'
      },
      {
        name: 'pk2',
        type: 'INTEGER'
      }
    ],
    // データテーブルの定義済み列を指定します。データテーブルの定義済み列は、String タイプの defcol1 列と Integer タイプの defcol2 列です。
    definedColumn: [
      {
        name: 'defcol1',
        type: TableStore.DefinedColumnType.DCT_STRING
      },
      {
        name: 'defcol2',
        type: TableStore.DefinedColumnType.DCT_INTEGER
      }
    ],
  },
  tableOptions: {
    // データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
    timeToLive: -1,
    // データテーブルの各属性列のデータに保持できる最大バージョン数を指定します。この例では、各属性列の最新バージョンのみを保持できます。
    maxVersions: 1
  },
  // 予約読み取り/書き込みスループットを指定します。キャパシティインスタンスのデータテーブルの場合、予約読み取り/書き込みスループットは 0 のみに設定できます。高性能インスタンスのデータテーブルの場合、予約読み取り/書き込みスループットを 0 以外の値に設定できます。
  reservedThroughput: {
    capacityUnit: {
      read: 0,
      write: 0
    }
  },
  indexMetas: [
    // デフォルトでは、グローバルセカンダリインデックスが作成されます。
    {
      // インデックスの名前を指定します。
      name: '<INDEX_NAME>',
      // インデックスに主キー列を追加します。インデックスの主キー列は、defcol1、pk1、および pk2 です。
      primaryKey: ['defcol1', 'pk1', 'pk2'],
      // インデックスに定義済み列を追加します。インデックスの定義済み列は defcol2 です。
      definedColumn: ['defcol2']
    }
  ]
};

client.createTable(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

データテーブルとローカルセカンダリインデックスを作成する

次のサンプルコードは、データテーブルとデータテーブルのローカルセカンダリインデックスを同時に作成する方法の例を示しています。

var params = {
  tableMeta: {
    // データテーブルの名前を指定します。
    tableName: '<TABLE_NAME>',
    // データテーブルの主キー列を指定します。データテーブルには、String タイプの pk1 主キー列と Integer タイプの pk2 主キー列が含まれています。
    primaryKey: [
      {
        name: 'pk1',
        type: 'STRING'
      },
      {
        name: 'pk2',
        type: 'INTEGER'
      }
    ],
    // データテーブルの定義済み列を指定します。データテーブルの定義済み列は、String タイプの defcol1 列と Integer タイプの defcol2 列です。
    definedColumn: [
      {
        name: 'defcol1',
        type: TableStore.DefinedColumnType.DCT_STRING
      },
      {
        name: 'defcol2',
        type: TableStore.DefinedColumnType.DCT_INTEGER
      }
    ],
  },
  tableOptions: {
    // データテーブル内のデータの TTL を指定します。値 -1 は、データテーブル内のデータが期限切れにならないことを指定します。
    timeToLive: -1,
    // データテーブルの各属性列のデータに保持できる最大バージョン数を指定します。この例では、各属性列の最新バージョンのみを保持できます。
    maxVersions: 1,
  },
  // 予約読み取り/書き込みスループットを指定します。キャパシティインスタンスのデータテーブルの場合、予約読み取り/書き込みスループットは 0 のみに設定できます。高性能インスタンスのデータテーブルの場合、予約読み取り/書き込みスループットを 0 以外の値に設定できます。
  reservedThroughput: {
    capacityUnit: {
      read: 0,
      write: 0
    }
  },
  indexMetas: [
    // ローカルセカンダリインデックスの構成を指定します。
    {
      // インデックスの名前を指定します。
      name: '<INDEX_NAME>',
      // インデックスに主キー列を追加します。インデックスの主キー列は、pk1、defcol1、および pk2 です。
      primaryKey: ['pk1', 'defcol1', 'pk2'],
      // インデックスに定義済み列を追加します。インデックスの定義済み列は defcol2 です。
      definedColumn: ['defcol2'],
      // インデックスタイプを IT_LOCAL_INDEX に設定します。
      indexType: TableStore.IndexType.IT_LOCAL_INDEX,
      // インデックス更新モードを IUM_SYNC_INDEX に設定します。indexType パラメータを IT_LOCAL_INDEX に設定する場合は、indexUpdateMode パラメータを IUM_SYNC_INDEX に設定する必要があります。
      indexUpdateMode: TableStore.IndexUpdateMode.IUM_SYNC_INDEX
    }
  ]
};

client.createTable(params, function (err, data) {
  if (err) {
    console.log('error:', err);
    return;
  }
  console.log('success:', data);
});

参照