Skip to content

Instantly share code, notes, and snippets.

@Awes0meM4n
Created April 25, 2020 14:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Awes0meM4n/0a6128d2797328410bbfbfbb9f65c108 to your computer and use it in GitHub Desktop.
Save Awes0meM4n/0a6128d2797328410bbfbfbb9f65c108 to your computer and use it in GitHub Desktop.
// 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