Для приложения я управляю определениями таблиц 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 на лету, когда доступны определения таблиц?