2015/03/02 Version 1.0.0

データベースとテーブル

データベースとテーブルは、解析対象データの定義情報を保持します。
データベースは解析対象データが格納されているバケット名を保持します。
テーブルは解析対象データが格納されているディレクトリのオブジェクトキーと、定義情報を保持します。

データベース・テーブルは クラスタ ごとに保存されます。
異なる クラスタ では異なるデータベース・テーブルが格納されます。

バケットやオブジェクト、オブジェクトキーに関しての詳細はストレージの開発者ガイド はじめに をご覧ください。

Note

解析オプションにおけるオブジェクトキーの扱いについて

解析オプションでは、ストレージのオブジェクトキーを全てスラッシュ(‘/’)区切りで扱います。
また、個々の’/’区切りの階層をディレクトリと呼称します。

Note

データベース作成およびテーブル作成 APIで作成されるオブジェクトについて

データベース名と同名のバケットに0バイトのオブジェクトを作成します。
このオブジェクトに対し削除等の操作は行わないでください。
削除、変更を行うとクエリの実行に失敗することがあります。
このオブジェクトはデータベース削除 APIによりデータベースを削除した以降に削除を行って下さい。

データベース

データベースは、解析対象データが格納されているバケット名を保持します。
データベース名はバケット名と一対一に対応します。

Note

データベース名には以下の制約があります。

  • 文字列の長さが3~63の範囲内である。
  • 小文字(a-z)、数字(0-9)で構成される。
  • ‘default’ではない。

ストレージの1つのバケット (= データベース) に格納可能なオブジェクトの数に制限はありませんが、バケットは1契約につき最大で100個まで作成することができます。データベース名’default’は予約語のため使用できません。

Note

データベースへのアクセス権限について

データベースを作成および利用する際は、同名のバケットに対するreadおよびwriteの権限が必要です。詳しくはストレージの開発者ガイドをご覧下さい。

テーブル

テーブルは、解析対象データが格納されているディレクトリや、形式 (csvやjsonなど)、列の名前や型といった定義情報を持ちます。
テーブルは、データベースに複数格納することができます。

解析処理は、テーブル名に一致するディレクトリを解析対象データの取得元として処理します。
解析対象データはテーブル名に指定したディレクトリの直下に存在する必要があります。

バケット名がsampledb、オブジェクトキーがsampletbl/testdataであるオブジェクトを解析対象データとする場合は、
sampledbデータベースにsampletblテーブルを作成します。

Note

テーブル名には以下の制約があります。

  • 文字列の長さが1~128の範囲内である。
  • 半角英小文字(a-z)、数字(0-9)とアンダースコア(_)で構成される。

Note

データベースと同名のバケットに、テーブル名と同名のオブジェクトが存在する場合、
ディレクトリを作成出来ないためエラーとなります。
該当のオブジェクトを削除するか、テーブル名を変更してください。

フォーマット

フォーマットは、データの形式を表します。
本サービスにて使用可能なフォーマットにはcsv, tsv, json, json_agentがあります。
全てのフォーマットで行の区切りは改行とし、各行はLFによる改行 (\n) で区切られている必要があります。
また、要素中にLF (\n) を含む事は出来ません。

APIとフォーマット

APIごとに使用可能なフォーマットは異なります。

表. APIごとに使用可能なフォーマットの一覧
API 入出力方向 csv tsv json json_agent
テーブル作成 入力
クエリ発行 (HiveQL) 出力
クエリ発行 (Split) 入出力

テーブル作成APIでは、入力となる解析対象データのフォーマットを指定します。クエリ発行 (HiveQL) APIでは、出力結果のフォーマットを指定します。また、クエリ発行(Split)APIは入力および出力で同じフォーマットを利用します。

スキーマ

スキーマは、解析対象データの構造を定義する情報で、1つ以上のカラム定義から成ります。
テーブル作成 APIおよびクエリ発行(Split)APIは任意のスキーマを指定する事が出来ます。
スキーマ

1つ以上のカラム定義をカンマで区切って指定します。

<カラム定義>,<カラム定義>, ... ,<カラム定義>
カラム定義

カラム名と型をスペースで区切って記述します。

<カラム名> <型>
カラム名
アルファベットとアンダースコアで指定します。
大文字と小文字の区別はなく、全て小文字として扱います。
カラムの型を指定します。
フォーマットによって利用可能な型は異なります。
詳しくは、 利用できる型 を参照ください。

利用できる型

カラムの型を指定します。
使用できる型はフォーマットによって異なります。
型は3つのグループに分けられます。

collections

collectionsグループの型は、可変長のデータを取り扱います。

表. 型の一覧 collectionsグループ
定義 概要 対応フォーマット
array<data_type>
リスト
例 : array<string>
csv, tsv, json, json_agent
map<primitive, data_type>
辞書
例 : map<string,string>
json, json_agent
struct<col_name : data_type, ...>
構造体
例 : struct<col1:string, col2:int>
json, json_agent
uniontype<data_type, data_type, ...>
共用体
例 : uniontype<string, int>
なし

data_typeには全ての型を、primitive_typeにはグループがprimitiveの型を、col_nameには任意のカラム名を指定する事ができます。

primitive

primitiveグループの型は、文字列や数値といった基本的な型を取り扱います。

表. 型の一覧 primitiveグループ
定義 概要 対応フォーマット
tinyint -128から127の数値 csv, tsv, json, json_agent
smallint -32,768から32,767の数値 csv, tsv, json, json_agent
int -2,147,483,648から2,147,483,647の数値 csv, tsv, json, json_agent
bigint -9,223,372,036,854,775,808から9,223,372,036,854,775,807の数値 csv, tsv, json, json_agent
float 4Byteの単精度小数 csv, tsv, json, json_agent
double 8Byteの倍精度小数 csv, tsv, json, json_agent
string 文字列 csv, tsv, json, json_agent
boolean trueまたはfalseの真偽値 csv, tsv, json, json_agent
timestamp yyyy-mm-dd hh:mm:ss[.f ...]で表される時刻 csv, tsv, json, json_agent
binary RFC3548で規定されているBase64 URLSafeエンコードされたバイナリ文字列 csv, tsv, json, json_agent

others

othersグループの型は、日付や可変長文字列といった特別な意味を持つ型を取り扱います。

表. 型の一覧 othersグループ
定義 概要 対応フォーマット
date yyyy-mm-ddで表される日付 csv, tsv, json, json_agent
decimal 38桁の数値 csv, tsv, json, json_agent
varchar 可変長文字列 csv, tsv, json, json_agent

フォーマットの詳細

csv

csv形式で格納されたデータ形式です。

各行はLFによる改行 (\n) で区切られている必要があり、要素中にLF (\n) を含む事は出来ません。

クオート文字およびエスケープ文字にはダブルクオート(”)を用います。

また、各ファイル(オブジェクト)の先頭にタイトル文字列が含まれていないデータである必要があります。

スキーマ
デフォルトでは、”v array<string>”が定義されます。
csvおよびtsvフォーマットではスキーマにarray型のカラム定義を1つのみ指定することで、
先頭のカラムの番号を0として何番目のカラムを取り出すかを指定する事が可能です。
入力データ
“1”,”a”,”b”,”c”,”abc”
スキーマ
“v array<string>”
HiveQL文
SELECT v[1] FROM db.tbl
結果
“a”
csvおよびtsvフォーマットで、string型のカラムを1つ以上定義すると、
解析対象データの各カラムにラベルを付ける事が可能です。
入力データ
“1”,”a”,”b”,”c”,”abc”
スキーマ
“id string, a string, b string, c string, all string”
HiveQL文
SELECT id, all FROM db.tbl
結果
“1”, “abc”
csvフォーマットで利用可能な型はarray型のカラム1つで構成されるスキーマか、
primitiveおよびothersグループの型のカラム1つ以上で構成されるスキーマのいずれかです。

Note

不正な値の取り扱いについて

tinyint、smallint、int、bigint、float、double型は不正な文字列を0または0.0として扱います。その他の型は、不正な文字列をNULL値として取り扱い、空文字列として出力されます。

解析対象データのサンプル
“1”,”value1”,”value2”
“2”,”value1”,”value2”
“3”,”value1”,”value2”
“4”,”value1”,”value2”

tsv

tsv形式で格納されたデータ形式です。

その他制約はcsvと同様です。

スキーマ

csvと同様です。

csvと同様です。

解析対象データのサンプル
1\t”value1”\t”value2”
2\t”value1”\t”value2”
3\t”value1”\t”value2”
4\t”value1”\t”value2”

json

jsonオブジェクトを1行として格納されたデータ形式です。
各行はLFによる改行 (\n) で区切られている必要があり、要素中にLF (\n) を含む事は出来ません。
各行は必ずjsonオブジェクトである必要があります。
スキーマ
デフォルトでは、”v map<string, string>”が定義されます。
jsonフォーマットでは、入力データのjsonオブジェクトに書かれたキー値をカラム名に指定します。

また、データに含まれるキー値は全て小文字に変換してから評価されます。
キー値に大文字を含むデータを解析する場合は、必ず全て小文字で指定して下さい。

デフォルトスキーマを利用する場合

入力データ
{“id” : 1, “data” : “sample data 1”, “toLowerCase” : “toLowerCase”}

スキーマ
“v map<string, string>”

HiveQL文
SELECT v[“id”], v[“data”], v[“tolowercase”] FROM db.tbl

結果(csv形式の場合)
“1”,”sample data 1”,”toLowerCase”

スキーマでラベルを指定する場合

入力データ
{“id” : 1, “data” : “sample data 1”, “toLowerCase” : “toLowerCase”}

スキーマ
“id int, data string, tolowercase string”

HiveQL文
SELECT id, data, tolowercase FROM db.tbl

結果(csv形式の場合)
“1”,”sample data 1”,”toLowerCase”

UNION型を除く全ての型が使用可能です。

Note

不正な値の取り扱いについて

tinyint、smallint、int、bigint、float、double型は不正な文字列を0または0.0として扱います。その他の型は、不正な文字列をNULL値として取り扱い、nullと出力されます。

解析対象データのサンプル

{“key1” : “value1”, “key2” : “value2”}

{“key1” : “value1”, “key2” : “value2”}

{“key1” : “value1”, “key2” : “value2”}

json_agent

Fluentd プラグイン によってストレージにアップロードされたデータを解析対象とする際に使用する形式です。

json_agentフォーマットで作成されたテーブルには、自動的にdate列とhour列が付与されます。
HiveQL文のWHERE句による絞り込みにdateおよびhourを使用する事で、処理に用いる解析対象データを制限する事が可能です。
このことにより、高速に解析を行う事ができます。
スキーマ
デフォルトでは、”time int, v map<string, string>”が定義されます。
v列には Fluentd プラグイン で読み取ったログデータが格納されます。
利用可能な型および動作はjson形式と同様です。

jsonと同様です。

解析対象データのサンプル

{“time” : 1419220251, “v” : {“key1” : “value1”, “key2” : “value2”, “id” : 1}}

{“time” : 1419220252, “v” : {“key1” : “value1”, “key2” : “value2”, “id” : 2}}

{“time” : 1419220253, “v” : {“key1” : “value1”, “key2” : “value2”, “id” : 3}}

高度な情報

json_agent形式のテーブルを入力データとした場合、
date列とhour列の値はストレージのオブジェクトキーから自動的に取得されます。
例えば/sampledb/sampletbl/date=20141225/hour=10/testdataというオブジェクトがある時、
json_agent形式で作成されたテーブルsampletblはこのオブジェクトがdate=20141225とhour=10という情報をデータとして保持する様にふるまいます。
HiveQL文のWHERE句にてdate=20141225 AND hour=10と絞り込みを行うと、
他のオブジェクトをストレージからクラスタに読み込む事無くより高速に解析する事ができます。

ページ先頭へ