このセクションでは、Java SDK で createTable メソッドと scanFromIndex メソッドを呼び出して、次の操作を実行することができます。

  • ベーステーブルとこのベーステーブルのインデックスを同時に作成できます。
    private static void createTable(SyncClient client) {
        TableMeta tableMeta = new TableMeta(TABLE_NAME);
        tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME_1, PrimaryKeyType.STRING)); // ベーステーブルのプライマリキーを指定できます。
        tableMeta.addPrimaryKeyColumn(new PrimaryKeySchema(PRIMARY_KEY_NAME_2, PrimaryKeyType.INTEGER)); // 为主表设置PK列
        tableMeta.addDefinedColumn(new DefinedColumnSchema(DEFINED_COL_NAME_1, DefinedColumnType.STRING)); // ベーステーブルに事前定義属性を指定できます。
        tableMeta.addDefinedColumn(new DefinedColumnSchema(DEFINED_COL_NAME_2, DefinedColumnType.INTEGER)); // ベーステーブルに事前定義属性を指定できます。
        tableMeta.addDefinedColumn(new DefinedColumnSchema(DEFINED_COL_NAME_3, DefinedColumnType.INTEGER)); // ベーステーブルに事前定義属性を指定できます。
    
        int timeToLive = -1; // データが期限切れにならないように、-1 を Time To Live (TTL) の値として指定することができます。
        int maxVersions = 1; // 最大バージョン番号 ベース テーブルに 1 つ以上のインデックスがある場合は、バージョン値として 1 だけを指定できます。
    
        TableOptions tableOptions = new TableOptions(timeToLive, maxVersions);
    
        ArrayList<IndexMeta> indexMetas = new ArrayList<IndexMeta>();
        IndexMeta indexMeta = new IndexMeta(INDEX_NAME); // インデックスを作成できます。
        indexMeta.addPrimaryKeyColumn(DEFINED_COL_NAME_1); // ベーステーブルの DEFINED_COL_NAME_1 をインデックスのプライマリキーとして指定できます。
        indexMeta.addDefinedColumn(DEFINED_COL_NAME_2); // ベーステーブルの DEFINED_COL_NAME_2 をインデックスのプライマリキーとして指定できます。
        indexMetas.add(indexMeta); // インデックスをベーステーブルに追加できます。
    
        CreateTableRequest request = new CreateTableRequest(tableMeta, tableOptions, indexMetas); // ベーステーブルを作成できます。
    
        client.createTable(request);
    }
  • ベース テーブルにインデックスを作成できます。
    private static void createIndex(SyncClient client) {
        IndexMeta indexMeta = new IndexMeta(INDEX_NAME); // インデックスを作成できます。
        indexMeta.addPrimaryKeyColumn(DEFINED_COL_NAME_2); // DEFINED_COL_NAME_2 をインデックスのプライマリキーの最初の属性として指定できます。
        indexMeta.addPrimaryKeyColumn(DEFINED_COL_NAME_1); // EFINED_COL_NAME_1 をインデックスのプライマリキーの 2 番目の属性として指定できます。
        CreateIndexRequest request = new CreateIndexRequest(TABLE_NAME, indexMeta, false); // ベーステーブルにインデックスを作成できます。
        client.createIndex(request); // インデックスを作成できます。
    }
    現時点では、ベーステーブルにインデックスを作成すると、ベーステーブルの既存のデータはインデックスにコピーされません。 このインデックスを作成した後、新しく作成されたインデックスには増分データのみが含まれます。 増分データの詳細については、DingTalk の Table Store テクニカルサポートにお問い合わせください。
  • インデックスを削除できます。
    private static void deleteIndex(SyncClient client) {
        DeleteIndexRequest request = new DeleteIndexRequest(TABLE_NAME, INDEX_NAME); // ベーステーブルとインデックスの名前を指定できます。
        client.deleteIndex(request); // インデックスを削除できます。
    }
  • インデックスからデータを読み取ることができます。

    結果に返される属性がインデックスに含まれている場合は、インデックスから直接データを取得できます。

    private static void scanFromIndex(SyncClient client) {
        RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria(INDEX_NAME); // インデックス名前を指定できます。
    
        // 開始プライマリキーを指定できます。
        PrimaryKeyBuilder startPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        startPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MIN); // インデックスのプライマリキーの最小値を指定できます。
        startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MIN); // ベース テーブルのプライマリキーの最小値を指定できます。
        startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MIN); // ベース テーブルのプライマリキーの最小値を指定できます。
        rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startPrimaryKeyBuilder.build());
    
        // 終了プライマリキーを指定できます。
        PrimaryKeyBuilder endPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        endPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MAX); // インデックス属性の最大値を指定できます。
        endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MAX); // ベーステーブルのプライマリキーの最大値を指定できます。
        endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MAX); // ベーステーブルのプライマリキーの最大値を指定できます。
        rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endPrimaryKeyBuilder.build());
    
        rangeRowQueryCriteria.setMaxVersions(1);
    
        System.out.println("The results returned from an index are as follows:");
        while (true) {
            GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
            for (Row row : getRangeResponse.getRows()) {
                System.out.println(row);
            }
    
            // nextStartPrimaryKey 値が null 値でない場合は、ベーステーブルから引き続きデータを読み取ることができます。
            if (getRangeResponse.getNextStartPrimaryKey() ! = null) {
                rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
            } else {
                break;
            }
        }
    }
    結果に返される属性がインデックスに含まれていない場合は、ベーステーブルを照会する必要があります。
    private static void scanFromIndex(SyncClient client) {
        RangeRowQueryCriteria rangeRowQueryCriteria = new RangeRowQueryCriteria(INDEX_NAME); // インデックス名を指定できます。
    
        // 開始プライマリキーを指定できます。
        PrimaryKeyBuilder startPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        startPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MIN); // インデックスのインデックス付き属性の最小値を指定できます。
        startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MIN); // ベーステーブルのプライマリキーの最小値を指定できます。
        startPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MIN); // ベーステーブルのプライマリキーの最小値を指定できます。
        rangeRowQueryCriteria.setInclusiveStartPrimaryKey(startPrimaryKeyBuilder.build());
    
        // 終了プライマリキーを指定できます。
        PrimaryKeyBuilder endPrimaryKeyBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
        endPrimaryKeyBuilder.addPrimaryKeyColumn(DEFINED_COL_NAME_1, PrimaryKeyValue.INF_MAX); // インデックスのインデックス付き属性の最大値を指定できます。
        endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_1, PrimaryKeyValue.INF_MAX); // ベース テーブルのプライマリキーの最大値を指定できます。
        endPrimaryKeyBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME_2, PrimaryKeyValue.INF_MAX); // ベーステーブルのプライマリキーの最大値を指定できます。
        rangeRowQueryCriteria.setExclusiveEndPrimaryKey(endPrimaryKeyBuilder.build());
    
        rangeRowQueryCriteria.setMaxVersions(1);
    
        while (true) {
            GetRangeResponse getRangeResponse = client.getRange(new GetRangeRequest(rangeRowQueryCriteria));
            for (Row row : getRangeResponse.getRows()) {
                PrimaryKey curIndexPrimaryKey = row.getPrimaryKey();
                PrimaryKeyColumn pk1 = curIndexPrimaryKey.getPrimaryKeyColumn(PRIMARY_KEY_NAME1);
                PrimaryKeyColumn pk2 = curIndexPrimaryKey.getPrimaryKeyColumn(PRIMARY_KEY_NAME2);
                PrimaryKeyBuilder mainTablePKBuilder = PrimaryKeyBuilder.createPrimaryKeyBuilder();
                mainTablePKBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME1, pk1.getValue());
                mainTablePKBuilder.addPrimaryKeyColumn(PRIMARY_KEY_NAME2, ke2.getValue());
                PrimaryKey mainTablePK = mainTablePKBuilder.build(); // ベーステーブルのインデックスプライマリキーを指定できます。
    
                // ベーステーブルをクエリできます。
                SingleRowQueryCriteria criteria = new SingleRowQueryCriteria(TABLE_NAME, mainTablePK);
                criteria.addColumnsToGet(DEFINED_COL_NAME3); // You can read the DEFINED_COL_NAME3 attribute from the base table.
                // 最新のデータバージョンを取得できます。
                criteria.setMaxVersions(1);
                GetRowResponse getRowResponse = client.getRow(new GetRowRequest(criteria));
                Row mainTableRow = getRowResponse.getRow();
                System.out.println(row); 
            }
    
            // nextStartPrimaryKey の値が null 値でない場合は、ベーステーブルから引き続きデータを読み取ることができます。
            if (getRangeResponse.getNextStartPrimaryKey() ! = null) {
                rangeRowQueryCriteria.setInclusiveStartPrimaryKey(getRangeResponse.getNextStartPrimaryKey());
            } else {
                break;
            }
        }
    }