- 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://: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://: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://: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://: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 索引步長(以行數表示)。