Генерация DDL CQL для создания табличных скриптов с использованием spring-data-cassandra - PullRequest
0 голосов
/ 14 июня 2019

Для приложения я управляю определениями таблиц Cassandra в файле json. Определение - это что-то вроде массива ключа раздела, массива ключа кластеризации, массива всех столбцов, затем массива определений столбцов, у каждого определения столбца есть имя столбца и его тип данных. Нас попросили создать инструмент, который может читать этот json-файл и создавать файл, содержащий CQL DDL сценарии создания таблиц.

{
   "tableDefinitions":[
       {
         "tableName":"employee"
         "partitionKeyColumns":["department"],
         "clusteringKeyColumns":["name"],
         "columns":["id","address"]
       }
   ],
   "columnDefinitions":[
       {"name":"id","type":"text"},
       {"name":"name","type":"text"},
       {"name":"department","type":"text"},
       {"name":"address","type":"text"}
   ]
}

Для этого мы использовали CreateTableSpecification. Чтобы установить столбец в этом, у нас есть метод -

public T column(String name, DataType type) {
    return this.column(CqlIdentifier.of(name), type);
}

где DataType - это com.datastax.driver.core.DataType.

Перед вызовом этого метода я преобразовываю строковый dataType в com.datastax.driver.core.DataType. Это было хорошо, пока у нас не было примитивных типов данных в наших столбцах. Когда мы изменили тип данных одного из наших столбцов, чтобы установить, у нас были проблемы, потому что не было никакого способа изменить эту строку на соответствующий com.datastax.driver.core.DataType. Потому что, если вы проверите этот класс, он не отображает тип данных SET.

Я не могу преобразовать набор строк в com.datastax.driver.core.DataType

Любой другой способ создания сценария CQL для создания DDL на лету, когда доступны определения таблиц?

1 Ответ

1 голос
/ 15 июня 2019

Вы можете использовать SchemaBuilder из базового драйвера Java DataStax.И DataType тип имеет соответствующие методы для наборов / карт / списков - вам нужно только передать ему правильный вложенный тип ...

Примерно так (не проверено):

String cql = SchemaBuilder.create("ks", "tbl")
  .addPartitionKey("id", DataType.cint)
  .addColumn("value", DataType.set(DataType.cint))
  .buildInternal();
...