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

Generating DDL CQL create table scripts using spring-data-cassandra

对于应用程序,我在 json 文件中管理 Cassandra table 定义。定义类似于分区键数组、集群键数组、所有列数组然后是列定义数组,每个列定义都有列名及其数据类型。我们被要求创建一个工具来读取这个 json 文件并创建一个包含 CQL DDL 创建 table 脚本的文件。

{
   "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);
}

其中数据类型为 com.datastax.driver.core.DataType。

在调用此方法之前,我将字符串数据类型转换为 com.datastax.driver.core.DataType。在我们的列上只有原始数据类型之前一切都很好。当我们更改要设置的列之一的数据类型时,我们遇到了麻烦,因为无法将此字符串更改为相应的 com.datastax.driver.core.DataType。因为如果您检查此 class,它不会公开 SET 数据类型。

我无法将字符串集转换为 com.datastax.driver.core.DataType

当您有 table 定义可用时,是否有任何其他生成 DDL 的方法可以即时创建 table CQL 脚本?

您可以将 SchemaBuilder from the underlying DataStax Java driver. And DataType type has corresponding methods 用于 sets/maps/lists - 您只需要将正确的嵌套类型传递给它...

像这样(未测试):

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