Apache Tajo 表管理
表是一个数据源的逻辑视图。它由逻辑模式、分区、URL 和各种属性组成。 Tajo 表可以是 HDFS 中的目录、单个文件、一个 HBase 表或 RDBMS 表。
Tajo 支持以下两种类型的表:
- 外部表
- internal table
外部表
外部表在创建表时需要 location 属性。例如,如果你的数据已经作为 Text/JSON 文件或 HBase 表存在,你可以将其注册为 Tajo 外部表。
以下查询是创建外部表的示例。
create external table sample(col1 int,col2 text,col3 int) location ‘hdfs://路径/到/表';
Here,
-
外部关键字 : 这个是用来创建外部表的。这有助于在指定位置创建表。
-
Sample 是指表名。
-
Location : HDFS、Amazon S3、HBase或本地文件系统的目录。要为目录分配位置属性,请使用以下 URI 示例:
-
HDFS : hdfs://localhost:port/path/to/table
-
亚马逊 S3 : s3://bucket-name/table
-
本地文件系统 : file:///path/to/table
-
Openstack 斯威夫特 : swift://bucket-name/table
-
表属性
外部表具有以下属性:
-
TimeZone : 用户可以指定一个时区来读写表格。
-
压缩格式 : 用于使数据大小紧凑。例如,text/json 文件使用 压缩.编解码器 财产。
内部表
内部表也称为 托管表 .它是在称为表空间的预定义物理位置中创建的。
语法
create table table1(col1 int,col2 text);
默认情况下,Tajo 使用位于“conf/tajo-site.xml”中的“tajo.warehouse.directory”。要为表分配新位置,你可以使用表空间配置。
表空间
表空间用于定义存储系统中的位置。仅内部表支持它。你可以通过名称访问表空间。每个表空间可以使用不同的存储类型。如果你不指定表空间,那么 Tajo 将使用根目录中的默认表空间。
表空间配置
You have “conf/tajo-site.xml.template” 在Tajo 。复制文件并将其重命名为 “存储站点.json” .该文件将作为表空间的配置。 Tajo 数据格式使用如下配置:
HDFS 配置
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": { "uri": “hdfs:// localhost:9000/path/to/Tajo" } } }
HBase 配置
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": { "uri": “hbase:zk:// quorum1:端口,quorum2:端口/" } } }
文本文件配置
$ vi conf/storage-site.json { "spaces": { "${tablespace_name}": { “uri”: “hdfs:// localhost:9000/path/to/Tajo” } } }
表空间创建
Tajo 的内部表记录只能从另一个表中访问。你可以使用表空间对其进行配置。
语法
CREATE TABLE [IF NOT EXISTS] <table_name> [(column_list)] [TABLESPACE tablespace_name] [using <storage_type> [with (<key> = <value>, ...)]] [AS <select_statement>]
Here,
-
如果不存在 : 这样可以避免在同一个表还没有创建的情况下报错。
-
表空间 : 该子句用于分配表空间名称。
-
存储类型 : Tajo 数据支持文本、JSON、HBase、Parquet、Sequencefile 和 ORC 等格式。
-
AS 选择语句 : 从另一个表中选择记录。
配置表空间
启动 Hadoop 服务并打开文件 “conf/storage-site.json” ,然后添加以下更改:
$ vi conf/storage-site.json { "spaces": { “space1”: { "uri": “hdfs:// localhost:9000/path/to/Tajo" } } }
在这里,Tajo 将引用来自 HDFS 位置的数据和 space1 是表空间名称。如果不启动 Hadoop 服务,则无法注册表空间。
Query
default> create table table1(num1 int,num2 text,num3 float) tablespace space1;
上面的查询创建了一个名为“table1”的表,“space1”指的是表空间名称。
数据格式
Tajo 支持数据格式。让我们一一详细介绍每种格式。
Text
字符分隔值的纯文本文件表示由行和列组成的表格数据集。每行都是一个纯文本行。
创建表
default> create external table customer(id int,name text,address text,age int) using text with('text.delimiter'=',') location ‘file:/Users/workspace/Tajo/customers.csv’;
Here, “客户.csv” file 是指位于 Tajo 安装目录中的逗号分隔值文件。
要使用文本格式创建内部表,请使用以下查询:
default> create table customer(id int,name text,address text,age int) using text;
在上面的查询中,你没有分配任何表空间,因此它将使用 Tajo 的默认表空间。
特性
文本文件格式具有以下属性:
-
文本分隔符 :这是一个分隔符。默认为“|”。
-
压缩.编解码器 : 这是一种压缩格式。默认情况下,它被禁用。你可以使用指定的算法更改设置。
-
timezone : 用于读或写的表。
-
text.error-tolerance.max-num : 最大公差等级数。
-
text.skip.headerlines :每次跳过的标题行数。
-
文本.serde : 这是序列化属性。
JSON
Apache Tajo 支持 JSON 格式的数据查询。 Tajo 将 JSON 对象视为 SQL 记录。一个对象等于 Tajo 表中的一行。让我们考虑“array.json”如下:
$ hdfs dfs -cat /json/array.json { "num1" : 10, "num2" : "simple json array", "num3" : 50.5 }
创建此文件后,切换到 Tajo shell 并键入以下查询以使用 JSON 格式创建表。
Query
default> create external table sample (num1 int,num2 text,num3 float) using json location ‘json/array.json’;
永远记住文件数据必须与表模式匹配。否则,你可以省略列名并使用不需要列列表的 *。
要创建内部表,请使用以下查询:
default> create table sample (num1 int,num2 text,num3 float) using json;
Parquet
Parquet 是一种列式存储格式。 Tajo 使用 Parquet 格式来轻松、快速和高效地访问。
表创建
以下查询是创建表的示例:
CREATE TABLE parquet (num1 int,num2 text,num3 float) USING PARQUET;
Parquet 文件格式具有以下属性:
-
parquet.block.size :缓存在内存中的行组的大小。
-
parquet.page.size : 页面大小用于压缩。
-
parquet.compression : 用于压缩页面的压缩算法。
-
parquet.enable.dictionary :布尔值是启用/禁用字典编码。
RCFile
RCFile 是记录列文件。它由二进制键/值对组成。
表创建
以下查询是创建表的示例:
CREATE TABLE Record(num1 int,num2 text,num3 float) USING RCFILE;
RCFile 具有以下属性:
-
rcfile.serde :自定义解串器类。
-
压缩.编解码器 :压缩算法。
-
rcfile.null :空字符。
序列文件
SequenceFile 是 Hadoop 中的一种基本文件格式,由键/值对组成。
表创建
以下查询是创建表的示例:
CREATE TABLE seq(num1 int,num2 text,num3 float) USING sequencefile;
此序列文件具有 Hive 兼容性。这可以在 Hive 中写为,
CREATE TABLE table1 (id int, name string, score float, type string) STORED AS sequencefile;
ORC
ORC (Optimized Row Columnar) 是 Hive 的一种列式存储格式。
表创建
以下查询是创建表的示例:
CREATE TABLE optimized(num1 int,num2 text,num3 float) USING ORC;
ORC 格式具有以下属性:
-
orc.max.merge.distance : 读取ORC文件,距离越小就合并。
-
兽人条纹尺寸 : 这是每个条纹的大小。
-
兽人缓冲区大小 : 默认为256KB。
-
orc.rowindex.stride :这是ORC索引步长的行数。