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

Tablestore:自動インクリメント主キー列

最終更新日:Jun 26, 2025

このトピックでは、Python 用 Tablestore SDK を使用して、データテーブルの自動インクリメント主キー列を設定する方法について説明します。また、自動インクリメント主キー列にデータを書き込み、自動インクリメント主キー列に生成された値を取得する方法についても説明します。

使用上の注意

  • Python 用 Tablestore SDK V4.0.0 以降では、自動インクリメント主キー列機能がサポートされています。

  • 自動インクリメント主キー列の値は一意であり、単調に増加しますが、同じパーティションキー値を共有するパーティション内で常に連続しているとは限りません。

前提条件

クライアントが初期化されていること。詳細については、「Tablestore クライアントを初期化する」をご参照ください。

自動インクリメント主キー列を設定する

データテーブルを作成するときに、パーティションキーではない主キー列を自動インクリメント主キー列として指定できます。既存のデータテーブルでは、自動インクリメント主キー列を設定することはできません。

説明

パーティションキーではない主キー列を自動インクリメント主キー列として指定できるのは、主キー列のデータ型が Integer の場合のみです。データテーブルは、最大で 1 つの自動インクリメント主キー列を持つことができます。自動インクリメント主キー列に生成される値は、64 ビット符号付き long 整数です。

サンプルコード

次のサンプルコードは、test_table という名前のデータテーブルを作成します。テーブルの主キーには、パーティションキー id と自動インクリメント主キー列 incr が含まれています。

schema_of_primary_key = [('id', 'STRING'), ('incr', 'INTEGER', PK_AUTO_INCR)]
table_meta = TableMeta('test_table', schema_of_primary_key)
table_options = TableOptions()
reserved_throughput = ReservedThroughput(CapacityUnit())
try:
    client.create_table(table_meta, table_options, reserved_throughput)
    print("テーブルの作成に成功しました。") # テーブルの作成に成功しました。
except Exception as e:
    print("テーブルの作成に失敗しました。 %s" % e) # テーブルの作成に失敗しました。

データを書き込む

自動インクリメント主キー列にデータを書き込むときは、自動インクリメント主キー列の値をプレースホルダーに設定するだけで済みます。データのクエリと更新のために自動インクリメント主キー列の生成された値を取得する場合は、put_row の戻り値の型を RT_PK に設定する必要もあります

サンプルコード

次のサンプルコードは、test_table テーブルにデータの行を書き込み、書き込まれた行データの主キー情報を取得して出力します。

# 主キーを構成します。
primary_key = [('id', 'row1'), ('incr', PK_AUTO_INCR)]

# 書き込む行データを構成します。
attribute_columns = [('col1', 'val1')]
row = Row(primary_key, attribute_columns)

try:
    # putRow メソッドを呼び出して行データを書き込み、戻り値の型を RT_PK(書き込まれた行データの主キー情報を返す)に設定します。
    consumed, return_row = client.put_row('test_table', row, return_type=ReturnType.RT_PK)

    # 読み取りと書き込みの CU 消費量
    print('読み取り CU コスト: %s' % consumed.read) # 読み取り CU コスト
    print('書き込み CU コスト: %s' % consumed.write) # 書き込み CU コスト

    # 返された主キー情報を取得して出力します。戻り値の型が RT_PK に設定されていない場合、主キー情報はデフォルトでは返されません。
    if return_row is not None:
        print('主キー: %s' % return_row.primary_key) # 主キー
except Exception as e:
    print("書き込みに失敗しました。 %s" % e) # 書き込みに失敗しました。