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索引步长的行数。