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.