使用spring-data-cassandra生成DDL CQL创建表脚本

时间:2019-06-14 16:33:25

标签: cassandra spring-data-cassandra

对于一个应用程序,我正在json文件中管理Cassandra表定义。定义类似于分区键数组,集群键数组,所有列的数组,然后是列定义的数组,每个列定义都有列名及其数据类型。我们被要求创建一个可以读取此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

有可用的表定义时,还有其他方法可以动态生成DDL创建表CQL脚本吗?

1 个答案:

答案 0 :(得分:1)

您可以从基础DataStax Java驱动程序中使用SchemaBuilder。并且DataType类型的集合/地图/列表具有相应的methods-您只需要向其传递正确的嵌套类型...

类似这样的东西(未经测试):

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