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())
			
データ行をクエリすると、システムはその行のすべての列のデータを戻します。 columns_to_get パラメータを使用して、指定した列のデータを読み取ることができます。 たとえば、col0 と col1 が columns_to_get に挿入されている場合、システムは col0 と col1 のデータのみを戻します。

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』をご参照ください。