Apache-tajo-table-management

提供:Dev Guides
移動先:案内検索

Apache Tajo-テーブル管理

テーブルは、1つのデータソースの論理ビューです。 論理スキーマ、パーティション、URL、およびさまざまなプロパティで構成されます。 Tajoテーブルは、HDFSのディレクトリ、単一のファイル、1つのHBaseテーブル、またはRDBMSテーブルにすることができます。

Tajoは、次の2種類のテーブルをサポートしています-

  • 外部テーブル
  • 内部テーブル

外部テーブル

外部テーブルには、テーブルの作成時に場所プロパティが必要です。 たとえば、データが既に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://localhost: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://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 -この句は、テーブルスペース名を割り当てるために使用されます。
  • ストレージタイプ-Tajoデータは、text、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はデータ形式をサポートしています。 それぞれの形式について詳しく見ていきましょう。

Text

文字区切り値のプレーンテキストファイルは、行と列で構成される表形式のデータセットを表します。 各行はプレーンテキストの行です。

テーブルを作成する

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レコードとして扱います。 1つのオブジェクトは、Tajoテーブルの1行に相当します。 次のように「array.json」を考えてみましょう-

$ hdfs dfs -cat/json/array.json {
   "num1" : 10,
   "num2" : "simple json array",
   "num3" : 50.5
}

このファイルを作成したら、Tajoシェルに切り替えて次のクエリを入力し、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.block.size -メモリにバッファされる行グループのサイズ。
  • parquet.page.size -ページサイズは圧縮用です。
  • parquet.compression -ページの圧縮に使用される圧縮アルゴリズム。
  • parquet.enable.dictionary -ブール値は、辞書のエンコードを有効/無効にすることです。

RCFile

RCFileはRecord Columnar Fileです。 バイナリキー/値のペアで構成されます。

テーブル作成

次のクエリは、テーブル作成の例です-

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(最適化された行の列)は、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インデックスストライドです。