このトピックでは、自動インクリメント主キー列を構成する方法について説明します。パーティションキーではない主キー列を自動インクリメント主キー列として指定できます。自動インクリメント主キー列を含むテーブルにデータを書き込む場合、自動インクリメント主キー列の値を指定する必要はありません。Tablestore は、自動インクリメント主キー列の値を自動的に生成します。自動インクリメント主キー列に対して生成される値は一意であり、パーティション内で単調に増加します。
前提条件
OTSClient インスタンスが初期化されていること。詳細については、OTSClient インスタンスを初期化するを参照してください。
自動インクリメント主キー列を構成する
テーブルを作成するときに、パーティションキーではない主キー列を自動インクリメント主キー列として指定します。
INTEGER 型の主キー列のみを自動インクリメント主キー列として指定できます。自動インクリメント主キー列に対して生成される各値は、LONG 型の 64 ビット符号付き整数です。
自動インクリメント主キー列を含むテーブルにデータを書き込む場合、自動インクリメント主キー列の値を指定する必要はありません。自動インクリメント主キー列の値をプレースホルダーに設定するだけで済みます。
テーブルにデータが書き込まれた後に自動インクリメント主キー列の値を取得する場合は、ReturnType パラメーターを RT_PK に設定できます。
テーブルからデータを読み取る場合は、すべての主キー列の値を指定する必要があります。すべての主キー列の値を取得するには、PutRow、UpdateRow、または BatchWriteRow 操作を呼び出すときに ReturnType パラメーターを RT_PK に設定します。
データテーブルからデータを読み取る場合は、完全な主キーが記録されている場合、主キーに基づいてデータを読み取ることができます。詳細については、データの単一行を読み取るおよび複数のデータ行を一度に読み取るを参照してください。自動インクリメント主キー列の値が記録されていない場合は、最初の主キー列の値に基づいてデータの範囲を決定してから、データを読み取る必要があります。詳細については、主キー値が指定された範囲内にあるデータを読み取るを参照してください。
説明既存の行を更新する場合に自動インクリメント主キー列の値を記録していない場合は、データを更新する前にGetRange操作を呼び出して行の主キー情報を取得します。
例
CreateTable、PutRow、UpdateRow、または BatchWriteRow 操作を呼び出すときに、自動インクリメント主キー列機能を使用できます。
テーブルを作成する
テーブルを作成するときにパーティションキーではない主キー列を自動インクリメント主キー列として指定するには、主キー列の属性を PK_AUTO_INCR に設定するだけで済みます。
次のサンプルコードは、自動インクリメント主キー列を含むデータテーブルを作成する方法の例を示しています。この例では、データテーブルには INTEGER 型の gid と INTEGER 型の uid の 2 つの主キー列が含まれています。gid 列はパーティションキーであり、uid 列は自動インクリメント主キー列です。
table_name = '<TABLE_NAME>' def create_table(client): # INTEGER 型の gid と INTEGER 型の uid という主キー列を含むテーブルを作成します。次に、uid 主キー列を自動インクリメント主キー列として指定します。 schema_of_primary_key = [('gid', 'INTEGER'), ('uid', 'INTEGER', PK_AUTO_INCR)] table_meta = TableMeta(table_name, schema_of_primary_key) table_options = TableOptions() reserved_throughput = ReservedThroughput(CapacityUnit(0, 0)) client.create_table(table_meta, table_options, reserved_throughput) print ('Table has been created.')
データを書き込む
自動インクリメント主キー列を含むテーブルにデータを書き込む場合、自動インクリメント主キー列の値を指定する必要はありません。主キー列の属性を PK_AUTO_INCR に設定するだけで済みます。
次のサンプルコードは、テーブルにデータの行を書き込み、すべての主キー列の値と消費される予約済み読み取りおよび書き込みキャパシティユニット (CU) を返す方法の例を示しています。
table_name = '<TABLE_NAME>' def put_row(client): # 書き込む行の主キー情報を指定します。この例では、gid 列は 1 に設定され、uid 列は自動インクリメント主キー列です。uid を PK_AUTO_INCR に設定する必要があります。設定しないと、エラーが返されます。 primary_key = [('gid',1), ('uid', PK_AUTO_INCR)] # 書き込む行の属性列を指定します。 attribute_columns = [('name','John'), ('mobile',1390000****), ('address','China'), ('age',20)] row = Row(primary_key, attribute_columns) # データを書き込み、消費された CU の数を返しますが、主キー情報は返しません。 #consumed, return_row = client.put_row(table_name, row) #print ('Write succeed, consume %s write cu.' % consumed.write) # データを書き込み、消費された CU の数と主キー情報を返します。 consumed, return_row = client.put_row(table_name, row, return_type = ReturnType.RT_PK) print ('Write succeed, consume %s write cu.' % consumed.write) print ('Primary key:%s' % return_row.primary_key)