Apache Tajo - операторы SQL

В предыдущей главе вы узнали, как создавать таблицы в Tajo. В этой главе рассказывается об операторе SQL в Tajo.

Создать оператор таблицы

Прежде чем переходить к созданию таблицы, создайте текстовый файл «student.csv» в пути к установочному каталогу Tajo следующим образом:

students.csv

Мне бы название Адрес Возраст Метки
1 Адам 23 Нью-Стрит 21 год 90
2 Амит 12 Old Street 13 95
3 Боб 10 Cross Street 12 80
4 Дэвид 15 Express Avenue 12 85
5 Эша 20 Garden Street 13 50
6 Ганга 25 Северная улица 12 55
7 Джек 2 Park Street 12 60
8 Лина 24 Южная улица 12 70
9 Мэри 5 West Street 12 75
10 Питер 16 Парк Авеню 12 95

После создания файла перейдите к терминалу и запустите сервер Tajo и оболочку один за другим.

Создать базу данных

Создайте новую базу данных, используя следующую команду -

Запрос

default> create database sampledb; 
OK

Подключитесь к базе данных «sampledb», которая теперь создана.

default> \c sampledb 
You are now connected to database "sampledb" as user “user1”.

Затем создайте таблицу в «sampledb» следующим образом:

Запрос

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’;

Результат

Вышеупомянутый запрос даст следующий результат.

OK

Здесь создается внешняя таблица. Теперь вам просто нужно указать местоположение файла. Если вам нужно назначить таблицу из hdfs, используйте hdfs вместо файла.

Далее “students.csv”файл содержит значения, разделенные запятыми. Вtext.delimiter поле обозначается символом ','.

Вы успешно создали mytable в sampledb.

Показать таблицу

Чтобы показать таблицы в Tajo, используйте следующий запрос.

Запрос

sampledb> \d  
mytable  
sampledb> \d mytable

Результат

Вышеупомянутый запрос даст следующий результат.

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

Таблица списка

Чтобы получить все записи в таблице, введите следующий запрос -

Запрос

sampledb> select * from mytable;

Результат

Вышеупомянутый запрос даст следующий результат.

Вставить оператор таблицы

Tajo использует следующий синтаксис для вставки записей в таблицу.

Синтаксис

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;

Оператор вставки Tajo похож на оператор INSERT INTO SELECT утверждение SQL.

Запрос

Создадим таблицу для перезаписи табличных данных существующей таблицы.

sampledb> create table test(sno int,name text,addr text,age int,mark int);  
OK 
sampledb> \d

Результат

Вышеупомянутый запрос даст следующий результат.

mytable 
test

Вставить записи

Чтобы вставить записи в «тестовую» таблицу, введите следующий запрос.

Запрос

sampledb> insert overwrite into test select * from mytable;

Результат

Вышеупомянутый запрос даст следующий результат.

Progress: 100%, response time: 0.518 sec

Здесь записи «mytable» перезаписывают «тестовую» таблицу. Если вы не хотите создавать «тестовую» таблицу, сразу же назначьте местоположение физического пути, как указано в альтернативном варианте для запроса вставки.

Получить записи

Используйте следующий запрос, чтобы перечислить все записи в «тестовой» таблице -

Запрос

sampledb> select * from test;

Результат

Вышеупомянутый запрос даст следующий результат.

Этот оператор используется для добавления, удаления или изменения столбцов существующей таблицы.

Чтобы переименовать таблицу, используйте следующий синтаксис -

Alter table table1 RENAME TO table2;

Запрос

sampledb> alter table test rename to students;

Результат

Вышеупомянутый запрос даст следующий результат.

OK

Чтобы проверить измененное имя таблицы, используйте следующий запрос.

sampledb> \d  
mytable 
students

Теперь таблица «тест» заменена на таблицу «студенты».

Добавить столбец

Чтобы вставить новый столбец в таблицу «студенты», введите следующий синтаксис -

Alter table <table_name> ADD COLUMN <column_name> <data_type>

Запрос

sampledb> alter table students add column grade text;

Результат

Вышеупомянутый запрос даст следующий результат.

OK

Установить свойство

Это свойство используется для изменения свойства таблицы.

Запрос

sampledb> ALTER TABLE students SET PROPERTY 'compression.type' = 'RECORD',
   'compression.codec' = 'org.apache.hadoop.io.compress.Snappy Codec' ; 
OK

Здесь назначаются тип сжатия и свойства кодека.

Чтобы изменить свойство текстового разделителя, используйте следующее:

Запрос

ALTER TABLE students  SET PROPERTY ‘text.delimiter'=',';  
OK

Результат

Вышеупомянутый запрос даст следующий результат.

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

Приведенный выше результат показывает, что свойства таблицы изменяются с помощью свойства «SET».

Выбрать заявление

Оператор SELECT используется для выбора данных из базы данных.

Синтаксис оператора Select следующий:

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)] [, …]]

Где пункт

Предложение Where используется для фильтрации записей из таблицы.

Запрос

sampledb> select * from mytable where id > 5;

Результат

Вышеупомянутый запрос даст следующий результат.

Запрос возвращает записи тех студентов, у которых id больше 5.

Запрос

sampledb> select * from mytable where name = ‘Peter’;

Результат

Вышеупомянутый запрос даст следующий результат.

Progress: 100%, response time: 0.117 sec 
 
  id,  name,  address,   age  
------------------------------- 
10,  Peter,  16 park avenue , 12

Результат фильтрует только записи Питера.

Особая оговорка

Столбец таблицы может содержать повторяющиеся значения. Ключевое слово DISTINCT может использоваться для возврата только различных (разных) значений.

Синтаксис

SELECT DISTINCT column1,column2 FROM table_name;

Запрос

sampledb> select distinct age from mytable;

Результат

Вышеупомянутый запрос даст следующий результат.

Progress: 100%, response time: 0.216 sec  
age 
------------------------------- 
13 
12

Запрос возвращает различный возраст студентов из mytable.

Группировать по пунктам

Предложение GROUP BY используется совместно с оператором SELECT для организации идентичных данных в группы.

Синтаксис

SELECT column1, column2 FROM table_name WHERE [ conditions ] GROUP BY column1, column2;

Запрос

select age,sum(mark) as sumofmarks from mytable group by age;

Результат

Вышеупомянутый запрос даст следующий результат.

age,  sumofmarks 
------------------------------- 
13,  145 
12,  610

Здесь столбец «mytable» имеет два типа возраста - 12 и 13. Теперь запрос группирует записи по возрасту и дает сумму оценок для соответствующего возраста учащихся.

Имея пункт

Предложение HAVING позволяет указать условия, которые фильтруют результаты группы, которые появляются в окончательных результатах. Предложение WHERE ставит условия для выбранных столбцов, тогда как предложение HAVING ставит условия для групп, созданных предложением GROUP BY.

Синтаксис

SELECT column1, column2 FROM table1 GROUP BY column HAVING [ conditions ]

Запрос

sampledb> select age from mytable group by age  having  sum(mark) > 200;

Результат

Вышеупомянутый запрос даст следующий результат.

age 
------------------------------- 
12

Запрос группирует записи по возрасту и возвращает возраст, когда сумма результата условия (отметка)> 200.

Заказ по пункту

Предложение ORDER BY используется для сортировки данных в порядке возрастания или убывания на основе одного или нескольких столбцов. По умолчанию база данных Tajo сортирует результаты запросов в порядке возрастания.

Синтаксис

SELECT column-list FROM table_name  
[WHERE condition]  
[ORDER BY column1, column2, .. columnN] [ASC | DESC];

Запрос

sampledb> select * from mytable where mark > 60 order by name desc;

Результат

Вышеупомянутый запрос даст следующий результат.

Запрос возвращает имена тех студентов в порядке убывания, чьи оценки выше 60.

Создать оператор индекса

Оператор CREATE INDEX используется для создания индексов в таблицах. Индекс используется для быстрого поиска данных. Текущая версия поддерживает индекс только для простых текстовых форматов, хранящихся в HDFS.

Синтаксис

CREATE INDEX [ name ] ON table_name ( { column_name | ( expression ) }

Запрос

create index student_index on mytable(id);

Результат

Вышеупомянутый запрос даст следующий результат.

id 
———————————————

Чтобы просмотреть назначенный индекс для столбца, введите следующий запрос.

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 )

Здесь метод TWO_LEVEL_BIN_TREE используется по умолчанию в Tajo.

Оператор Drop Table

Оператор Drop Table используется для удаления таблицы из базы данных.

Синтаксис

drop table table name;

Запрос

sampledb> drop table mytable;

Чтобы проверить, была ли таблица удалена из таблицы, введите следующий запрос.

sampledb> \d mytable;

Результат

Вышеупомянутый запрос даст следующий результат.

ERROR: relation 'mytable' does not exist

Вы также можете проверить запрос, используя команду «\ d», чтобы вывести список доступных таблиц Tajo.