Apache Tajo - Sentencias SQL
En el capítulo anterior, ha entendido cómo crear tablas en Tajo. Este capítulo explica sobre la declaración SQL en Tajo.
Crear declaración de tabla
Antes de pasar a crear una tabla, cree un archivo de texto "estudiantes.csv" en la ruta del directorio de instalación de Tajo de la siguiente manera:
students.csv
Carné de identidad | Nombre | Habla a | Años | Marcas |
---|---|---|---|---|
1 | Adán | 23 calle nueva | 21 | 90 |
2 | Amit | 12 calle vieja | 13 | 95 |
3 | Beto | Calle 10 Cross | 12 | 80 |
4 | David | 15 Express Avenue | 12 | 85 |
5 | Esha | 20 Garden Street | 13 | 50 |
6 | Ganga | 25 North Street | 12 | 55 |
7 | Jack | 2 Park Street | 12 | 60 |
8 | Leena | Calle 24 Sur | 12 | 70 |
9 | María | 5 West Street | 12 | 75 |
10 | Pedro | 16 Park Avenue | 12 | 95 |
Una vez creado el archivo, muévase a la terminal e inicie el servidor Tajo y el shell uno por uno.
Crear base de datos
Cree una nueva base de datos usando el siguiente comando:
Consulta
default> create database sampledb;
OK
Conéctese a la base de datos "sampledb" que ahora se crea.
default> \c sampledb
You are now connected to database "sampledb" as user “user1”.
Luego, cree una tabla en "sampledb" de la siguiente manera:
Consulta
sampledb> create external table mytable(id int,name text,address text,age int,mark int)
using text with('text.delimiter' = ',') location ‘file:/Users/workspace/Tajo/students.csv’;
Resultado
La consulta anterior generará el siguiente resultado.
OK
Aquí, se crea la tabla externa. Ahora, solo tienes que ingresar la ubicación del archivo. Si tiene que asignar la tabla desde hdfs, utilice hdfs en lugar de file.
A continuación, el “students.csv”el archivo contiene valores separados por comas. lostext.delimiter El campo se asigna con ','.
Ahora ha creado "mytable" con éxito en "sampledb".
Mostrar tabla
Para mostrar tablas en Tajo, utilice la siguiente consulta.
Consulta
sampledb> \d
mytable
sampledb> \d mytable
Resultado
La consulta anterior generará el siguiente resultado.
table name: sampledb.mytable
table uri: file:/Users/workspace/Tajo/students.csv
store type: TEXT
number of rows: unknown
volume: 261 B
Options:
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'text.delimiter' = ','
schema:
id INT4
name TEXT
address TEXT
age INT4
mark INT4
Tabla de lista
Para obtener todos los registros de la tabla, escriba la siguiente consulta:
Consulta
sampledb> select * from mytable;
Resultado
La consulta anterior generará el siguiente resultado.
Insertar declaración de tabla
Tajo usa la siguiente sintaxis para insertar registros en la tabla.
Sintaxis
create table table1 (col1 int8, col2 text, col3 text);
--schema should be same for target table schema
Insert overwrite into table1 select * from table2;
(or)
Insert overwrite into LOCATION '/dir/subdir' select * from table;
La declaración de inserción de Tajo es similar a la INSERT INTO SELECT declaración de SQL.
Consulta
Creemos una tabla para sobrescribir los datos de una tabla existente.
sampledb> create table test(sno int,name text,addr text,age int,mark int);
OK
sampledb> \d
Resultado
La consulta anterior generará el siguiente resultado.
mytable
test
Insertar registros
Para insertar registros en la tabla de "prueba", escriba la siguiente consulta.
Consulta
sampledb> insert overwrite into test select * from mytable;
Resultado
La consulta anterior generará el siguiente resultado.
Progress: 100%, response time: 0.518 sec
Aquí, los registros de "mytable" sobrescriben la tabla de "prueba". Si no desea crear la tabla de "prueba", asigne inmediatamente la ubicación de la ruta física como se menciona en una opción alternativa para la consulta de inserción.
Obtener registros
Utilice la siguiente consulta para enumerar todos los registros en la tabla de "prueba":
Consulta
sampledb> select * from test;
Resultado
La consulta anterior generará el siguiente resultado.
Esta declaración se utiliza para agregar, eliminar o modificar columnas de una tabla existente.
Para cambiar el nombre de la tabla, use la siguiente sintaxis:
Alter table table1 RENAME TO table2;
Consulta
sampledb> alter table test rename to students;
Resultado
La consulta anterior generará el siguiente resultado.
OK
Para verificar el nombre de la tabla cambiado, use la siguiente consulta.
sampledb> \d
mytable
students
Ahora la tabla "prueba" se cambia a la tabla "estudiantes".
Añadir columna
Para insertar una nueva columna en la tabla "estudiantes", escriba la siguiente sintaxis:
Alter table <table_name> ADD COLUMN <column_name> <data_type>
Consulta
sampledb> alter table students add column grade text;
Resultado
La consulta anterior generará el siguiente resultado.
OK
Establecer propiedad
Esta propiedad se usa para cambiar la propiedad de la tabla.
Consulta
sampledb> ALTER TABLE students SET PROPERTY 'compression.type' = 'RECORD',
'compression.codec' = 'org.apache.hadoop.io.compress.Snappy Codec' ;
OK
Aquí, se asignan el tipo de compresión y las propiedades del códec.
Para cambiar la propiedad del delimitador de texto, use lo siguiente:
Consulta
ALTER TABLE students SET PROPERTY ‘text.delimiter'=',';
OK
Resultado
La consulta anterior generará el siguiente resultado.
sampledb> \d students
table name: sampledb.students
table uri: file:/tmp/tajo-user1/warehouse/sampledb/students
store type: TEXT
number of rows: 10
volume: 228 B
Options:
'compression.type' = 'RECORD'
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'compression.codec' = 'org.apache.hadoop.io.compress.SnappyCodec'
'text.delimiter' = ','
schema:
id INT4
name TEXT
addr TEXT
age INT4
mark INT4
grade TEXT
El resultado anterior muestra que las propiedades de la tabla se cambian usando la propiedad "SET".
Seleccionar declaración
La instrucción SELECT se utiliza para seleccionar datos de una base de datos.
La sintaxis de la instrucción Select es la siguiente:
SELECT [distinct [all]] * | <expression> [[AS] <alias>] [, ...]
[FROM <table reference> [[AS] <table alias name>] [, ...]]
[WHERE <condition>]
[GROUP BY <expression> [, ...]]
[HAVING <condition>]
[ORDER BY <expression> [ASC|DESC] [NULLS (FIRST|LAST)] [, …]]
Dónde cláusula
La cláusula Where se utiliza para filtrar registros de la tabla.
Consulta
sampledb> select * from mytable where id > 5;
Resultado
La consulta anterior generará el siguiente resultado.
La consulta devuelve los registros de aquellos estudiantes cuya identificación es mayor que 5.
Consulta
sampledb> select * from mytable where name = ‘Peter’;
Resultado
La consulta anterior generará el siguiente resultado.
Progress: 100%, response time: 0.117 sec
id, name, address, age
-------------------------------
10, Peter, 16 park avenue , 12
El resultado filtra solo los registros de Peter.
Cláusula distinta
Una columna de la tabla puede contener valores duplicados. La palabra clave DISTINCT se puede utilizar para devolver solo valores distintos (diferentes).
Sintaxis
SELECT DISTINCT column1,column2 FROM table_name;
Consulta
sampledb> select distinct age from mytable;
Resultado
La consulta anterior generará el siguiente resultado.
Progress: 100%, response time: 0.216 sec
age
-------------------------------
13
12
La consulta devuelve la edad distinta de los estudiantes de mytable.
Agrupar por cláusula
La cláusula GROUP BY se utiliza en colaboración con la instrucción SELECT para organizar datos idénticos en grupos.
Sintaxis
SELECT column1, column2 FROM table_name WHERE [ conditions ] GROUP BY column1, column2;
Consulta
select age,sum(mark) as sumofmarks from mytable group by age;
Resultado
La consulta anterior generará el siguiente resultado.
age, sumofmarks
-------------------------------
13, 145
12, 610
Aquí, la columna "mytable" tiene dos tipos de edades: 12 y 13. Ahora, la consulta agrupa los registros por edad y produce la suma de calificaciones para las edades correspondientes de los estudiantes.
Tener cláusula
La cláusula HAVING le permite especificar condiciones que filtran qué resultados de grupo aparecen en los resultados finales. La cláusula WHERE coloca condiciones en las columnas seleccionadas, mientras que la cláusula HAVING coloca condiciones en los grupos creados por la cláusula GROUP BY.
Sintaxis
SELECT column1, column2 FROM table1 GROUP BY column HAVING [ conditions ]
Consulta
sampledb> select age from mytable group by age having sum(mark) > 200;
Resultado
La consulta anterior generará el siguiente resultado.
age
-------------------------------
12
La consulta agrupa los registros por edad y devuelve la edad cuando el resultado de la condición suma (marca)> 200.
Ordenar por cláusula
La cláusula ORDER BY se utiliza para ordenar los datos en orden ascendente o descendente, según una o más columnas. La base de datos Tajo clasifica los resultados de la consulta en orden ascendente de forma predeterminada.
Sintaxis
SELECT column-list FROM table_name
[WHERE condition]
[ORDER BY column1, column2, .. columnN] [ASC | DESC];
Consulta
sampledb> select * from mytable where mark > 60 order by name desc;
Resultado
La consulta anterior generará el siguiente resultado.
La consulta devuelve los nombres de aquellos estudiantes en orden descendente cuyas calificaciones son superiores a 60.
Crear declaración de índice
La instrucción CREATE INDEX se utiliza para crear índices en tablas. El índice se utiliza para una rápida recuperación de datos. La versión actual admite el índice solo para formatos de TEXTO simples almacenados en HDFS.
Sintaxis
CREATE INDEX [ name ] ON table_name ( { column_name | ( expression ) }
Consulta
create index student_index on mytable(id);
Resultado
La consulta anterior generará el siguiente resultado.
id
———————————————
Para ver el índice asignado para la columna, escriba la siguiente consulta.
default> \d mytable
table name: default.mytable
table uri: file:/Users/deiva/workspace/Tajo/students.csv
store type: TEXT
number of rows: unknown
volume: 307 B
Options:
'timezone' = 'Asia/Kolkata'
'text.null' = '\\N'
'text.delimiter' = ','
schema:
id INT4
name TEXT
address TEXT
age INT4
mark INT4
Indexes:
"student_index" TWO_LEVEL_BIN_TREE (id ASC NULLS LAST )
Aquí, el método TWO_LEVEL_BIN_TREE se usa por defecto en Tajo.
Declaración de Drop Table
La instrucción Drop Table se utiliza para eliminar una tabla de la base de datos.
Sintaxis
drop table table name;
Consulta
sampledb> drop table mytable;
Para comprobar si la tabla se ha eliminado de la tabla, escriba la siguiente consulta.
sampledb> \d mytable;
Resultado
La consulta anterior generará el siguiente resultado.
ERROR: relation 'mytable' does not exist
También puede verificar la consulta usando el comando "\ d" para listar las tablas Tajo disponibles.