cqlsh的用法与mysql类似,有什么区别?

时间:2017-07-13 07:33:02

标签: cassandra

cqlsh create table:

CREATE TABLE emp(
   emp_id int PRIMARY KEY,
   emp_name text,
   emp_city text,
   emp_sal varint,
   emp_phone varint
   );

插入数据

INSERT INTO emp (emp_id, emp_name, emp_city,
   emp_phone, emp_sal) VALUES(1,'ram', 'Hyderabad', 9848022338, 50000);

选择数据

SELECT * FROM emp;

 emp_id |  emp_city | emp_name |  emp_phone | emp_sal
--------+-----------+----------+------------+---------
      1 | Hyderabad |      ram | 9848022338 | 50000
      2 | Hyderabad |    robin | 9848022339 | 40000
      3 |   Chennai |   rahman | 9848022330 | 45000

与mysql相同,其中column familycolumn

  

列族是有序行集合的容器。反过来,每一行都是有序的列集合。   列是Cassandra的基本数据结构,具有三个值,即键或列名,值和时间戳。

所以表empcolumn family

INSERT INTO emp (emp_id, emp_name, emp_city, emp_phone, emp_sal) VALUES(1,'ram', 'Hyderabad', 9848022338, 50000);是一行包含列?

这里的

列类似于emp_id=>1emp_name=>ram ??

  

在Cassandra中,尽管定义了列族,但列不是。您可以随时自由地将任何列添加到任何列族。   这是什么意思?   我可以有类似的东西吗?

emp_id |  emp_city | emp_name |  emp_phone | emp_sal
--------+-----------+----------+------------+---------
      1 | Hyderabad |      ram | 9848022338 | 50000
      2 | Hyderabad |    robin | 9848022339 | 40000 | asdfasd | asdfasdf
      3 |   Chennai |   rahman | 9848022330 | 45000
  

超级列是一个特殊列,因此它也是一个键值对。但是超级列存储子列的映射。   超级列在哪里,如何创建它?

2 个答案:

答案 0 :(得分:0)

名称列系列是现在简称为的旧术语,例如示例中的“emp”。每个表包含一个或多个,例如“emp_id”,“emp_name”。

当说出能够随时自由添加列的内容时,这意味着您总是可以省略列的值(将为null)或使用ALTER TABLE语句添加列。

答案 1 :(得分:0)

列系列是一个旧名称,现在它只被称为表。

关于超级专栏,也是一个旧术语,你有" Map"例如,数据类型,或用于更复杂结构的用户定义数据类型。

关于自由添加列 - 在过去,Cassandra正在使用非结构化数据范例,所以在插入列之前你不必定义列,因为现在它不可能,因为Cassandra团队感动了#34;结构化" (数据库行业的许多人都得出结论,非结构化数据产生的问题多于努力)。

无论如何,Cassandra在存储级别的数据表示与MySQL非常不同,实际上只保存了不空的列的数据。当你从cqlsh运行select时它可能看起来是同一行,但它以非常不同的方式存储和查询。