public List generateTablestoreSplits()

in tablestore/src/main/java/com/alicloud/openservices/tablestore/ecosystem/DefaultTablestoreSplitManager.java [39:111]


    public List<ITablestoreSplit> generateTablestoreSplits(
            SyncClient client,
            Filter filter,
            String tableName,
            ComputeParameters parameter,
            List<String> requiredColumns) {
        TableCatalog catalog;
        catalog = manager.getTableCatalog(tableName);
        if (catalog == null) {
            throw new InvalidParameterException("table does not exist");
        }
        List<ITablestoreSplit> tableSplits = new ArrayList<ITablestoreSplit>();
        LeftMatchResult calculateResult = new LeftMatchResult(tableName, catalog.getTableMeta());
        if (parameter.getComputeMode() == ComputeParameters.ComputeMode.Auto) {
            calculateResult = calculateComputeMode(client, catalog, filter, parameter, requiredColumns);
        }

        if (parameter.getComputeMode() == ComputeParameters.ComputeMode.KV) {
            List<Split> rawSplits = getTableSplits(client, calculateResult.getTableName(), parameter);
            for (Split rawSplit : rawSplits) {
                TablestoreSplit split = new TablestoreSplit(TablestoreSplit.SplitType.KeyValue, filter, requiredColumns);
                split.setKvSplit(rawSplit);
                split.setKvTableMeta(calculateResult.getTableMeta());
                split.setTableName(tableName);
                split.setSplitName(calculateResult.getTableName());
                if (split.checkIfMatchTheFilter(filter)) {
                    tableSplits.add(split);
                }
            }
        } else if (parameter.getComputeMode() == ComputeParameters.ComputeMode.Search) {
            // generate one split and later use parallel scan
            if (parameter.getSearchIndexName() != null) {
                DescribeSearchIndexRequest request = new DescribeSearchIndexRequest();
                request.setTableName(tableName);
                request.setIndexName(parameter.getSearchIndexName());
                DescribeSearchIndexResponse response = client.describeSearchIndex(request);
                IndexSchema schema = response.getSchema();
                List<String> geoFieldList = new ArrayList<String>();
                for (FieldSchema fieldSchema : schema.getFieldSchemas()) {
                    if (fieldSchema.getFieldType() == FieldType.GEO_POINT) {
                        geoFieldList.add(fieldSchema.getFieldName());
                    }
                }

                ComputeSplitsRequest computeSplitsRequest = new ComputeSplitsRequest();
                computeSplitsRequest.setTableName(tableName);
                computeSplitsRequest.setSplitsOptions(new SearchIndexSplitsOptions(parameter.getSearchIndexName()));
                ComputeSplitsResponse computeSplitsResponse = client.computeSplits(computeSplitsRequest);
                byte[] sessionId = computeSplitsResponse.getSessionId();
                int splitsSize = computeSplitsResponse.getSplitsSize();
                if (parameter.getMaxSplitsCount() > 0 && parameter.getMaxSplitsCount() < splitsSize) {
                    splitsSize = parameter.getMaxSplitsCount();
                }

                for (int i = 0; i < splitsSize; i++) {
                    TablestoreSplit split = new TablestoreSplit(TablestoreSplit.SplitType.SearchIndex, filter, requiredColumns, sessionId, i, splitsSize, geoFieldList);
                    SearchInfo info = new SearchInfo(parameter.getSearchIndexName(), catalog.getSearchSchema().get(0));
                    split.setSearchInfo(info);
                    split.setTableName(tableName);
                    split.setSplitName(parameter.getSearchIndexName());
                    tableSplits.add(split);
                }
            } else {
                TablestoreSplit split = new TablestoreSplit(TablestoreSplit.SplitType.SearchIndex, filter, requiredColumns);
                SearchInfo info = new SearchInfo(catalog.getSearchNames().get(0), catalog.getSearchSchema().get(0));
                split.setSearchInfo(info);
                split.setTableName(tableName);
                split.setSplitName(catalog.getSearchNames().get(0));
                tableSplits.add(split);
            }
        }
        return tableSplits;
    }