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

Tablestore:フィルター

最終更新日:Dec 28, 2024

Tablestoreはサーバー上でクエリ結果をフィルタリングし、フィルタリングされた結果を返します。フィルター条件を満たす行のみが返されます。

前提条件

  • OTSClientインスタンスが初期化されていること。詳細については、OTSClientインスタンスの初期化を参照してください。

  • データテーブルが作成され、データがデータテーブルに書き込まれていること。

メソッド

GetRow、BatchGetRow、またはGetRange操作を呼び出してデータをクエリする場合、フィルターを使用してフィルター条件を満たす行のみを返すことができます。

フィルターには、SingleColumnValueFilterとCompositeColumnValueFilterがあります。

  • SingleColumnValueFilter:参照列の値のみに基づいて、行を返すかどうかを決定します。

  • CompositeColumnValueFilter:複数の参照列の値に対するフィルター条件の組み合わせに基づいて、行を返すかどうかを決定します。

説明

フィルターの詳細については、フィルターの設定を参照してください。

使用上の注意

  • フィルター条件は、=, !=, >, >=, <, <= の関係演算子と、NOT、AND、OR の論理演算子をサポートしています。フィルター条件には、最大10個のサブ条件を含めることができます。

  • フィルターで使用される参照列は、クエリ結果に含まれている必要があります。データの読み取り元となる指定された列に参照列が含まれていない場合、フィルターは参照列の値をクエリできません。

  • GetRange操作を使用する場合、一度に最大5,000行または4MBのデータをスキャンできます。

    スキャンの範囲内でフィルター条件に一致するデータがない場合、返される行は空になります。ただし、NextStartPrimaryKeyは空ではない場合があります。 NextStartPrimaryKeyが空でない場合は、パラメーター値を使用して、NextStartPrimaryKeyの戻り値が空になるまでスキャンを続けます。

パラメーター

パラメーター

必須

説明

ColumnName

はい

フィルターで使用される参照列の名前。

ColumnValue

はい

フィルターで使用される参照列の値。

ComparatorType

はい

フィルターで使用される関係演算子。関係演算子の詳細については、ComparatorTypeを参照してください。

サポートされている関係演算子は、EQUAL (=)、NOT_EQUAL (!=)、GREATER_THAN (>)、GREATER_EQUAL (>=)、LESS_THAN (<)、LESS_EQUAL (<=) です。tablestore.CT_EQUAL を使用して EQUAL (=) を指定し、tablestore.CT_NOT_EQUAL を使用して NOT_EQUAL (!=) を指定し、tablestore.CT_GREATER_THAN を使用して GREATER_THAN (>) を指定し、tablestore.CT_GREATER_EQUAL を使用して GREATER_EQUAL (>=) を指定し、tablestore.CT_LESS_THAN を使用して LESS_THAN (<) を指定し、tablestore.CT_LESS_EQUAL を使用して LESS_EQUAL (<=) を指定します。

LogicOperator

いいえ

フィルターで使用される論理演算子。論理演算子の詳細については、LogicalOperatorを参照してください。

論理演算子には、NOT、AND、OR があります。Tablestoreでは、tablestore.LO_NOT は NOT を、tablestore.LO_AND は AND を、tablestore.LO_OR は OR を指定します。

FilterIfMissing

いいえ

行に参照列が存在しない場合に、行を返すかどうかを指定します。タイプ:ブール値。有効な値:

  • false:行に参照列が存在しない場合、行が返されます。これはデフォルト値です。

  • true:行に参照列が存在しない場合、行は返されません。

LatestVersionOnly

いいえ

参照列に複数のバージョンのデータが含まれている場合に、比較に参照列の最新バージョンのみを使用するかどうかを指定します。タイプ:ブール値。有効な値:

  • true:参照列に複数のバージョンのデータが含まれている場合、最新バージョンのデータのみが比較に使用されます。これはデフォルト値です。

  • false:参照列に複数のバージョンのデータが含まれている場合、すべてのバージョンのデータが比較に使用されます。参照列の1つのバージョンのデータがフィルター条件を満たす場合、行が返されます。

SingleColumnValueFilterを使用してデータをフィルタリングする

次のサンプルコードは、データテーブルから行を読み取る方法の例を示しています。この例では、c1列がデータのフィルタリングに参照列として使用され、最新バージョンのデータが読み取られます。

func GetRowWithFilter(client *tablestore.TableStoreClient, tableName string) {
    fmt.Println("begin to get row")
    pk := new(tablestore.PrimaryKey)
    pk.AddPrimaryKeyColumn("pk1", "pk1value1")
    pk.AddPrimaryKeyColumn("pk2", int64(2))
    pk.AddPrimaryKeyColumn("pk3", []byte("pk3"))

    // 参照列をc1列に設定し、参照列の値をZhejiangに、FilterIfMissingパラメーターをfalseに設定します。
    condition := tablestore.NewSingleColumnCondition("c1", tablestore.ComparatorType(tablestore.CT_EQUAL), "Zhejiang")
    condition.FilterIfMissing = false

    criteria := &tablestore.SingleRowQueryCriteria{
        TableName:     tableName,
        PrimaryKey:    pk,
        MaxVersion:    1,
        Filter:        condition,
    }

    getResp, err := client.GetRow(&tablestore.GetRowRequest{SingleRowQueryCriteria: criteria})
    if err != nil {
        fmt.Println("getrow failed with error:", err)
    } else {
        colMap := getResp.GetColumnMap()
        if len(colMap.Columns) > 0 {
            fmt.Println("length is ", len(colMap.Columns))
            fmt.Println("get row col0 result is ", getResp.Columns[0].ColumnName, getResp.Columns[0].Value)
        } else {
            fmt.Println("No data that meets the conditions.") // 条件を満たすデータがありません。
        }
    }
}

CompositeColumnValueFilterを使用してデータをフィルタリングする

次のサンプルコードは、データテーブルから行を読み取る方法の例を示しています。この例では、c1列とc2列が参照列として使用されます。 c1列の値がZhejiangで、c2列の値がHangzhouの場合、行が返されます。

func GetRowWithCompositeColumnValueFilter(client *tablestore.TableStoreClient, tableName string) {
    fmt.Println("begin to get row")
    pk := new(tablestore.PrimaryKey)
    pk.AddPrimaryKeyColumn("pk1", "pk1value1")
    pk.AddPrimaryKeyColumn("pk2", int64(2))
    pk.AddPrimaryKeyColumn("pk3", []byte("pk3"))

    // c1列の値がZhejiangで、c2列の値がHangzhouの場合にフィルター条件が満たされるように指定します。
    filter := tablestore.NewCompositeColumnCondition(tablestore.LO_AND)
    filter1 := tablestore.NewSingleColumnCondition("c1", tablestore.CT_EQUAL, "Zhejiang")
    filter2 := tablestore.NewSingleColumnCondition("c2", tablestore.CT_EQUAL, "Hangzhou")
    filter.AddFilter(filter2)
    filter.AddFilter(filter1)

    criteria := &tablestore.SingleRowQueryCriteria{
        TableName:  tableName,
        PrimaryKey: pk,
        MaxVersion: 1,
        Filter:     filter,
    }

    getResp, err := client.GetRow(&tablestore.GetRowRequest{SingleRowQueryCriteria: criteria})
    if err != nil {
        fmt.Println("getrow failed with error:", err)
    } else {
        colMap := getResp.GetColumnMap()
        if len(colMap.Columns) > 0 {
            fmt.Println("length is ", len(colMap.Columns))
            fmt.Println("get row col0 result is ", getResp.Columns[0].ColumnName, getResp.Columns[0].Value)
        } else {
            fmt.Println("No data that meets the conditions.") // 条件を満たすデータがありません。
        }
    }
}

参照

  • アプリケーションが異なる属性列をクエリ条件として使用してデータをクエリする必要がある場合は、属性列をセカンダリインデックスのプライマリキー列として指定できます。このようにして、セカンダリインデックスを使用して、属性列に基づいてデータをクエリできます。これにより、データクエリが高速化されます。詳細については、セカンダリインデックスを参照してください。

  • ビジネスで多次元クエリとデータ分析が必要な場合は、検索インデックスを作成し、必要な属性列を検索インデックスのフィールドとして指定できます。その後、検索インデックスを使用してデータのクエリと分析を行うことができます。たとえば、検索インデックスを使用して、非プライマリキー列、ブールクエリ、あいまいクエリに基づいてクエリを実行できます。また、検索インデックスを使用して、最大値と最小値を取得したり、行数の統計を収集したり、クエリ結果をグループ化したりすることもできます。詳細については、検索インデックスを参照してください。

  • SQLクエリ機能を使用して、テーブル内のデータのクエリと分析を行うことができます。詳細については、データのクエリを参照してください。