Учебники

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

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

Создать таблицу Заявление

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

students.csv

Я бы название Адрес Возраст Метки
1 Адам 23 New Street 21 90
2 Amit 12 Старая улица 13 95
3 боб 10 Cross Street 12 80
4 Дэвид 15 Экспресс Авеню 12 85
5 Эша 20 Garden Street 13 50
6 Ганга 25 Северная улица 12 55
7 Джек 2 Park Street 12 60
8 Лииной 24 Южная улица 12 70
9 Мэри 5 Вест Стрит 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 вместо файла.

Затем файл «student.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;

Результат

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

Список таблиц

Вставить таблицу

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

Синтаксис

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; 

Оператор вставки Тахо похож на оператор 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» перезаписывают таблицу «test». Если вы не хотите создавать таблицу «test», сразу же назначьте физический путь, как указано в альтернативной опции для запроса вставки.

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

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

запрос

sampledb> select * from test;

Результат

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

Fetch Records

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

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

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;

Результат

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

Где пункт

Запрос возвращает записи тех студентов, чей идентификатор больше 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 используется по умолчанию в Тахо.

Выписка со стола

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

Синтаксис

drop table table name;

запрос

sampledb> drop table mytable;

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

sampledb> \d mytable;

Результат

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

ERROR: relation 'mytable' does not exist 

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