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

Tablestore:データテーブルの作成

最終更新日:Dec 28, 2024

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

使用方法に関する注意事項

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

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

前提条件

API操作

"""
指定されたテーブルスキーマに基づいてデータテーブルを作成します。
データテーブルを作成した後、データテーブル内のパーティションをロードするために数秒かかります。パーティションがロードされた後にのみ、データテーブルに対する操作を実行できます。
戻り値:なし。
"""
def create_table(self, table_meta, table_options, reserved_throughput, secondary_indexes=[])

パラメーター

パラメーター

説明

table_meta (必須)

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

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

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

    • 主キー列のタイプは、String、Integer、またはBinaryです。

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

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

  • defined_columns:このパラメーターはオプションであり、データテーブルの事前定義列を指定します。事前定義列のタイプは、String、Integer、Binary、Double、またはBooleanです。

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

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

table_options (必須)

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

  • time_to_live:このパラメーターはオプションであり、データテーブル内のデータの保持期間を指定します。単位:秒。データの保持期間がこのパラメーターの値を超えると、データは期限切れになります。Tablestoreは期限切れのデータを自動的に削除します。

    デフォルト値:-1。-1は、データテーブル内のデータが期限切れにならないことを示します。このパラメーターは、86400以上または-1に設定できます。86400は1日を意味します。

    重要

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

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

    デフォルト値:1。1は、各属性列の最新バージョンのみが保持されることを示します。

    重要

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

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

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

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

    重要

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

secondary_indexes (オプション)

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

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

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

    重要

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

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

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

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

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

reserved_throughput (必須)

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

重要

ハイパフォーマンスインスタンスのデータテーブルに対してのみ、予約読み取り/書き込みスループットを0以外の値に設定できます。

データテーブルの作成

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

# データテーブルの主キー列のスキーマを作成します。これには、主キー列の数、名前、およびタイプが含まれます。
# 最初の主キー列の名前はpk0で、タイプはIntegerです。最初の主キー列はパーティションキーです。
# 2番目の主キー列の名前はpk1で、タイプはIntegerです。この例では、データ型はIntegerに設定されています。データ型をStringまたはBinaryに設定することもできます。
schema_of_primary_key = [('pk0', 'INTEGER'), ('pk1', 'INTEGER')]

# データテーブルの名前と主キー列のスキーマに基づいて、tableMetaインスタンスを作成します。
table_meta = TableMeta('<table_name>', schema_of_primary_key)

# TableOptionsインスタンスを作成します。time_to_liveパラメーターを31536000に設定して、期限切れのデータを自動的に削除します。次に、max_versionパラメーターを3に、max_time_deviationパラメーターを86400(1日)に設定します。
table_options = TableOptions(31536000, 3, 86400)

# 予約読み取りスループットと予約書き込みスループットを0に設定します。
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))

# クライアントのcreate_table操作を呼び出します。例外がスローされない場合、データテーブルが作成されます。
try:
    ots_client.create_table(table_meta, table_options, reserved_throughput)
    print("create table succeeded.")
# 例外がスローされた場合、データテーブルの作成に失敗します。例外を処理します。
except Exception:
    print("create table failed.")

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

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

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

# データテーブルの主キー列のスキーマを作成します。これには、主キー列の数、名前、およびタイプが含まれます。
schema_of_primary_key = [('gid', 'INTEGER'), ('uid', 'STRING')]

# データテーブルの事前定義列を指定します。
defined_columns = [('i', 'INTEGER'), ('bool', 'BOOLEAN'), ('d', 'DOUBLE'), ('s', 'STRING'), ('b', 'BINARY')]

# データテーブルの名前と主キー列のスキーマに基づいて、tableMetaインスタンスを作成します。
table_meta = TableMeta('<table_name>', schema_of_primary_key, defined_columns)

# TableOptionsインスタンスを作成します。time_to_liveパラメーターを-1に設定します。これは、データが期限切れにならないことを示します。次に、max_versionパラメーターを1に設定します。
table_option = TableOptions(-1, 1)

# 予約読み取りスループットと予約書き込みスループットを0に設定します。
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))

# セカンダリインデックスの名前、主キー列、および属性列を指定します。デフォルトでは、グローバルセカンダリインデックスが作成されます。
secondary_indexes = [
    SecondaryIndexMeta('index1', ['i', 's'], ['bool', 'b', 'd']),
]

# クライアントのcreate_table操作を呼び出します。例外がスローされない場合、データテーブルが作成されます。
ots_client.create_table(table_meta, table_option, reserved_throughput, secondary_indexes)

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

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

# データテーブルの主キー列のスキーマを作成します。これには、主キー列の数、名前、およびタイプが含まれます。
schema_of_primary_key = [('gid', 'INTEGER'), ('uid', 'STRING')]

# データテーブルの事前定義列を指定します。
defined_columns = [('i', 'INTEGER'), ('bool', 'BOOLEAN'), ('d', 'DOUBLE'), ('s', 'STRING'), ('b', 'BINARY')]

# データテーブルの名前と主キー列のスキーマに基づいて、tableMetaインスタンスを作成します。
table_meta = TableMeta('<table_name>', schema_of_primary_key, defined_columns)

# TableOptionsインスタンスを作成します。time_to_liveパラメーターを-1に設定します。これは、データが期限切れにならないことを示します。次に、max_versionパラメーターを1に設定します。
table_option = TableOptions(-1, 1)

# 予約読み取りスループットと予約書き込みスループットを0に設定します。
reserved_throughput = ReservedThroughput(CapacityUnit(0, 0))

# セカンダリインデックスの名前、主キー列、インデックス列、およびインデックスタイプを指定します。index_typeパラメーターをLOCAL_INDEXに設定します。これは、ローカルセカンダリインデックスが作成されることを示します。
secondary_indexes = [
    SecondaryIndexMeta('index1', ['gid', 's'], ['bool', 'b', 'd'],index_type= SecondaryIndexType.LOCAL_INDEX),
]

# クライアントのcreate_table操作を呼び出します。例外がスローされない場合、データテーブルが作成されます。
ots_client.create_table(table_meta, table_option, reserved_throughput, secondary_indexes)                    

関連情報