2015/03/02 Version 1.0.0

クエリ

クエリは、クラスタに対して解析を指示するための要求の最小単位です。入力元と出力先、どの様に解析を行うかといった情報を保持します。

クエリの発行はクエリ発行(HiveQL)APIまたはクエリ発行(Split)APIで行います。

発行されたクエリは、実行状態を表すステータスを常に1つ持ちます。

Note

クエリが使用するストレージ上の作業領域と課金について

クエリは作業領域としてストレージの出力先バケットを使用します。
使用したデータ量は、課金対象となります。

Note

自動作成されるオブジェクトについて

入力元および出力先バケットに0バイトのオブジェクトを自動作成します。
クエリの動作に必要なオブジェクトのため、削除しないで下さい。

ステータス

クエリの現在の状態を取得するには、クエリ一覧取得APIまたはクエリ情報取得APIを用います。

クエリのステータスごとに使用できるクエリAPIが異なります。

表. クエリ状態一覧
名前 説明 使用できるAPI
running
実行中です
クエリ実行中です。
error, canceled, finishedに遷移します。
すべてのAPI
error
失敗しました
クエリが失敗しました。
クエリキャンセルAPIを除くすべてのAPI
canceled
ユーザ操作によりキャンセルされました
クエリの実行を中断しました。
クエリキャンセルAPIを除くすべてのAPI
finished
完了しました
成功し、結果がストレージに配置されました。
クエリキャンセルAPIを除くすべてのAPI

Note

クエリ情報の保持期間について

クエリ情報取得APIやクエリ一覧取得APIで取得出来るクエリ情報の保存期間はクエリ開始時刻より30日間です。
30日を超えた情報は取得できない場合があります。

入出力に関する共通仕様

ストレージのバケットやオブジェクトといったリソースを指定する際は、dagスキームで始まるURIで行います。

例 : sampleバケットのoutputディレクトリを指定する場合
dag://sample/output/

Note

ディレクトリについて

解析オプションではストレージのオブジェクトキーを全てスラッシュ(‘/’)区切りで扱い、
個々の’/’区切りの階層をディレクトリと呼称します。
詳細については、 データベースとテーブル をご覧下さい。

Note

出力先の削除について

クエリの出力先に指定されたディレクトリに格納されたすべてのオブジェクトは、より深い階層のディレクトリも含めて再帰的に削除されます。

クエリ実行後は、クエリの出力のみとなる事にご注意下さい。

Note

出力先のオブジェクトについて

出力先に同名のオブジェクトが存在する場合、ディレクトリを作成出来ないためエラーとなります。該当のオブジェクトを削除するか、移動して下さい。

クエリ発行(HiveQL)API

クエリ発行(HiveQL)APIは、HiveQL文を実行するAPIです。

解析対象データの場所を表すデータベースとテーブル、実行するHiveQL文、出力先のディレクトリを指定する必要があります。

クエリ発行(HiveQL)APIで発行されたクエリは複数のステージに分けて実行されます。

クエリ情報取得APIでは、ステージごとの進捗率をprogressの値として返します。

HiveQL文

クラスタタイプと使用可能なHiveQL文は以下のとおりです。

表. クラスタタイプと使用可能なHiveQLバージョン
クラスタタイプ HiveQLバージョン
DAG5-Hive-Hadoop Apache Hive 0.12.0

参考:apache Hive 公式ドキュメント

Note

発行できないHiveQL文について

  • クエリ発行(HiveQL) APIでは、データベース名を省略することはできません。
    必ずドット(.)区切りでデータベースとテーブルをFROM句に指定して下さい。
  • SELECT文のみ実行する事ができます。
    その他の文(INSERT、UPDATE、LOADなど)を実行しようとするとエラーレスポンスが返ります。
  • &&、||演算子は利用できません。代わりにANDおよびORを利用してください。
  • UNION型は現在利用できません。

入力

HiveQL文のFROM句に指定されたデータベース名とテーブル名で解析対象データを指定することができます。

指定されたデータベースとテーブルが表すディレクトリ直下に格納されているオブジェクトを入力として解析処理を行います。

Note

入力対象外となるオブジェクト
アンダースコア(_)で始まるオブジェクト
ドット(.)で始まるオブジェクト
スラッシュ(/)が含まれるオブジェクト(より深い階層のディレクトリに配置されたオブジェクト)

出力

クエリが完了すると、HiveQL文の実行結果および結果のメタ情報が、outputResourcePathに指定されたストレージに格納されます。

HiveQL文の実行結果

HiveQL文によって解析された結果が非圧縮で、ひとつまたは複数のオブジェクトとして格納されます。

結果のメタ情報

JDBCドライバ、ユーザライブラリ、およびコマンドラインツールが利用するメタ情報を、オブジェクト名”.resultsetmetadata”として格納します。

これらのクライアントアプリケーションを利用する場合、”.resultsetmetadata”オブジェクトに対する操作を行うと正しい動作が妨げられる場合があるため、避けてください。

クエリ発行(Split)API

クエリ発行(Split)APIは、ひとつまたは複数の巨大なオブジェクトを64MB以内のオブジェクトに分割しストレージに出力します。

同一の巨大なオブジェクトを入力としたHiveQLクエリを繰り返し実行する場合、事前に分割処理を行うことでHiveQLクエリの実行時間を短縮できる場合があります。

テーブルが既に存在する場合、および出力先データベースが存在しない場合はエラーを返します。

入力

入力とするオブジェクトは複数指定する事ができます。

スラッシュ(/)で終わるオブジェクト名を入力に指定した場合は、 ディレクトリを一括して入力に指定したものと解釈されます。この場合は、ディレクトリ直下にあるオブジェクトすべてが分割対象の入力オブジェクトとなります。

分割処理は改行区切りで行われ、フォーマットの値とは関係なくすべてのデータが出力されます。一行のデータが64MB以上ある場合は、分割されずに1オブジェクトとして出力されます。また、分割対象となったオブジェクトの大きさが既に64MB以内の場合はそのまま出力されます。

Note

入力対象外となるオブジェクト
アンダースコア(_)で始まるオブジェクト
ドット(.)で始まるオブジェクト
スラッシュ(/)が含まれるオブジェクト(より深い階層のディレクトリに配置されたオブジェクト)

出力

クエリが完了すると、分割されたオブジェクトは GZip 圧縮されてストレージへ格納されます。また、指定されたスキーマとフォーマットで、テーブルが自動的に作成されます。

Splitの実行結果

出力先データベースと同名のバケット内の、出力先テーブルに指定されたディレクトリ直下に、ひとつまたは複数の結果オブジェクトが格納されます。また、0バイトの_SUCCESSオブジェクトが作成されます。

出力先テーブル

出力先データベースに、指定されたフォーマットおよびスキーマで、テーブルが自動的に作成されます。

ページ先頭へ