📅  最后修改于: 2020-12-02 06:06:07             🧑  作者: Mango
表是一个数据源的逻辑视图。它由逻辑架构,分区,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';
这里,
外部关键字-用于创建外部表。这有助于在指定位置创建表。
示例指的是表名。
位置-这是HDFS,Amazon S3,HBase或本地文件系统的目录。要为目录分配位置属性,请使用以下URI示例-
HDFS -hdfs://本地主机:端口/路径/到/表
Amazon S3 -s3://存储桶名称/表
本地文件系统-file:/// path / to / table
Openstack Swift -swift://存储桶名称/表
外部表具有以下属性-
时区-用户可以指定用于读取或写入表的时区。
压缩格式-用于使数据大小紧凑。例如,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数据格式使用以下配置-
$ vi conf/storage-site.json {
"spaces": {
"${tablespace_name}": {
"uri": “hdfs://localhost:9000/path/to/Tajo"
}
}
}
$ 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] [(column_list)] [TABLESPACE tablespace_name]
[using [with ( = , ...)]] [AS ]
这里,
如果不存在-如果尚未创建同一表,则可以避免错误。
TABLESPACE-此子句用于分配表空间名称。
存储类型-Tajo数据支持文本,JSON,HBase,Parquet,Sequencefile和ORC等格式。
AS select语句-从另一个表中选择记录。
启动您的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-这是一种压缩格式。默认情况下,它是禁用的。您可以使用指定的算法更改设置。
时区-用于读取或写入的表。
text.error-tolerance.max-num-公差级别的最大数量。
text.skip.headerlines-每次跳过的标题行数。
text.serde-这是序列化属性。
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;
实木复合地板是一种柱状存储格式。 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是记录列文件。它由二进制键/值对组成。
以下查询是表创建的示例-
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(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索引的行数跨度。