Apache Tajo - 表管理

表是一个数据源的逻辑视图。 它由逻辑架构、分区、URL 和各种属性组成。 一张Tajo表可以是HDFS中的一个目录、单个文件、一张HBase表或者一张RDBMS表。

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

  • 外部表
  • 内部表格

外部表

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

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

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

此处,

  • External keyword − 这用于创建外部表。 这有助于在指定位置创建表格。

  • 示例指的是表名。

  • Location − 它是 HDFS、Amazon S3、HBase 或本地文件系统的目录。 要为目录分配位置属性,请使用以下 URI 示例 −

    • HDFS − hdfs://localhost:port/path/to/table

    • Amazon S3 − s3://bucket-name/table

    • local file system − file:///path/to/table

    • Openstack Swift − swift://bucket-name/table

表属性

外部表具有以下属性 −

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

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

内部表

内部表也称为托管表。 它是在称为表空间的预定义物理位置中创建的。

语法

create table table1(col1 int,col2 text);

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

表空间

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

表空间配置

您在 Tajo 中有"conf/tajo-site.xml.template"。 复制该文件并将其重命名为"storagesite.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:port,quorum2:port/"  
      } 
   } 
}

文本文件配置

$ 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>]

此处,

  • IF NOT EXISTS − 如果尚未创建相同的表,这可以避免出现错误。

  • TABLESPACE − 该子句用于指定表空间名称。

  • Storage type − Tajo数据支持text、JSON、HBase、Parquet、Sequencefile、ORC等格式。

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

配置表空间

启动 Hadoop 服务并打开文件"conf/storage-site.json",然后添加以下更改 −

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

这里,Tajo 将引用 HDFS 位置的数据,space1 是表空间名称。 如果不启动Hadoop服务,则无法注册表空间。

查询

default> create table table1(num1 int,num2 text,num3 float) tablespace space1;

上面的查询创建了一个名为"table1"的表,"space1"指的是表空间名称。

数据格式

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

文本

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

创建表

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 的默认表空间。

属性

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

  • text.delimiter − 这是一个分隔符。 默认为"|"。

  • compression.codec − 这是一种压缩格式。 默认情况下,它是禁用的。 您可以使用指定的算法更改设置。

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

  • text.error-tolerance.max-num − 最大容忍级别数。

  • text.skip.headerlines − 每次跳过的标题行数。

  • 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 格式创建表。

查询

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 − 布尔值用于启用/禁用字典编码。

RC文件

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

表创建

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

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

RCFile 具有以下属性 −

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

  • compression.codec − 压缩算法。

  • rcfile.null − 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(优化行列式)是 Hive 的列式存储格式。

表创建

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

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

ORC格式具有以下属性 −

  • orc.max.merge.distance − 读取ORC文件,距离较小时进行合并。

  • orc.stripe.size − 这是每个 stripe 的大小。

  • orc.buffer.size − 默认为 256KB。

  • orc.rowindex.stride − 这是 ORC 索引跨度(以行数为单位)。