Apache Tajo 简明教程

Apache Tajo - Table Management

表是某个数据源的逻辑视图。它包含逻辑模式、分区、URL 和各种属性。Tajo 表可以是 HDFS 中的目录、单个文件、某个 HBASE 表或某个 RDBMS 表。

Tajo 支持以下两种类型的表 −

  1. external table

  2. internal table

External Table

外部表在创建表时需要 location 属性。例如,如果你的数据已作为文本/JSON 文件或 HBASE 表存在,你可以将它注册为 Tajo 外部表。

以下查询是外部表创建的示例。

create external table sample(col1 int,col2 text,col3 int) location ‘hdfs://path/to/table';

在此,

  1. External keyword − 这用于创建外部表,用于在指定位置创建表。

  2. Sample 指代表名称。

  3. Location − 它是 HDFS、Amazon S3、HBASE 或本地文件系统的目录。要为目录分配 location 属性,请使用以下 URI 示例 − HDFS − hdfs://localhost:port/path/to/table Amazon S3 − s3://bucket-name/table local file system − [role="bare"] [role="bare"]file:///path/to/table Openstack Swift − swift://bucket-name/table

Table Properties

外部表具有以下属性 −

  1. TimeZone − 用户可以指定时区以读取或写入表。

  2. Compression format − 用于压缩数据大小。例如,text/json 文件使用 compression.codec 属性。

Internal Table

内部表也称为 Managed Table 。它创建于一个称为表空间的预定义物理位置中。

Syntax

create table table1(col1 int,col2 text);

默认情况下,Tajo 使用位于“conf/tajo-site.xml”中的“tajo.warehouse.directory”。要为表分配新位置,你可以使用表空间配置。

Tablespace

表空间用于定义存储系统中的位置。它仅支持内部表。你可以按名称访问表空间。每个表空间可以使用不同的存储类型。如果你不指定表空间,Tajo 则在根目录中使用默认表空间。

Tablespace Configuration

你在 Tajo 中有 “conf/tajo-site.xml.template” 。复制此文件并将其重命名为 “storagesite.json” 。此文件会充当表空间的配置。Tajo 数据格式使用以下配置 −

HDFS Configuration

$ vi conf/storage-site.json {
   "spaces": {
      "${tablespace_name}": {
         "uri": “hdfs://localhost:9000/path/to/Tajo"
      }
   }
}

HBase Configuration

$ vi conf/storage-site.json {
   "spaces": {
      "${tablespace_name}": {
         "uri": “hbase:zk://quorum1:port,quorum2:port/"
      }
   }
}

Text File Configuration

$ vi conf/storage-site.json {
   "spaces": {
      "${tablespace_name}": {
         “uri”: “hdfs://localhost:9000/path/to/Tajo”
      }
   }
}

Tablespace Creation

只能从另一个表中访问 Tajo 的内部表记录。你可以使用表空间对其进行配置。

Syntax

CREATE TABLE [IF NOT EXISTS] <table_name> [(column_list)] [TABLESPACE tablespace_name]
[using <storage_type> [with (<key> = <value>, ...)]] [AS <select_statement>]

在此,

  1. IF NOT EXISTS − 如果尚未创建同名表,此配置可以避免出错。

  2. TABLESPACE − 此子句用于分配表空间名称。

  3. Storage type − Tajo 数据支持文本、JSON、HBase、Parquet、序列文件和 ORC 等格式。

  4. AS select statement − 从另一个表中选择记录。

Configure Tablespace

启动 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”引用表空间名称。

Data formats

Tajo 支持数据格式。让我们详细逐一了解每种格式。

Text

字符分隔值的文件纯文本表示由行和列组成的表格数据集。每行都是一个纯文本行。

Creating Table

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’;

在此, “customers.csv” 文件引用位于 Tajo 安装目录中的逗号分隔值文件。

要使用文本格式创建内部表,请使用以下查询 −

default> create table customer(id int,name text,address text,age int) using text;

在上述查询中,您尚未分配任何表空间,因此它将使用 Tajo 的默认表空间。

Properties

文本文件格式具有以下属性 −

  1. text.delimiter − 这是分界符字符。默认值是“|”。

  2. compression.codec − 这是压缩格式。默认情况下,它处于禁用状态。您可以使用指定算法更改设置。

  3. timezone − 用于读取或写入的表。

  4. text.error-tolerance.max-num − 最大容差级别数。

  5. text.skip.headerlines − 跳过的头行数。

  6. text.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 格式轻松、快速、高效地访问。

Table creation

以下查询是创建表的示例 −

CREATE TABLE parquet (num1 int,num2 text,num3 float) USING PARQUET;

Parquet 文件格式具有以下属性 −

  1. parquet.block.size − 在内存中缓冲的行组大小。

  2. parquet.page.size − 页面大小用于压缩。

  3. parquet.compression − 用于压缩页面的压缩算法。

  4. parquet.enable.dictionary − 布尔值可以启用/禁用字典编码。

RCFile

RCFile 是记录列式文件。它由二进制键值对组成。

Table creation

以下查询是创建表的示例 −

CREATE TABLE Record(num1 int,num2 text,num3 float) USING RCFILE;

RCFile 具有以下属性 −

  1. rcfile.serde − 自定义反序列化器类。

  2. compression.codec − compression algorithm.

  3. rcfile.null − NULL character.

SequenceFile

SequenceFile 是 Hadoop 中的基本文件格式,它由键值对组成。

Table creation

以下查询是创建表的示例 −

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(优化行列式)是 Hive 中的列式存储格式。

Table creation

以下查询是创建表的示例 −

CREATE TABLE optimized(num1 int,num2 text,num3 float) USING ORC;

ORC 格式具有以下属性 −

  1. orc.max.merge.distance − 读入 ORC 文件时,如果距离较低,则合并。

  2. orc.stripe.size − 这是每个条带的大小。

  3. orc.buffer.size − 默认值为 256KB。

  4. orc.rowindex.stride − 这是行数中 ORC 索引步长。