データテーブルの1つ以上の属性列をクエリ条件として使用してデータをクエリする場合、データテーブルに作成されたセカンダリインデックスのプライマリキー列として属性列を指定できます。このようにして、属性列に基づいてデータをすばやくクエリできます。セカンダリインデックスを作成したら、データテーブルにデータを書き込み、セカンダリインデックスを使用してデータをクエリするだけで済みます。このトピックでは、Tablestore CLIでセカンダリインデックスを作成する方法、インデックステーブルに関する情報をクエリする方法、インデックステーブルを使用してデータをクエリおよびエクスポートする方法、インデックステーブルを削除する方法について説明します。
前提条件
max Versionsパラメータが1に設定されたデータテーブルが作成されます。詳細については、データテーブルの操作を参照してください。
定義済み列はデータテーブルに指定されています。詳細については、データテーブルの操作を参照してください。
セカンダリインデックスの作成
セカンダリインデックスは、グローバルセカンダリインデックスとローカルセカンダリインデックスに分類されます。詳細については、概要を参照してください。
コマンド構文
create_index -t <tableName> -n <indexName> -i <indexType> --pk <primaryKeyName,primaryKeyName> --attr <definedColumn,definedColumn>
次の表に、セカンダリインデックスの作成時に設定できるパラメータを示します。
パラメータ | 必須 | 例 | 説明 |
-t,--table | いいえ | mytable | データテーブルの名前。 |
-n,--name | はい | index0 | 作成するセカンダリインデックスの名前。 |
-i,--index_type | いいえ | global | セカンダリインデックスのタイプ。有効な値:
|
-k,--pk | はい | uid,pid | インデックステーブルのインデックス列。インデックス列は、プライマリキー列とデータテーブルの定義済み列の組み合わせです。 ローカルセカンダリインデックスを使用する場合、インデックステーブルの最初のプライマリキー列は、インデックステーブルが作成されるデータテーブルの最初のプライマリキー列と同じである必要があります。 |
-a,--attr | はい | col0,col1 | インデックステーブルの属性列。属性列は、データテーブルの定義済み列の組み合わせです。 |
-b,--without_base_data | いいえ | 該当なし | 作成するセカンダリインデックスに、データテーブルの既存のデータが含まれていないことを指定します。 |
例
次のサンプルコードは、mytableデータテーブルにindex0という名前のグローバルセカンダリインデックスを作成する方法の例を示しています。この例では、グローバルセカンダリインデックスにデータテーブルの既存のデータが含まれています。
create_index -t mytable -n index0 -i global --pk uid,pid -a name,col0
次のサンプルコードは、mytableデータテーブルにindex1という名前のグローバルセカンダリインデックスを作成する方法の例を示しています。この例では、グローバルセカンダリインデックスにデータテーブルの既存のデータは含まれていません。
create_index -t mytable -n index1 -i global --pk uid,pid -a name,col0 -b
次のサンプルコードは、mytableデータテーブルにindex2という名前のローカルセカンダリインデックスを作成する方法の例を示しています。この例では、ローカルセカンダリインデックスにデータテーブルの既存のデータが含まれています。
create_index -t mytable -n index2 -i local -k uid,name -a col0,col1
テーブルの使用
テーブル操作またはデータ操作を実行するテーブルを選択します。
コマンド構文
use --wc -t <tableName>
パラメータ | 必須 | 例 | 説明 |
--wc | いいえ | 該当なし | 操作を実行するテーブルがデータテーブルかインデックステーブルかを指定します。 |
-t,--table | はい | index0 | インデックステーブルの名前。 |
例
次のサンプルコードは、index0という名前のインデックステーブルを使用する方法の例を示しています。
use -t index0
セカンダリインデックスに関する情報のクエリ
テーブルに関する情報をクエリし、その情報をローカルコンピュータのJSONファイルに保存します。
コマンド構文
desc -t <tableName> -o /localpath/filename.json
次の表に、テーブルに関する情報をクエリするために設定できるパラメータを示します。
パラメータ | 必須 | 例 | 説明 |
-t,--table | いいえ | index0 | データテーブルまたはインデックステーブルの名前。 |
-f,--print_format | いいえ | json | テーブルに関する情報の出力形式。デフォルト値:json。有効な値:json および table。 |
-o,--output | いいえ | /tmp/describe_table_meta.json | テーブルに関する情報が格納されるローカルJSONファイルのパス。 |
例
次のサンプルコードは、現在のテーブルに関する情報をクエリする方法の例を示しています。
desc
次のサンプルコードは、現在のテーブルに関する情報をクエリし、その情報をdescribe_table_meta.jsonという名前のローカルファイルに保存する方法の例を示しています。
desc -o /tmp/describe_table_meta.json
セカンダリインデックスを使用したデータのクエリ
単一行のデータの読み取り
データテーブルからデータを読み取り、ローカルJSONファイルにエクスポートできます。
読み取る行が存在しない場合は、空の結果が返されます。
コマンド構文
get --pk '[primaryKeyValue,primaryKeyValue]'
次の表に、コマンドのパラメータを示します。
パラメータ | 必須 | 例 | 説明 |
-k,--pk | はい | ["86",6771] | 行のプライマリキー列の値。このパラメータの値は配列です。 重要 指定するプライマリキー列の数とタイプは、データテーブルのプライマリキー列の実際の数とタイプと同じである必要があります。 |
-c,--columns | いいえ | name,uid | 読み取る列。プライマリキー列または属性列の名前を指定できます。列を指定しない場合は、行のすべてのデータが返されます。 |
--max_version | いいえ | 1 | 読み取ることができるデータバージョンの最大数。 |
--time_range_start | いいえ | 1626860469000 | 読み取るデータのバージョン範囲。time_range_startパラメータは開始タイムスタンプを指定し、time_range_endパラメータは終了タイムスタンプを指定します。範囲には開始値が含まれ、終了値は含まれません。 |
--time_range_end | いいえ | 1626865270000 | |
--time_range_specific | いいえ | 1626862870000 | 読み取るデータの特定のバージョン。 |
-o, --output | いいえ | /tmp/querydata.json | クエリ結果がエクスポートされるJSONファイルのローカルパス。 |
例
次のサンプルコードは、最初のプライマリキー列の値が「86」で、2番目のプライマリキー列の値が6771であるデータ行を読み取る方法の例を示しています。
get --pk '["86",6771]'
データのスキャン
データテーブルをスキャンして、データテーブル内のすべてのデータまたは指定された行数のデータを取得できます。
コマンド構文
scan --limit limit
次の表に、コマンドのパラメータを示します。
パラメータ | 必須 | 例 | 説明 |
--limit | いいえ | 10 | スキャンする行の最大数。このパラメータを設定しない場合は、データテーブルのすべてのデータがスキャンされます。 |
例
次のサンプルコードは、データテーブルで最大10行のデータをスキャンする方法の例を示しています。
scan --limit 10
データのエクスポート
データテーブルからローカルJSONファイルにデータをエクスポートできます。
コマンド構文
scan -o /localpath/filename.json -c attributeColumnName,attributeColumnName,attributeColumnName
次の表に、コマンドのパラメータを示します。
パラメータ | 必須 | 例 | 説明 |
-c, --columns | はい | uid,name | エクスポートする列のセット。プライマリキー列または属性列の名前を指定できます。列名を指定しない場合は、行のすべてのデータがエクスポートされます。 |
--max_version | いいえ | 1 | エクスポートできるデータバージョンの最大数。 |
--time_range_start | いいえ | 1626865596000 | エクスポートするデータのバージョン範囲。time_range_startパラメータは開始タイムスタンプを指定し、time_range_endパラメータは終了タイムスタンプを指定します。範囲には開始値が含まれ、終了値は含まれません。 |
--time_range_end | いいえ | 1626869196000 | |
--time_range_specific | いいえ | 1626867396000 | エクスポートするデータの特定のバージョン。 |
--backward | いいえ | 該当なし | エクスポートされたデータをプライマリキーの降順でソートすることを指定します。 |
-o, --output | はい | /tmp/mydata.json | クエリ結果がエクスポートされるJSONファイルのローカルパス。 |
-l, --limit | いいえ | 10 | クエリで返す行の最大数。 |
-b, --begin | いいえ | '["86", 6771]' | エクスポートするデータの値の範囲。プライマリキーの範囲は、左閉右開区間です。 説明
|
-e, --end | いいえ | '["86", 6775]' |
例
例1
次のサンプルコードは、現在のテーブルのすべてのデータをmydata.jsonという名前のローカルファイルにエクスポートする方法の例を示しています。
scan -o /tmp/mydata.json
例2
次のサンプルコードは、現在のテーブルのuid列とname列のデータをmydata.jsonローカルファイルにエクスポートする方法の例を示しています。
scan -o /tmp/mydata.json -c uid,name
例3
次のサンプルコードは、プライマリキー値が特定の範囲内にあるデータを現在のテーブルからmydata.jsonローカルファイルにエクスポートする方法の例を示しています。エクスポートが開始される最初のプライマリキー列の値は「86」です。エクスポートが開始される2番目のプライマリキー列の値は6771です。エクスポートが終了する最初のプライマリキー列の値は「86」です。エクスポートが終了する2番目のプライマリキー列の値は6775です。
scan -o D:\\0testreport\\mydata.json -b '["86", 6771]' -e '["86", 6775]'
例4
次のサンプルコードは、プライマリキー値が特定の範囲内にあるデータを現在のテーブルからmydata.jsonローカルファイルにエクスポートする方法の例を示しています。エクスポートが開始される最初のプライマリキー列の値は「50」で、エクスポートが終了する最初のプライマリキー列の値は「100」です。2番目のプライマリキー列の値の範囲は指定されていません。
scan -o /tmp/mydata.json -b '["50",null]' -e '["100",null]'
セカンダリインデックスの削除
不要になったインデックステーブルを削除します。
コマンド構文
drop_index -t <tableName> -i <indexName> -y
パラメータ | 必須 | 例 | 説明 |
-t,--table | いいえ | mytable | データテーブルの名前。 |
-i,--index | はい | index0 | 削除するセカンダリインデックスの名前。 |
-y,--yes | はい | 該当なし | 確認情報が表示されることを指定します。このパラメータは必須です。 |
例
次のサンプルコードは、現在のデータテーブルのindex0という名前のインデックステーブルを削除する方法の例を示しています。
drop_index -i index0 -y
次のサンプルコードは、mytableデータテーブルのindex0という名前のインデックステーブルを削除する方法の例を示しています。
drop_index -t mytable -i index0 -y