Created
April 25, 2020 14:35
-
-
Save Awes0meM4n/0a6128d2797328410bbfbfbb9f65c108 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
// 5 | |
CREATE KEYSPACE prueba | |
WITH REPLICATION = { | |
'class': 'SimpleStrategy', 'replication_factor': 1 | |
}; | |
USE prueba; | |
// La siguiente sentencia funciona en Cassandra | |
CREATE TABLE producto ( | |
id int, | |
nombre varchar, | |
precio float, | |
proveedor varchar, | |
PRIMARY KEY (id)); | |
INSERT INTO producto (id, nombre, precio, proveedor) | |
VALUES (1234, 'Silla Mod. 3', 75, 'Sillas Ruiz'); | |
SELECT * FROM producto WHERE id = 1234; | |
// Borramos el keyspace | |
DROP KEYSPACE prueba; | |
// 30 | |
CREATE KEYSPACE DIM | |
WITH REPLICATION = { | |
'class': 'SimpleStrategy', 'replication_factor': 1 }; | |
USE DIM; | |
// 32 | |
// algunas sentencias de consultas al repositorio | |
DESCRIBE keyspaces; | |
DESCRIBE tables; | |
//DESCRIBE NombreKeySpace; | |
// USE system_schema; | |
// DESC tables; | |
//39 | |
CREATE TABLE usuarios ( | |
nombreusuario text PRIMARY KEY, email text, edad int ); | |
//44 | |
INSERT INTO usuarios (nombreusuario, email, edad) | |
VALUES ('antonio', 'antonio@gmail.com', 25); | |
// Partial Insert | |
INSERT INTO usuarios (nombreusuario, edad) | |
VALUES ('bea', 27 ); | |
SELECT * FROM usuarios; | |
//Uso de TTL | |
INSERT INTO usuarios (nombreusuario, edad) | |
VALUES ('federico', 60) USING TTL 10; | |
// consultamos a federico | |
SELECT * FROM usuarios; | |
// y, pasados unos segundos, ya no está | |
SELECT * FROM usuarios; | |
// Algunas consultas correctas | |
SELECT * FROM usuarios; | |
SELECT * FROM usuarios LIMIT 2; | |
SELECT * FROM usuarios WHERE nombreusuario = 'antonio'; | |
SELECT nombreusuario, edad FROM usuarios WHERE nombreusuario = 'antonio'; | |
SELECT * FROM usuarios WHERE nombreusuario IN ('antonio', 'bea'); | |
// Insertamos algunas filas | |
INSERT INTO usuarios (nombreusuario, email, edad) | |
VALUES ('carol', 'carol@gmail.com', 26 ); | |
INSERT INTO usuarios (nombreusuario, email, edad) | |
VALUES ('david', 'david@gmail.com', 30 ); | |
SELECT * FROM usuarios; | |
// Cassandra no los ha insertado al final | |
// Una consulta con un error que parece que podremos resolver | |
SELECT * FROM USUARIOS WHERE email='antonio@email.com'; | |
//Una consulta con un mensaje de error | |
SELECT * FROM usuarios WHERE nombreusuario > 'david'; | |
// Probamos lo que nos dice el error | |
SELECT * FROM usuarios WHERE token(nombreusuario) > token('david'); | |
// 48 | |
CREATE TABLE t (a int, | |
b int, | |
c int, | |
d int, | |
PRIMARY KEY ((a, b), c, d) ); | |
INSERT INTO t (a,b,c,d) VALUES (0,0,0,0); | |
INSERT INTO t (a,b,c,d) VALUES (0,0,1,1); | |
INSERT INTO t (a,b,c,d) VALUES (0,1,2,2); | |
INSERT INTO t (a,b,c,d) VALUES (0,1,3,3); | |
INSERT INTO t (a,b,c,d) VALUES (1,1,4,4); | |
SELECT * FROM t; | |
//Aunque parece que van ordenados, si inserto este, vemos que no | |
INSERT INTO t (a,b,c,d) VALUES (21,1,4,4); | |
SELECT * FROM t; | |
SELECT token(a,b) FROM t; | |
// 51 | |
SELECT COUNT (*) FROM usuarios; | |
// GROUP BY funciona a partir de la ver. 3.10 | |
SELECT nombreusuario, email FROM usuarios; | |
SELECT JSON nombreusuario, email FROM usuarios; | |
SELECT nombreusuario AS nombre, email FROM usuarios; | |
// 57 | |
CREATE TABLE datos_sensor ( | |
anyo int, | |
sensor text, | |
evento timeuuid, | |
dato text, | |
PRIMARY KEY ((anyo, sensor), evento) ); | |
//Si la clave de partición es compuesta, debemos especificar todas las columnas | |
INSERT INTO datos_sensor (anyo, sensor, evento, dato) | |
VALUES (2019, 'sensor 1', NOW(), 'dato 001'); | |
INSERT INTO datos_sensor (anyo, sensor, evento, dato) | |
VALUES (2019, 'sensor 1', NOW(), 'dato 002'); | |
//Consulta incorrecta | |
SELECT * FROM datos_sensor WHERE anyo = 2019; | |
//Consulta correcta | |
SELECT * FROM datos_sensor WHERE anyo = 2019 AND sensor = 'sensor 1'; | |
// 64 | |
CREATE TABLE mensajes ( | |
nombreusuario text, | |
fecha date, | |
hora time, | |
cuerpo text, | |
PRIMARY KEY (nombreusuario, fecha, hora)); | |
//Inserciones desordenadas dentro de la misma partition | |
INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
VALUES ('antonio', '2016-11-18', '08:30:55.123', 'Antonio Update 1'); | |
INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
VALUES ('antonio', '2016-11-18', '14:40:25.123456789', 'Antonio Update 2'); | |
INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
VALUES ('antonio', '2016-11-21', '08:35:55.123456', 'Antonio Update 4'); | |
INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
VALUES ('antonio', '2016-11-21', '14:30:15.123', 'Antonio Update 5'); | |
INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
VALUES ('antonio', '2016-11-23', '14:50:45.123456', 'Antonio Update 6'); | |
INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
VALUES ('antonio', '2016-11-19', '08:25:25', 'Antonio Update 3'); | |
//En la consulta salen ordenadas por clave de clustering | |
SELECT * FROM mensajes; | |
// Consulta correcta | |
SELECT * FROM mensajes WHERE nombreusuario = 'antonio' AND fecha < '2016-11-20'; | |
//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 = | |
SELECT * FROM mensajes WHERE nombreusuario = 'antonio' AND fecha > '2016-11-20' AND hora > '12:00:00'; | |
//Consulta correcta | |
SELECT * FROM mensajes WHERE nombreusuario = 'antonio' AND fecha = '2016-11-21' AND hora > '12:00:00'; | |
// 66 | |
// Ejemplo de static usando la tabla de mensajes. | |
// La modificamos con un ALTER TABLE | |
ALTER TABLE MENSAJES ADD correo text STATIC; | |
// Cambiamos el correo, y se cambia en todos | |
UPDATE mensajes SET correo='antonio@mail.com' WHERE nombreusuario='antonio'; | |
SELECT * FROM MENSAJES; | |
//Con un insert también lo cambia | |
INSERT INTO mensajes (nombreusuario, fecha, hora, correo, cuerpo) | |
VALUES ('antonio', '2020-04-24', '09:00:00', 'antonio@otro.com', 'Antonio Update 7'); | |
// Lo cambia en todos | |
SELECT * FROM MENSAJES; | |
INSERT INTO mensajes (nombreusuario, fecha, hora, cuerpo) | |
VALUES ('antonio', '2021-04-24', '09:00:00', 'Antonio Update 8'); | |
SELECT * FROM MENSAJES; | |
// 68 | |
// Updates e inserts son upserts | |
// Un update normal | |
UPDATE usuarios SET edad = 26, email='antonio@nuevo.com' WHERE nombreusuario = 'antonio'; | |
SELECT * FROM usuarios; | |
// En este caso, como no existen, los añade | |
UPDATE usuarios SET edad=18 WHERE nombreusuario IN ('gemelo1','gemelo2','gemelo3'); | |
SELECT * FROM usuarios; | |
//Podemo usar un TTL, pero al pasar el tiempo desaparece el valor, no vuelve atrás | |
UPDATE usuarios USING TTL 5 SET edad = 90 WHERE nombreusuario = 'antonio'; | |
SELECT * FROM usuarios; | |
//Los inserts también son updates | |
INSERT INTO USUARIOS (nombreusuario, edad, email) VALUES ('carol', 28,'carol@gmail.com'); | |
SELECT * FROM usuarios; | |
// 75 | |
CREATE TABLE clientes ( | |
id UUID PRIMARY KEY, | |
nombre text, | |
ciudad text); | |
INSERT INTO clientes (id, nombre, ciudad) VALUES (uuid(), 'Juan', 'Madrid'); | |
SELECT * FROM clientes WHERE ciudad = 'Madrid'; | |
SELECT * FROM clientes WHERE ciudad = 'Madrid' ALLOW FILTERING; | |
TRUNCATE clientes; | |
DROP TABLE clientes; | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment