cql-create表脚本

dauxcl2d  于 2021-06-14  发布在  Cassandra
关注(0)|答案(1)|浏览(379)

对于一个应用程序,我在json文件中管理cassandra表定义。定义类似于分区键数组、集群键数组、所有列的数组,然后是列定义数组,每个列定义都有列名及其数据类型。我们被要求创建一个工具来读取这个json文件,并创建一个包含cql ddl create 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。在我们的列上只有原始数据类型之前,一切都很好。当我们将其中一列的数据类型更改为set时,我们遇到了麻烦,因为无法将此字符串更改为相应的com.datastax.driver.core.datatype。因为如果你检查这个类,它不会暴露set数据类型。
无法将字符串集转换为com.datastax.driver.core.datatype
当您有可用的表定义时,有没有其他方法可以动态生成ddl create table cql脚本?

wj8zmpe1

wj8zmpe11#

可以从底层datastax java驱动程序使用schemabuilder。以及 DataType 类型对于集合/Map/列表有相应的方法-您只需要将正确的嵌套类型传递给它。。。
类似这样的(未测试):

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

相关问题