- Apache Tajo 教程
- Apache Tajo - 首页
- Apache Tajo - 简介
- Apache Tajo - 架构
- Apache Tajo - 安装
- Apache Tajo - 配置设置
- Apache Tajo - Shell 命令
- Apache Tajo - 数据类型
- Apache Tajo - 运算符
- Apache Tajo - SQL 函数
- Apache Tajo - 数学函数
- Apache Tajo - 字符串函数
- Apache Tajo - 日期时间函数
- Apache Tajo - JSON 函数
- Apache Tajo - 数据库创建
- Apache Tajo - 表管理
- Apache Tajo - SQL 语句
- 聚合与窗口函数
- Apache Tajo - SQL 查询
- Apache Tajo - 存储插件
- 与 HBase 集成
- Apache Tajo - 与 Hive 集成
- OpenStack Swift 集成
- Apache Tajo - JDBC 接口
- Apache Tajo - 自定义函数
- Apache Tajo 有用资源
- Apache Tajo - 快速指南
- Apache Tajo - 有用资源
- Apache Tajo - 讨论
Apache Tajo - 表管理
表是对单个数据源的逻辑视图。它由逻辑模式、分区、URL 和各种属性组成。Tajo 表可以是 HDFS 中的目录、单个文件、一个 HBase 表或一个 RDBMS 表。
Tajo 支持以下两种类型的表:
- 外部表
- 内部表
外部表
创建外部表时需要 location 属性。例如,如果您的数据已以 Text/JSON 文件或 HBase 表的形式存在,您可以将其注册为 Tajo 外部表。
以下查询是创建外部表的示例。
create external table sample(col1 int,col2 text,col3 int) location ‘hdfs://path/to/table';
这里:
External 关键字 - 用于创建外部表。这有助于在指定位置创建表。
Sample 指的是表名。
Location - 它是 HDFS、Amazon S3、HBase 或本地文件系统的目录。要为目录分配 location 属性,请使用以下 URI 示例:
HDFS - hdfs://127.0.0.1:port/path/to/table
Amazon S3 - s3://bucket-name/table
本地文件系统 - file:///path/to/table
Openstack Swift - swift://bucket-name/table
表属性
外部表具有以下属性:
TimeZone - 用户可以指定用于读取或写入表的时区。
压缩格式 - 用于使数据大小更紧凑。例如,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://127.0.0.1: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://127.0.0.1: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 - 此子句用于分配表空间名称。
存储类型 - Tajo 数据支持 text、JSON、HBase、Parquet、Sequencefile 和 ORC 等格式。
AS select 语句 - 从另一个表中选择记录。
配置表空间
启动您的 Hadoop 服务并打开文件“conf/storage-site.json”,然后添加以下更改:
$ vi conf/storage-site.json { "spaces": { “space1”: { "uri": “hdfs://127.0.0.1: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 - 布尔值用于启用/禁用字典编码。
RCFile
RCFile 是记录列式文件。它由二进制键/值对组成。
表创建
以下查询是表创建的示例:
CREATE TABLE Record(num1 int,num2 text,num3 float) USING RCFILE;
RCFile 具有以下属性:
rcfile.serde - 自定义反序列化类。
compression.codec - 压缩算法。
rcfile.null - NULL 字符。
SequenceFile
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 文件时,当距离较低时会进行合并。
orc.stripe.size - 这是每个条带的大小。
orc.buffer.size - 默认值为 256KB。
orc.rowindex.stride - 这是 ORC 索引步长(以行数表示)。