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

廣告
© . All rights reserved.