开发手册 欢迎您!
软件开发者资料库

Apache Tajo - SQL语句

Apache Tajo SQL语句 - 从简单和简单的步骤学习Apache Tajo,从基本到高级概念,包括简介,体系结构,安装,配置设置,Shell命令,数据类型,操作符,SQL函数,数学函数,字符串函数,日期时间函数,JSON函数,数据库创建,表管理,SQL语句,聚合和窗口函数,SQL查询,存储插件,与HBase集成,与Hive集成,OpenStack Swift集成,JDBC接口,自定义函数。

在上一章中,您已了解如何在Tajo中创建表.本章介绍了Tajo中的SQL语句.

创建表语句

在移动创建表之前,创建一个文本文件"students.csv" "在Tajo安装目录路径中如下 :

students.csv

IdNameAddress年龄标记
1 Adam23 New Street2190
2 Amit12 Old Street1395
3 Bob10 Cross街道1280
4 David15 Express Avenue1285
5 Esha20花园街1350
6 Ganga25 North Street1255
7 Jack2 Park Street1260
8 Leena24 South Street1270
9 Mary5 West Street1275
10 Peter16 Park Avenue1295

创建文件后,移动到终端并逐个启动Tajo服务器和shell.

创建D. atabase

使用以下命令创建新数据库 :

查询

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而不是file.

接下来,"students.csv"文件包含逗号分隔值. text.delimiter 字段分配了','.

您现在已经在"sampledb"中成功创建了"mytable".

显示表

要在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 BOptions: '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语句类似于SQL的 INSERT INTO SELECT 语句.

查询

让我们创建一个表来覆盖现有表的表数据.

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

结果

上述查询将产生以下结果.

mytable test

插入记录

要在"test"表中插入记录,请键入以下查询.

查询

sampledb> insert overwrite into test select * from mytable;

结果

上述查询将产生以下结果.

Progress: 100%, response time: 0.518 sec

此处,"mytable"记录覆盖"test"表如果您不想创建"测试"表,则立即分配物理路径位置,如插入查询的替代选项中所述.

获取记录

使用以下查询列出"test"表中的所有记录 :

查询

sampledb> select * from test;

结果

以上查询将生成以下结果.

获取记录

此语句用于添加,删除或修改现有表的列.

要重命名表,请使用以下语法 :

Alter table table1 RENAME TO table2;

查询

sampledb> alter table test rename to students;

结果

上述查询将产生以下结果.

OK

要检查更改的表名,请使用以下查询.

sampledb> \d  mytable students

现在表"test"改为"学生"表.

添加列

要在"学生"表中插入新列,请键入以下语法 :

Alter table  ADD COLUMN  

查询

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]] * |  [[AS] ] [, ...]    [FROM  [[AS] ] [, ...]]    [WHERE ]    [GROUP BY  [, ...]]    [HAVING ]    [ORDER BY  [ASC|DESC] [NULLS (FIRST|LAST)] [, …]]

Where子句

Where子句用于过滤表中的记录.

查询

sampledb> select * from mytable where id > 5;

结果

上述查询将生成以下结果.

Where子句

查询返回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

结果只过滤了Peter的记录.

不同的条款

表格列可能包含重复的值. 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 Clause

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 )

此处,Tajo默认使用TWO_LEVEL_BIN_TREE方法.

Drop Table语句

Drop Table语句用于从数据库中删除表.

语法

drop table table name;

查询

sampledb> drop table mytable;

要检查表是否已从表中删除,请输入以下查询.

sampledb> \d mytable;

结果

上述查询将产生以下结果.

ERROR: relation 'mytable' does not exist

您还可以使用"\d"命令检查查询列出可用的Tajo表.