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.