在创建的表中查找列的数据类型

pyg*_*pyg 3 cql cassandra

我试图为表结构的用户验证,一个成分是列数据类型,如服务uuidtext以及bigint在'CREATE TABLE”语句下面。

USE my_keyspace;
CREATE TABLE users (
    id uuid,
    name text,
    age bigint);
Run Code Online (Sandbox Code Playgroud)

如果我做

USE system;
SELECT validator FROM schema_columns
WHERE keyspace_name='my_keyspace' AND columnfamily_name='users';
Run Code Online (Sandbox Code Playgroud)

我懂了

org.apache.cassandra.db.marshal.UUIDType
org.apache.cassandra.db.marshal.UTF8Type
org.apache.cassandra.db.marshal.LongType
Run Code Online (Sandbox Code Playgroud)

这似乎很有用,但是仔细检查,多个不同的数据类型可以映射到相同的验证器值。有没有一种方法可以提取在“ CREATE TABLE”语句中输入的数据类型信息,或者至少可以找到类型之间的区别?

另外,我很好奇为什么验证器数据的前缀是“ org.apache.cassandra ...”,却找不到解释,所以如果有人知道为什么,我会很感兴趣要知道。

小智 5

这似乎很有用,但是仔细检查,多个不同的数据类型可以映射到相同的验证器值。

如果是这种情况,例如varchar和text,我相信这些数据类型可以相互映射并且可以互换。如果我错了,其他任何人都可以纠正我。

有没有一种方法可以提取在“ CREATE TABLE”语句中输入的数据类型信息,或者至少可以找到类型之间的区别?

我知道的唯一方法是:

DESC TABLE users;
Run Code Online (Sandbox Code Playgroud)

另外,我很好奇为什么验证器数据的前缀是“ org.apache.cassandra ...”,却找不到解释,所以如果有人知道为什么,我会很感兴趣要知道。

Cassandra用Java实现,这是实现数据类型的Class的完整路径。

更多信息:

http://docs.datastax.com/en/cql/3.0/cql/cql_reference/cql_data_types_c.html

https://github.com/apache/cassandra/tree/trunk/src/java/org/apache/cassandra/db/marshal