Table Store SDK には、PutRow、GetRow、UpdateRow、DeleteRow の単一行操作APIが用意されています。
PutRow
指定された行にデータを挿入します。
API
"""
説明: この操作は単一行のデータを書き込みます。 操作によって消費された容量ユニットを返します。
table_name は、テーブルの名前です。
row は、プライマリキー列と属性列を含む行データを示します。
condition は、操作が実行される前にチェックされるべき条件を示します。 条件が満たされると、操作が実行されます。 これは tablestore.metadata.Condition クラスのインスタンスです。 現在、この関数は行の存在チェックのみをサポートしています。 チェック条件には、'IGNORE'、'EXPECT_EXIST' および 'EXPECT_NOT_EXIST' があります。
return_type は、戻り値の型を示します。 これは tablestore.metadata.ReturnType クラスのインスタンスです。 現在、PrimaryKey の戻り値のみがサポートされています。これは通常、プライマリキー列の自動増分で使用されます。
戻り値: 操作によって消費された CapacityUnits、および戻される行データです。
consumed は、消費された CapacityUnits を示します。 これは tablestore.metadata.CapacityUnit クラスのインスタンスです。
return_row は、戻された行データを示します。これにはプライマリキーと属性の列が含まれます。
"""
def put_row(self, table_name, row, condition = None, return_type = None)
例
データ行を挿入します。
## プライマリキーの最初のプライマリキー列は 1 の整数値で gid です。 2 番目のプライマリキー列は、整数値 101 で uid です。
primary_key = [('gid',1), ('uid',101)]
## 4 つの属性列があります。
## 最初の属性列は "name" で、文字列値は "John" です。 バージョンは指定されず、現在のシステム時刻がバージョンとして使用されます。
## 2 番目の属性列は "mobile" で、整数値は 15100000000 です。 バージョンは指定されず、現在のシステム時刻がバージョンとして使用されます。
## 3 番目の属性列は "address" で、バイナリ値は "China" です。 バージョンは指定されず、現在のシステム時刻がバージョンとして使用されます。
## 4 番目の列は "age" で、値は 29.7 です。 バージョンは 1498184687 です。
attribute_columns = [('name','John'), ('mobile',15100000000),('address', bytearray('China')),('female', False), ('age', 29.7, 1498184687000)]
## primary_key と attribute_columns を使った Row の構築
row = Row(primary_key, attribute_columns)
# 行条件: 期待行が存在しません。 期待される行が存在する場合は、エラー "Condition Update Update Failed" が戻されます。
condition = Condition(RowExistenceExpectation.EXPECT_NOT_EXIST)
try :
# put_row メソッドを呼び出します。 ReturnType が指定されていない場合、return_row は None です。
consumed, return_row = client.put_row(table_name, row, condition)
#このリクエストによって消費された書き込み CU が表示されます。
print ('put row succeed, consume %s write cu.' % consumed.write)
# クライアントが異常です。これは通常、誤ったパラメーターまたはネットワークエラーが原因です。
except OTSClientError as e:
print "put row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message())
# サーバーが異常です。これは通常、誤ったパラメーターまたはネットワークエラーが原因です。
except OTSServiceError as e:
print "put row failed, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id())
-
RowExistenceExpectation.IGNORE は、指定された行が存在するかどうかに関係なく、新しいデータが挿入されることを示します。 挿入されたデータが既存のデータと同じ場合、既存のデータは上書きされます。
-
RowExistenceExpectation.EXPECT_EXIST は、指定された行が存在する場合にのみ新しいデータが挿入されることを示します。 既存のデータは上書きされます。
-
RowExistenceExpectation.EXPECT_NOT_EXIST は、指定された行が存在しない場合にのみデータが挿入されることを示します。
- 上記のサンプルプログラムでは、属性列 "age" のバージョンは 1498184687000 で、値は 2017年6月23日 です。 現在時刻から max_time_deviation の値 (テーブル作成時に指定) を引いた値が 1498184687000 より大きい場合、PutRow 操作は無効になります。
-
操作が成功した場合、例外はスローされません。操作が失敗した場合は、例外がスローされます。
コードの詳細は、『PutRow@GitHub』をご参照ください。
GetRow
指定されたプライマリキーに基づいて単一のデータ行を読み取ります。
API
"""
説明: この操作は単一行のデータを読み取ります。
table_name は、テーブルの名前です。
primary_key は、プライマリキーを示します。型は dict です。
columns_to_get は、リスト形式で読み込む列の名前を示すオプションのパラメーターです。 入力しないと、すべての列が読み取られます。
column_filter は、オプションのパラメーターで、指定された条件を満たす行を読み込むことを示します。
max_version は、オプションのパラメーターで、読み込みバージョンの最大数を示します。
time_range は、オプションのパラメーターで、指定された範囲内のバージョンを読むこと、または指定されたバージョンを読むことを示します。 time_range と max_version は相互に排他的です。
戻り値: この操作で消費された CapacityUnits、プライマリキー列、および属性列です。
consumed は、消費された CapacityUnits を示します。 これは tablestore.metadata.CapacityUnit クラスのインスタンスです。
return_row は、リストデータ型の主キー列と属性列を含む行データを示します、たとえば、 [( 'PK0', value0), ( 'PK1', value1)] です。
next_token は、ワイド行読み込みの場合、次の読み込み操作の位置を示します。 値はバイナリ形式でエンコードされています。
"""
def get_row(self, table_name, primary_key, columns_to_get=None,
column_filter=None, max_version=None, time_range=None,
start_column=None, end_column=None, token=None):
例
データ行を読み取ります。
# プライマリキーの最初の列は整数値 1 で uid です。 2 列目は整数値 101 で gid です。
primary_key = [('uid',1), ('gid',101)]
# 返される属性列: name、growth および type columns_to_get が [] の場合、すべての属性列が返されます。
columns_to_get = ['name', 'growth', 'type']
# 列フィルタを追加: この列は、成長列の値が 0.9 ではない場合に返されます。
cond = CompositeColumnCondition(LogicalOperator.AND)
cond.add_sub_condition(SingleColumnCondition("growth", 0.9, ComparatorType.NOT_EQUAL))
cond.add_sub_condition(SingleColumnCondition("name", 'Hangzhou', ComparatorType.EQUAL))
try:
# get_row クエリインターフェイスを呼び出します。 最後のパラメーター 1 は、1 つのバージョンの値だけを返す必要があることを示します。
consumed, return_row, next_token = client.get_row(table_name, primary_key, columns_to_get, cond, 1)
print ('Read succeed, consume %s read cu.' % consumed.read)
print ('Value of primary key: %s' % return_row.primary_key)
print ('Value of attribute: %s' % return_row.attribute_columns)
for att in return_row.attribute_columns:
# 各列のキー、値、およびバージョンを表示します。
print ('name:%s\tvalue:%s\ttimestamp:%d' % (att[0], att[1], att[2]))
# クライアントが異常です。これは通常、誤ったパラメーターまたはネットワークエラーが原因です。
except OTSClientError as e:
print "get row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message())
# サーバが異常です。これは通常、誤ったパラメーターまたはネットワークエラーが原因です。
except OTSServiceError as e:
print "get row failed, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id())
GetRow@GitHubでコードの詳細を取得します。
UpdateRow
指定された行のデータを更新します。 指定された行が存在しない場合は、新しい行が追加されます。 指定された行が存在する場合は、指定された列の値は、リクエスト内容に合わせて、追加、変更、又は削除されます。
API
"""
説明: この操作は単一行のデータを更新します。
`` table_name`` はテーブルの名前です。
``row`` はプライマリキー列 (リスト型) と属性列 (辞書型) を含む更新された行データを示します。
``condition`` は操作が実行される前にチェックされるべき条件を示します。 条件が満たされると、操作が実行されます。 これは tablestore.metadata.Condition クラスのインスタンスです。
現在、この関数は行の存在チェックのみをサポートしています。 チェック条件には、'IGNORE'、'EXPECT_EXIST' および 'EXPECT_NOT_EXIST' があります。
``return_type`` は戻り値の型を示します。 これは tablestore.metadata.ReturnType クラスのインスタンスです。 現在、PrimaryKey の戻り値のみがサポートされています。これは通常、主キー列の自動増分で使用されます。
戻り値: 操作によって消費された CapacityUnits および返される行データ (return_rowによって示される)。
consumed は CapacityUnits が消費されたことを示します。 これは tablestore.metadata.CapacityUnit クラスのインスタンスです。
return_row は、返される行データを示します。
"""
def update_row(self, table_name, row, condition, return_type = None)
例
データ行を更新します。
# プライマリキーの最初の列は整数値 1 で uid です。 2 列目は整数値 101 で gid です。
primary_key = [('uid',1), ('gid',101)]
# アップデートには、PUT、DELETE、DELETE_ALL の3つの部分があります。
#PUT: 2 列追加します。 最初の列は "name"、値は David です。 2列目は "address" で、値は Hongkong です。
#DELETE: バージョン 1488436949003 の "address" 列の値を削除します。
#DELETE_AL: "mobile" 列と "age" 列のすべてのバージョンの値を削除します。
update_of_attribute_columns = {
'PUT' : [('name','David'), ('address','Hongkong')],
'DELETE' : [('address', None, 1488436949003)],
'DELETE_ALL' : [('mobile'), ('age')],
}
row = Row(primary_key, update_of_attribute_columns)
# 行条件は Ignore です。これは、指定された行が存在するかどうかに関係なくデータが更新されることを示します。
condition = Condition(RowExistenceExpectation.IGNORE, SingleColumnCondition("age", 20, ComparatorType.EQUAL)) # update row on\
ly when this row is exist
try:
consumed, return_row = client.update_row(table_name, row, condition)
# クライアントが異常です。これは通常、誤ったパラメーターまたはネットワークエラーが原因です。
except OTSClientError as e:
print "update row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message())
# サーバーが異常です。これは通常、誤ったパラメーターまたはネットワークエラーが原因です。
except OTSServiceError as e:
print "update row failed, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id())
UpdateRow@GitHubでコードの詳細を取得します。
DeleteRow
API
"""
説明: この操作は単一行のデータを削除します。
`` table_name`` はテーブルの名前です。
``row`` は行データを示し、delete_row の場合はプライマリキーのみを含みます。
``condition`` は操作が実行される前にチェックされるべき条件を示します。 条件が満たされると、操作が実行されます。 これは tablestore.metadata.Condition クラスのインスタンスです。
現在、この関数は行の存在チェックのみをサポートしています。 チェック条件には、'IGNORE'、'EXPECT_EXIST' および 'EXPECT_NOT_EXIST' があります。
戻り値 操作によって消費された CapacityUnits、および返される行データ (return_rowによって示されます)。
consumedは CapacityUnits が消費されたことを示します。 これは tablestore.metadata.CapacityUnit クラスのインスタンスです。
return_row は、返される行データを示します。
"""
def delete_row(self, table_name, row, condition, return_type = None):
例
データ行を削除します。
primary_key = [('gid',1), ('uid','101')]
row = Row(primary_key)
try:
consumed, return_row = client.delete_row(table_name, row, None)
# クライアントが異常です。これは通常、誤ったパラメーターまたはネットワークエラーが原因です。
except OTSClientError as e:
print "update row failed, http_status:%d, error_message:%s" % (e.get_http_status(), e.get_error_message())
# サーバーが異常です。これは通常、誤ったパラメーターまたはネットワークエラーが原因です。
except OTSServiceError as e:
print "update row failed, http_status:%d, error_code:%s, error_message:%s, request_id:%s" % (e.get_http_status(), e.get_error_code(), e.get_error_message(), e.get_request_id())
print ('Delete succeed, consume %s write cu.' % consumed.write)
コードの詳細は、『DeleteRow@GitHub』をご参照ください。