Created
April 25, 2020 14:35
-
-
Save Awes0meM4n/256c101c6f8ea08c947b6cf9aa68bde9 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
cqlsh:prueba> CREATE KEYSPACE prueba | |
... WITH REPLICATION = { | |
... 'class': 'SimpleStrategy', 'replication_factor': 1 | |
... }; | |
cqlsh:prueba> | |
cqlsh:prueba> USE prueba; | |
cqlsh:prueba> | |
cqlsh:prueba> // La siguiente sentencia funciona en Cassandra | |
cqlsh:prueba> | |
cqlsh:prueba> CREATE TABLE producto ( | |
... id int, | |
... nombre varchar, | |
... precio float, | |
... proveedor varchar, | |
... PRIMARY KEY (id)); | |
cqlsh:prueba> | |
cqlsh:prueba> INSERT INTO producto (id, nombre, precio, proveedor) | |
... VALUES (1234, 'Silla Mod. 3', 75, 'Sillas Ruiz'); | |
cqlsh:prueba> | |
cqlsh:prueba> SELECT * FROM producto WHERE id = 1234; | |
id | nombre | precio | proveedor | |
------+--------------+--------+------------- | |
1234 | Silla Mod. 3 | 75 | Sillas Ruiz | |
(1 rows) | |
cqlsh:prueba> | |
cqlsh:prueba> // Borramos el keyspace | |
cqlsh:prueba> | |
cqlsh:prueba> DROP KEYSPACE prueba; | |
cqlsh:prueba> CREATE KEYSPACE DIM | |
... WITH REPLICATION = { | |
... 'class': 'SimpleStrategy', 'replication_factor': 1 }; | |
cqlsh:prueba> | |
cqlsh:prueba> USE DIM; | |
cqlsh:dim> | |
cqlsh:dim> CREATE TABLE usuarios ( | |
... nombreusuario text PRIMARY KEY, email text, edad int ); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO usuarios (nombreusuario, email, edad) | |
... VALUES ('antonio', 'antonio@gmail.com', 25); | |
cqlsh:dim> | |
cqlsh:dim> | |
cqlsh:dim> // Partial Insert | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO usuarios (nombreusuario, edad) | |
... VALUES ('bea', 27 ); | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
antonio | 25 | antonio@gmail.com | |
bea | 27 | null | |
(2 rows) | |
cqlsh:dim> | |
cqlsh:dim> //Uso de TTL | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO usuarios (nombreusuario, edad) | |
... VALUES ('federico', 60) USING TTL 10; | |
cqlsh:dim> | |
cqlsh:dim> // consultamos a federico | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
federico | 60 | null | |
antonio | 25 | antonio@gmail.com | |
bea | 27 | null | |
(3 rows) | |
cqlsh:dim> | |
cqlsh:dim> // y, pasados unos segundos, ya no está | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
antonio | 25 | antonio@gmail.com | |
bea | 27 | null | |
(2 rows) | |
cqlsh:dim> | |
cqlsh:dim> // Algunas consultas correctas | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
antonio | 25 | antonio@gmail.com | |
bea | 27 | null | |
(2 rows) | |
cqlsh:dim> SELECT * FROM usuarios LIMIT 2; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
antonio | 25 | antonio@gmail.com | |
bea | 27 | null | |
(2 rows) | |
cqlsh:dim> SELECT * FROM usuarios WHERE nombreusuario = 'antonio'; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
antonio | 25 | antonio@gmail.com | |
(1 rows) | |
cqlsh:dim> SELECT nombreusuario, edad FROM usuarios WHERE nombreusuario = 'antonio'; | |
nombreusuario | edad | |
---------------+------ | |
antonio | 25 | |
(1 rows) | |
cqlsh:dim> SELECT * FROM usuarios WHERE nombreusuario IN ('antonio', 'bea'); | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
antonio | 25 | antonio@gmail.com | |
bea | 27 | null | |
(2 rows) | |
cqlsh:dim> | |
cqlsh:dim> // Insertamos algunas filas | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO usuarios (nombreusuario, email, edad) | |
... VALUES ('carol', 'carol@gmail.com', 26 ); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO usuarios (nombreusuario, email, edad) | |
... VALUES ('david', 'david@gmail.com', 30 ); | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
antonio | 25 | antonio@gmail.com | |
carol | 26 | carol@gmail.com | |
david | 30 | david@gmail.com | |
bea | 27 | null | |
(4 rows) | |
cqlsh:dim> | |
cqlsh:dim> // Cassandra no los ha insertado al final | |
cqlsh:dim> | |
cqlsh:dim> // Una consulta con un error que parece que podremos resolver | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM USUARIOS WHERE email='antonio@email.com'; | |
InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING" | |
cqlsh:dim> | |
cqlsh:dim> //Una consulta con un mensaje de error | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM usuarios WHERE nombreusuario > 'david'; | |
InvalidRequest: Error from server: code=2200 [Invalid query] message="Only EQ and IN relation are supported on the partition key (unless you use the token() function)" | |
cqlsh:dim> | |
cqlsh:dim> // Probamos lo que nos dice el error | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM usuarios WHERE token(nombreusuario) > token('david'); | |
nombreusuario | edad | email | |
---------------+------+------- | |
bea | 27 | null | |
(1 rows) | |
cqlsh:dim> CREATE TABLE t (a int, | |
... b int, | |
... c int, | |
... d int, | |
... PRIMARY KEY ((a, b), c, d) ); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO t (a,b,c,d) VALUES (0,0,0,0); | |
cqlsh:dim> INSERT INTO t (a,b,c,d) VALUES (0,0,1,1); | |
cqlsh:dim> INSERT INTO t (a,b,c,d) VALUES (0,1,2,2); | |
cqlsh:dim> INSERT INTO t (a,b,c,d) VALUES (0,1,3,3); | |
cqlsh:dim> INSERT INTO t (a,b,c,d) VALUES (1,1,4,4); | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM t; | |
a | b | c | d | |
---+---+---+--- | |
0 | 0 | 0 | 0 | |
0 | 0 | 1 | 1 | |
0 | 1 | 2 | 2 | |
0 | 1 | 3 | 3 | |
1 | 1 | 4 | 4 | |
(5 rows) | |
cqlsh:dim> | |
cqlsh:dim> //Aunque parece que van ordenados, si inserto este, vemos que no | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO t (a,b,c,d) VALUES (21,1,4,4); | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM t; | |
a | b | c | d | |
----+---+---+--- | |
0 | 0 | 0 | 0 | |
0 | 0 | 1 | 1 | |
0 | 1 | 2 | 2 | |
0 | 1 | 3 | 3 | |
21 | 1 | 4 | 4 | |
1 | 1 | 4 | 4 | |
(6 rows) | |
cqlsh:dim> SELECT token(a,b) FROM t; | |
system.token(a, b) | |
---------------------- | |
-5530785643908655543 | |
-5530785643908655543 | |
-5343711339996600080 | |
-5343711339996600080 | |
-4964483912252291273 | |
5765203080415074583 | |
(6 rows) | |
cqlsh:dim> SELECT COUNT (*) FROM usuarios; | |
count | |
------- | |
4 | |
(1 rows) | |
Warnings : | |
Aggregation query used without partition key | |
cqlsh:dim> | |
cqlsh:dim> // GROUP BY funciona a partir de la ver. 3.10 | |
cqlsh:dim> | |
cqlsh:dim> SELECT nombreusuario, email FROM usuarios; | |
nombreusuario | email | |
---------------+------------------- | |
antonio | antonio@gmail.com | |
carol | carol@gmail.com | |
david | david@gmail.com | |
bea | null | |
(4 rows) | |
cqlsh:dim> SELECT JSON nombreusuario, email FROM usuarios; | |
[json] | |
------------------------------------------------------------ | |
{"nombreusuario": "antonio", "email": "antonio@gmail.com"} | |
{"nombreusuario": "carol", "email": "carol@gmail.com"} | |
{"nombreusuario": "david", "email": "david@gmail.com"} | |
{"nombreusuario": "bea", "email": null} | |
(4 rows) | |
cqlsh:dim> SELECT nombreusuario AS nombre, email FROM usuarios; | |
nombre | email | |
---------+------------------- | |
antonio | antonio@gmail.com | |
carol | carol@gmail.com | |
david | david@gmail.com | |
bea | null | |
(4 rows) | |
cqlsh:dim> | |
cqlsh:dim> CREATE TABLE datos_sensor ( | |
... anyo int, | |
... sensor text, | |
... evento timeuuid, | |
... dato text, | |
... PRIMARY KEY ((anyo, sensor), evento) ); | |
cqlsh:dim> | |
cqlsh:dim> //Si la clave de partición es compuesta, debemos especificar todas las columnas | |
cqlsh:dim> INSERT INTO datos_sensor (anyo, sensor, evento, dato) | |
... VALUES (2019, 'sensor 1', NOW(), 'dato 001'); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO datos_sensor (anyo, sensor, evento, dato) | |
... VALUES (2019, 'sensor 1', NOW(), 'dato 002'); | |
cqlsh:dim> | |
cqlsh:dim> //Consulta incorrecta | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM datos_sensor WHERE anyo = 2019; | |
InvalidRequest: Error from server: code=2200 [Invalid query] message="Partition key parts: sensor must be restricted as other parts are" | |
cqlsh:dim> | |
cqlsh:dim> //Consulta correcta | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM datos_sensor WHERE anyo = 2019 AND sensor = 'sensor 1'; | |
anyo | sensor | evento | dato | |
------+----------+--------------------------------------+---------- | |
2019 | sensor 1 | c75de890-8536-11ea-8694-7d2af0c5777b | dato 001 | |
2019 | sensor 1 | c75efa00-8536-11ea-8694-7d2af0c5777b | dato 002 | |
(2 rows) | |
cqlsh:dim> | |
cqlsh:dim> CREATE TABLE mensajes ( | |
... nombreusuario text, | |
... fecha date, | |
... hora time, | |
... cuerpo text, | |
... PRIMARY KEY (nombreusuario, fecha, hora)); | |
cqlsh:dim> | |
cqlsh:dim> //Inserciones desordenadas dentro de la misma partition | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
... VALUES ('antonio', '2016-11-18', '08:30:55.123', 'Antonio Update 1'); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
... VALUES ('antonio', '2016-11-18', '14:40:25.123456789', 'Antonio Update 2'); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
... VALUES ('antonio', '2016-11-21', '08:35:55.123456', 'Antonio Update 4'); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
... VALUES ('antonio', '2016-11-21', '14:30:15.123', 'Antonio Update 5'); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
... VALUES ('antonio', '2016-11-23', '14:50:45.123456', 'Antonio Update 6'); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
... VALUES ('antonio', '2016-11-19', '08:25:25', 'Antonio Update 3'); | |
cqlsh:dim> | |
cqlsh:dim> //En la consulta salen ordenadas por clave de clustering | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM mensajes; | |
nombreusuario | fecha | hora | cuerpo | |
---------------+------------+--------------------+------------------ | |
antonio | 2016-11-18 | 08:30:55.123000000 | Antonio Update 1 | |
antonio | 2016-11-18 | 14:40:25.123456789 | Antonio Update 2 | |
antonio | 2016-11-19 | 08:25:25.000000000 | Antonio Update 3 | |
antonio | 2016-11-21 | 08:35:55.123456000 | Antonio Update 4 | |
antonio | 2016-11-21 | 14:30:15.123000000 | Antonio Update 5 | |
antonio | 2016-11-23 | 14:50:45.123456000 | Antonio Update 6 | |
(6 rows) | |
cqlsh:dim> | |
cqlsh:dim> // Consulta correcta | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM mensajes WHERE nombreusuario = 'antonio' AND fecha < '2016-11-20'; | |
nombreusuario | fecha | hora | cuerpo | |
---------------+------------+--------------------+------------------ | |
antonio | 2016-11-18 | 08:30:55.123000000 | Antonio Update 1 | |
antonio | 2016-11-18 | 14:40:25.123456789 | Antonio Update 2 | |
antonio | 2016-11-19 | 08:25:25.000000000 | Antonio Update 3 | |
(3 rows) | |
cqlsh:dim> | |
cqlsh:dim> //Consulta incorrecta, ya que si se usa una comparación de > o < en una columna de | |
// clustering, todas las columnas precedentes de clustering deben tener una de = | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM mensajes WHERE nombreusuario = 'antonio' AND fecha > '2016-11-20' AND hora > '12:00:00'; | |
InvalidRequest: Error from server: code=2200 [Invalid query] message="Clustering column "hora" cannot be restricted (preceding column "fecha" is restricted by a non-EQ relation)" | |
cqlsh:dim> | |
cqlsh:dim> //Consulta correcta | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM mensajes WHERE nombreusuario = 'antonio' AND fecha = '2016-11-21' AND hora > '12:00:00'; | |
nombreusuario | fecha | hora | cuerpo | |
---------------+------------+--------------------+------------------ | |
antonio | 2016-11-21 | 14:30:15.123000000 | Antonio Update 5 | |
(1 rows) | |
cqlsh:dim> | |
cqlsh:dim> // Ejemplo de static usando la tabla de mensajes. | |
cqlsh:dim> // La modificamos con un ALTER TABLE | |
cqlsh:dim> | |
cqlsh:dim> ALTER TABLE MENSAJES ADD correo text STATIC; | |
cqlsh:dim> | |
cqlsh:dim> // Cambiamos el correo, y se cambia en todos | |
cqlsh:dim> | |
cqlsh:dim> UPDATE mensajes SET correo='antonio@mail.com' WHERE nombreusuario='antonio'; | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM MENSAJES; | |
nombreusuario | fecha | hora | correo | cuerpo | |
---------------+------------+--------------------+------------------+------------------ | |
antonio | 2016-11-18 | 08:30:55.123000000 | antonio@mail.com | Antonio Update 1 | |
antonio | 2016-11-18 | 14:40:25.123456789 | antonio@mail.com | Antonio Update 2 | |
antonio | 2016-11-19 | 08:25:25.000000000 | antonio@mail.com | Antonio Update 3 | |
antonio | 2016-11-21 | 08:35:55.123456000 | antonio@mail.com | Antonio Update 4 | |
antonio | 2016-11-21 | 14:30:15.123000000 | antonio@mail.com | Antonio Update 5 | |
antonio | 2016-11-23 | 14:50:45.123456000 | antonio@mail.com | Antonio Update 6 | |
(6 rows) | |
cqlsh:dim> | |
cqlsh:dim> //Con un insert también lo cambia | |
cqlsh:dim> INSERT INTO mensajes (nombreusuario, fecha, hora, correo, cuerpo) | |
... VALUES ('antonio', '2020-04-24', '09:00:00', 'antonio@mail.com', 'Antonio Update 7'); | |
cqlsh:dim> | |
cqlsh:dim> // Lo cambia en todos | |
cqlsh:dim> | |
cqlsh:dim> SELECT * FROM MENSAJES; | |
nombreusuario | fecha | hora | correo | cuerpo | |
---------------+------------+--------------------+------------------+------------------ | |
antonio | 2016-11-18 | 08:30:55.123000000 | antonio@mail.com | Antonio Update 1 | |
antonio | 2016-11-18 | 14:40:25.123456789 | antonio@mail.com | Antonio Update 2 | |
antonio | 2016-11-19 | 08:25:25.000000000 | antonio@mail.com | Antonio Update 3 | |
antonio | 2016-11-21 | 08:35:55.123456000 | antonio@mail.com | Antonio Update 4 | |
antonio | 2016-11-21 | 14:30:15.123000000 | antonio@mail.com | Antonio Update 5 | |
antonio | 2016-11-23 | 14:50:45.123456000 | antonio@mail.com | Antonio Update 6 | |
antonio | 2020-04-24 | 09:00:00.000000000 | antonio@mail.com | Antonio Update 7 | |
(7 rows) | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
... VALUES ('antonio', '2021-04-24', '09:00:00', 'Antonio Update 8'); | |
cqlsh:dim> SELECT * FROM MENSAJES; | |
nombreusuario | fecha | hora | correo | cuerpo | |
---------------+------------+--------------------+------------------+------------------ | |
antonio | 2016-11-18 | 08:30:55.123000000 | antonio@mail.com | Antonio Update 1 | |
antonio | 2016-11-18 | 14:40:25.123456789 | antonio@mail.com | Antonio Update 2 | |
antonio | 2016-11-19 | 08:25:25.000000000 | antonio@mail.com | Antonio Update 3 | |
antonio | 2016-11-21 | 08:35:55.123456000 | antonio@mail.com | Antonio Update 4 | |
antonio | 2016-11-21 | 14:30:15.123000000 | antonio@mail.com | Antonio Update 5 | |
antonio | 2016-11-23 | 14:50:45.123456000 | antonio@mail.com | Antonio Update 6 | |
antonio | 2020-04-24 | 09:00:00.000000000 | antonio@mail.com | Antonio Update 7 | |
antonio | 2021-04-24 | 09:00:00.000000000 | antonio@mail.com | Antonio Update 8 | |
(8 rows) | |
cqlsh:dim> // Updates e inserts son upserts | |
cqlsh:dim> // Un update normal | |
cqlsh:dim> | |
cqlsh:dim> UPDATE usuarios SET edad = 26, email='antonio@nuevo.com' WHERE nombreusuario = 'antonio'; | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
federico | 60 | null | |
antonio | 26 | antonio@nuevo.com | |
carol | 26 | carol@gmail.com | |
david | 30 | david@gmail.com | |
bea | 27 | null | |
(5 rows) | |
cqlsh:dim> | |
cqlsh:dim> // En este caso, como no existen, los añade | |
cqlsh:dim> UPDATE usuarios SET edad=18 WHERE nombreusuario IN ('gemelo1','gemelo2','gemelo3'); | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
federico | 60 | null | |
antonio | 26 | antonio@nuevo.com | |
carol | 26 | carol@gmail.com | |
gemelo3 | 18 | null | |
gemelo1 | 18 | null | |
gemelo2 | 18 | null | |
david | 30 | david@gmail.com | |
bea | 27 | null | |
(8 rows) | |
cqlsh:dim> | |
cqlsh:dim> //Podemo usar un TTL, pero al pasar el tiempo desaparece el valor, no vuelve atrás | |
cqlsh:dim> UPDATE usuarios USING TTL 5 SET edad = 90 WHERE nombreusuario = 'antonio'; | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
federico | 60 | null | |
antonio | 90 | antonio@nuevo.com | |
carol | 26 | carol@gmail.com | |
gemelo3 | 18 | null | |
gemelo1 | 18 | null | |
gemelo2 | 18 | null | |
david | 30 | david@gmail.com | |
bea | 27 | null | |
(8 rows) | |
cqlsh:dim> | |
cqlsh:dim> //Los inserts también son updates | |
cqlsh:dim> INSERT INTO USUARIOS (nombreusuario, edad, email) VALUES ('carol', 28,'carol@gmail.com'); | |
cqlsh:dim> SELECT * FROM usuarios; | |
nombreusuario | edad | email | |
---------------+------+------------------- | |
federico | 60 | null | |
antonio | 90 | antonio@nuevo.com | |
carol | 28 | carol@gmail.com | |
gemelo3 | 18 | null | |
gemelo1 | 18 | null | |
gemelo2 | 18 | null | |
david | 30 | david@gmail.com | |
bea | 27 | null | |
(8 rows) | |
cqlsh:dim> CREATE TABLE clientes ( | |
... id UUID PRIMARY KEY, | |
... nombre text, | |
... ciudad text); | |
cqlsh:dim> | |
cqlsh:dim> INSERT INTO clientes (id, nombre, ciudad) VALUES (uuid(), 'Juan', 'Madrid'); | |
cqlsh:dim> SELECT * FROM clientes WHERE ciudad = 'Madrid'; | |
InvalidRequest: Error from server: code=2200 [Invalid query] message="Cannot execute this query as it might involve data filtering and thus may have unpredictable performance. If you want to execute this query despite the performance unpredictability, use ALLOW FILTERING" | |
cqlsh:dim> SELECT * FROM clientes WHERE ciudad = 'Madrid' ALLOW FILTERING; | |
id | ciudad | nombre | |
--------------------------------------+--------+-------- | |
d4f62d95-006b-42c9-b026-0c3a2e5e4123 | Madrid | Juan | |
(1 rows) | |
cqlsh:dim> | |
cqlsh:dim> TRUNCATE clientes; | |
cqlsh:dim> | |
cqlsh:dim> DROP TABLE clientes; | |
cqlsh:dim> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment