Обновление схемы в Cassandra с использованием API hector

Я уже создал схему следующим образом:

create column family Customer_detail_21
  with column_type = 'Standard'
  and comparator = 'UTF8Type'
  and default_validation_class = 'UTF8Type'
  and key_validation_class = 'UTF8Type'
  and rows_cached = 0.0
  and row_cache_save_period = 0
  and row_cache_keys_to_save = 0
  and keys_cached = 0.0
  and key_cache_save_period = 0
  and read_repair_chance = 0.0
  and gc_grace = 0
  and min_compaction_threshold = 4
  and max_compaction_threshold = 32
  and replicate_on_write = false
  and row_cache_provider = 'ConcurrentLinkedHashCacheProvider'
  and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
  and column_metadata = [
    {column_name : 'name',
    validation_class : UTF8Type,
    index_name : 'index_name_27',
    index_type : 0,
}];

Но когда я обновил вышеуказанную схему с помощью следующего кода Java:

public static void updateSchema() {
        System.out.println("Update Schema");
        ColumnFamilyDefinition familyDefinition = new ThriftCfDef(
                getColumnFamilyDefinition("Customer_detail_21"));
        if (familyDefinition != null) {
            if (!isColumnPresent(familyDefinition)) {
                BasicColumnDefinition columnDefinition = new BasicColumnDefinition();
                columnDefinition.setName(StringSerializer.get().toByteBuffer(
                        "pincode"));
                columnDefinition.setValidationClass(ComparatorType.INTEGERTYPE
                        .getClassName());
                columnDefinition.setIndexName("index_pincode_66");
                columnDefinition.setIndexType(ColumnIndexType.KEYS);
                familyDefinition.addColumnDefinition(columnDefinition);
                cluster.updateColumnFamily(familyDefinition, true);
            }
        }
    }

Я получил схему, как показано ниже:

create column family Customer_detail_21
  with column_type = 'Standard'
  and comparator = 'UTF8Type'
  and default_validation_class = 'UTF8Type'
  and key_validation_class = 'UTF8Type'
  and rows_cached = 0.0
  and row_cache_save_period = 0
  and row_cache_keys_to_save = 0
  and keys_cached = 0.0
  and key_cache_save_period = 0
  and read_repair_chance = 0.0
  and gc_grace = 0
  and min_compaction_threshold = 4
  and max_compaction_threshold = 32
  and replicate_on_write = false
  and row_cache_provider = 'ConcurrentLinkedHashCacheProvider'
  and compaction_strategy = 'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
  and column_metadata = [
    {column_name : '',
    validation_class : UTF8Type,
    index_name : 'index_name_26',
    index_type : 0,
},
    {column_name : 'pincode',
    validation_class : IntegerType,
    index_name : 'index_pincode_65',
    index_type : 0,
}];

Согласно вышеприведенному выводу, мое предыдущее имя столбца = 'имя' теперь обновляется как имя столбца = пусто.

так почему старое имя столбца становится пустым после обновления.

1 ответ

Так как мы не можем переопределить вторичный индекс, поэтому мы не можем обновить существующую схему через hector API.

Другие вопросы по тегам