cassandra system.schema_columns 插入其他表并进行修改

Posted

技术标签:

【中文标题】cassandra system.schema_columns 插入其他表并进行修改【英文标题】:cassandra system.schema_columns insert in other table with modifications 【发布时间】:2016-08-06 03:44:04 【问题描述】:

我有以下选择:

select * from system.schema_columns where keyspace_name = 'automotive' and columnfamily_name = 'cars';

我想将由此返回的数据插入另一个表并进行一些修改:

-我要插入列的数据类型

-删除审计列,如 created_at、created_by 等。

在我的 sql 中,我们可以这样做:

insert into formUtil(table_name, column_name, ordinal_position, is_nullable, data_type)
SELECT 
    col.table_name, 
    col.column_name, 
    col.ordinal_position, 
    case when col.is_nullable = 'YES' then 1 else 0 end, 
    col.data_type
from 
    information_schema.COLUMNS col 
where 
    col.table_schema = 'i2cwac' and
    col.column_name not in ('id','modifiedAt','modifiedBy','createdAt','createdBy') and
    col.table_name = 'users';

我们如何在 cassandra 中做到这一点?

【问题讨论】:

【参考方案1】:

您可以使用 Spark 实现此目的

import java.nio.ByteBuffer;
import com.datastax.spark.connector._;

case class SchemaColumns(keyspaceName: String, tableName: String, clusteringOrder: String, columnNameBytes: ByteBuffer, kind: String, position: Int, type: String)
case class AnotherTable(keyspaceName: String, tableName: String, type: String)

sc.cassandraTable[SchemaColumns]("system", "schema_columns")
    .map(schemaColumns -> AnotherTable(schemaColumns.keyspaceName,schemaColumns.tableName, schemaColumns.type)
    .saveToCassandra("my_keyspace","another_table")

【讨论】:

谢谢,但我不想使用 spark。只有cql。如果列是分区键、集群键或常规列,则 schema_columns 中的类型列将返回。我想获取该列的数据类型,例如文本、某些内容的列表、uuit、时间戳、varchar 和其余的

以上是关于cassandra system.schema_columns 插入其他表并进行修改的主要内容,如果未能解决你的问题,请参考以下文章

如何在spark中读写cassandra数据

cassandra启动失败

Cassandra 2.2.1 不会开始使用 cassandra -f

无法使用 bin/cassandra 启动 Cassandra db

Cassandra两种登录方式cassandra-cli / csqlsh

Cassandra -- Cassandra 3.0版本安装