PHP版ユーザライブラリ

インストール

上記Pharファイルを同一ディレクトリへ配置した場合の読込例

<?php
require_once "phar://iij-dag-client-1.0.0.phar/vendor/autoload.php";

使い方

clientの生成

アクセスキーIDおよびシークレットアクセスキーを設定し、clientを生成します。

$client = new Dag\Client(<アクセスキーID>, <シークレットアクセスキー>, <オプション>)

パラメータについて

アクセスキーIDおよびシークレットアクセスキーに加え、以下の表に示すオプションを設定することが出来ます。

表. clientに設定するパラメータ一覧
パラメータ名 必須 デフォルト値 概要
apikey yes String   アクセスキーID
secret yes String   シークレットアクセスキー
analysis_api no String https://analysis-dag.iijgio.com アナリシスAPIのエンドポイント
storage_api no String https://storage-dag.iijgio.com ストレージAPIのエンドポイント
force_path_style no Boolean false
true : パス形式 でURLを生成し、ストレージAPIへアクセスします
false: 仮想ホスト形式 でURLを生成し、ストレージAPIへアクセスします
debug no Boolean false デバッグモード

サンプル

clientを生成

<?php
require_once("vendor/autoload.php");

$client = new Dag\Client("XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

オプションを設定する場合

<?php
require_once("vendor/autoload.php");

$params = [
    'analysis_api' => 'https://analysis-dag.iijgio.com',
    'force_path_style' => false,
    'debug' => true
];

$client = new Dag\Client("XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX", $params);

エラーレスポンス

アナリシスAPIまたはストレージAPIにて発生したエラーは、例外(Dag::Client::APIFailure)が発生します。
Dag::Client::APIFailure には以下の情報が格納されています。
表. Dag::Client::APIFailure に格納されるエラーメッセージ
名前 概要
message APIの実行時の情報
api_code エラーコード
api_message エラーメッセージ
api_status エラーステータス
api_request_id エラー時のリクエストID
api_resource エラー時のパス情報

例外を補足するサンプル

<?php
require_once("vendor/autoload.php");

$client = new Dag\Client("XXXXXXXXXXXXXXXXXXXX", "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");

// クラスタ一覧取得に失敗した場合の例外を捕捉
try {
    $clusters = $client->clusters();
    foreach($clusters as $cluster) {
        echo "cluster name: " . $cluster->name . "\n";
        echo "cluster status: " . $cluster->status . "\n";
        echo "cluster type: " . $cluster->type . "\n";
        echo "cluster instances: " . serialize($cluster->instances) . "\n";
    }
}
catch (Dag\Client\Exception\APIFailure $e) {
    echo "{$e->getMessage()}\n";
    echo "{$e->api_code}\n";
    echo "{$e->api_message}\n";
    echo "{$e->api_status}\n";
    echo "{$e->api_request_id}\n";
    echo "{$e->api_resource}\n";
}

また、上記以外のエラーレスポンスには以下のものがあります。

表. clientからのエラーレスポンス一覧
名前 概要
ParameterInvalid 不正なパラメータが設定された
APIOptionInvalid 不正なAPIオプションが設定された
StatusInvalid クラスタのステータスが不正である
JobTypeInvalid ジョブ種別が不正である
ClusterNotOpen クラスタが指定されていない
ClusterRebooted クラスタが再起動された
DatabaseNotFound 指定されたデータベースが見つからない
TableAlreadyExists 作成しようとしたテーブルは既に存在している
TableNotFound 指定されたテーブルが見つからない
MissingFileException 指定されたファイルが見つからない

機能一覧

クラスタ管理

表. クラスタ管理機能一覧
機能名 概要
クラスタ一覧取得 保有しているクラスタの一覧を取得します。
クラスタ情報取得 指定したクラスタの情報を取得します。
クラスタ統計情報取得 指定したクラスタの統計情報を取得します。
クラスタ再起動 指定したクラスタの再起動を行います。
クラスタログ出力 指定したクラスタのアプリケーションログをストレージへ出力します。

データベース管理

表. データベース管理機能一覧
機能名 概要
データベース一覧取得 データベースの一覧を取得します。
データベース情報取得 指定したデータベースの情報を取得します。
データベース作成 データベースを作成します。
データベース削除 データベースを削除します。

テーブル管理

表. テーブル管理機能一覧
機能名 概要
テーブル一覧取得 テーブルの一覧を取得します。
テーブル情報取得 指定したテーブルの情報を取得します。
テーブル作成 テーブルを作成します。
テーブル作成(分割) オブジェクトを分割し、新たなテーブルを作成します。
テーブル情報更新 テーブルの情報を更新します。
テーブル削除 テーブルを削除します。

ジョブ管理

表. ジョブ管理機能一覧
機能名 概要
ジョブ一覧取得 ジョブの一覧を取得します。
ジョブ情報取得 指定したジョブの情報を取得します。
ジョブ実行結果取得 ジョブの実行結果を取得します。
ジョブ実行ログ取得 ジョブの実行ログを取得します。

ストレージ管理

表. ストレージ管理機能一覧
機能名 概要
バケット一覧取得 バケット一覧を取得します。
バケット取得 バケットを取得します。
バケット作成 バケットを作成します。
バケット削除 バケットを削除します。
オブジェクト一覧取得 オブジェクト一覧を取得します。
オブジェクト取得 オブジェクトを取得します。
オブジェクト作成 オブジェクトを作成します。
オブジェクト削除 オブジェクトを削除します。
データインポート データをインポートします。

クエリ

表. クエリ管理機能一覧
機能名 概要
クエリ発行 クエリを発行します。

機能詳細

クラスタ管理

クラスタ一覧取得

クラスタの一覧を取得します。
取得可能なクラスタ情報の詳細については、「クラスタ情報取得」を参照してください。
# 全てのクラスタ一覧を取得
$clusters = $client->clusters();
foreach($clusters as $cluster) {
    echo "cluster name: " . $cluster->name . "\n";
    echo "cluster status: " . $cluster->status . "\n";
    echo "cluster type: " . $cluster->type . "\n";
    echo "cluster instances: " . serialize($cluster->instances) . "\n";
}
クラスタの検索条件を指定することができます。
クラスタのステータスについては クラスタ/ステータス を参照してください。
# 通常起動中のクラスタ一覧を取得
foreach($clusters->where(['status' => 'norm']) as $cluster) {
    echo "cluster name: " . $cluster->name . "\n";
}

# 複数のステータスを指定
foreach($clusters->where(['status' => ['norm', 'error']]) as $cluster) {
    echo "cluster name: " . $cluster->name . "\n";
}

# クラスタ名を指定
foreach($clusters->where(['cluster_name' => 'cluster']) as $cluster) {
    echo "cluster name: " . $cluster->name . "\n";
}

# クラスタタイプを指定
foreach($clusters->where(['type' => 'DAG5-Hive-Hadoop']) as $cluster) {
    echo "cluster name: " . $cluster->name . "\n";
}

クラスタ一覧を昇順、又は降順で取得します。

# 昇順
foreach($clusters->order('asc') as $cluster) {
    echo "cluster name: " . $cluster->name . "\n";
}

# 降順
foreach($clusters->order('desc') as $cluster) {
    echo "cluster name: " . $cluster->name . "\n";
}

クラスタ情報取得

クラスタ情報の詳細を取得します。

# クラスタを選択
$client = $client->open('cluster1');

# 選択中のクラスタ
echo $client->cluster_name;
#=> cluster1

echo $cluster->status;
#=> norm

echo $cluster->type;
#=> DAG5-Hive-Hadoop

foreach ($cluster->instances as $instance) {
    echo "grade: {$instance['grade']}\n";
    echo "quantity: {$instance['quantity']}\n";
}
表. クラスタ情報項目一覧
項目名 概要
name String クラスタ名
status String ステータス
type String DAG5-Hive-Hadoop
instances Array インスタンス情報の配列
表. インスタンス情報項目一覧
項目名 概要
grade String グレード
quantity Integer 個数

クラスタ統計情報取得

クラスタ統計情報を取得します。

# クラスタを選択
$client = $client->open('cluster1');

# cluster1の統計情報を取得
$cluster_statistics = $cluster->statistics();

# 統計情報の中からインスタンスに関する情報を取得
foreach ($cluster_statistics['instances'] as $instance) {
    echo "instanceId: {$instance['instanceId']}\n";
    echo "grade: {$instance['grade']}\n";
    echo "dfsUsed: {$instance['disk']['dfsUsed']}\n";
    echo "nonDfsUsed: {$instance['disk']['nonDfsUsed']}\n";
    echo "capacity: {$instance['disk']['capacity']}\n";
    #=> 1
    #=> a-1-010
    #=> 3522560
    #=> 35790848
    #=> 107321753600
}

# 統計情報の中からディスクに関する情報を取得
echo "total capacity: {$cluster_statistics['disk']['capacity']}\n";
echo "total used: {$cluster_statistics['disk']['used']}\n";
#=> 107321753600
#=> 39313408
表. クラスタ統計情報項目一覧
項目名 概要
instances Array インスタンス情報の配列
disk OpenStruct クラスタ全体のディスク情報
表. インスタンス情報項目一覧
項目名 概要
insntace_id Integer ID
grade String グレード
disk OpenStruct インスタンス毎のディスク情報
表. インスタンス毎のディスク情報一覧
項目名 概要
capacity Integer インスタンス毎のディスク許容量
dfs_used Integer 分散ファイルシステムのディスク使用量
non_dfs_used Integer 分散ファイルシステム以外のディスク使用量
表. クラスタ全体のディスク情報一覧
項目名 概要
capacity Integer クラスタ全体のディスク許容量
used Integer クラスタ全体のディスク使用量

クラスタ再起動

クラスタのステータスが、norm、failed、ptfailed の時のみクラスタの再起動が可能です。

# クラスタを選択
$client = $client->open('cluster1');

# クラスタ取得
$cluster = $client->cluster();

# 再起動
$cluster->restart();

# パラメータを指定して再起動
$cluster->restart(['type' => 'DAG5-Hive-Hadoop', 'force' => true]);
表. クラスタ再起動時のパラメータ一覧
パラメータ名 必須 デフォルト値 概要
type no String 現在のクラスタ種別 再起動後にクラスタタイプを変更したい場合に指定
force no Boolean false 強制再起動

クラスタログ出力

指定したクラスタのアプリケーションログをストレージへ出力します。

# クラスタを選択
$client = $client->open('cluster1');

# クラスタ取得
$cluster = $client->cluster();

# cluster1のログをストレージに出力
$cluster->exportLog(['output_log_path' => 'dag://bucket/object_path/', 'compress' => true]);
表. クラスタログ出力時のパラメータ一覧
パラメータ名 必須 デフォルト値 概要
output_log_path yes String   出力先のストレージパスを指定
compress no Boolean false 圧縮して出力するか指定

データベース管理

データベース一覧取得

指定されたクラスタに属するデータベースの一覧を取得します。
取得可能なデータベース情報の詳細については、「データベース情報取得」を参照してください。
# クラスタを選択
$client = $client->open('cluster1');

$dbs = $client->databases();
foreach ($dbs as $db) {
    echo "db name : ". $db->db_name . "\n";
}

データベース情報取得

データベースの情報を取得します。

# クラスタを選択
$client = $client->open('cluster1');

# データベースを選択
$db = $client->database('database1');

echo "selected db name : " . $db->db_name . "\n";
#=> database1

echo "cluster name : " . $dbs->cluster_name . "\n";
#=> cluster1

# 詳しくはテーブル管理を参照
$tables = $db->tables();
#=> TableCollection
表. データベース情報項目一覧
項目名 概要
name String データベース名
db_name String name のエイリアス
cluster_name String クラスタ名
table TableCollection テーブル一覧取得を参照

データベース作成

指定したクラスタにデータベースを作成します。

# クラスタを選択
$client = $client->open('cluster1');

# データベースを作成
$dbs = $client->databases();
$db = $dbs->create('newdatabase');

echo "created db name : " . $db->db_name . "\n";
#=> newdatabase

データベース削除

データベースを削除します。

# クラスタを選択
$client = $client->open('cluster1');

# データベースを削除
$db = $client->database('database1');
$db->delete();

テーブル管理

テーブル一覧取得

取得可能なテーブル情報の詳細については、「テーブル情報取得」を参照してください。

# クラスタを選択
$client = $client->open('cluster1');

# 全てのデータベースに存在するテーブル情報を表示
foreach($dbs as $db) {
    $tables = $db->tables();
    echo "-- database name : {$db->db_name}\n";

    foreach($tables as $table) {
        echo "\ttabel name : {$table->name}\n";
    }
}

テーブル情報取得

テーブルの詳細情報を取得します。

# クラスタを選択
$client = $client->open('cluster1');

# データベースを選択
$db = $client->database('database1');

# テーブルを選択
$table = $db->table('table1');

echo "table table name: {$table->name}\n";
#=> table table name: table1

echo "table format: {$table->format}\n";
#=> table format: json

echo "table scheme: {$table->schema()}\n";
#=> table scheme: v map<string,string>

echo "table comment: {$table->comment}\n";
#=> table comment: sample table

echo "table location: {$table->location}\n";
#=> table location: dag://database1/table1

echo "table creqated_at: {$table->created_at->format('Y-m-d H:i:s')}\n";
#=> table creqated_at: 2015-05-11 17:52:32

echo "table modified_at: {$table->modified_at->format('Y-m-d H:i:s')}\n\n";
#=> table modified_at: 2015-05-11 17:52:32

echo "table cluster name: {$table->cluster_name}\n";
#=> table cluster name: cluster1

echo "table database name: {$table->database_name}\n";
#=> table database name: database1
表. テーブル情報項目一覧
項目名 概要
name String テーブル名
format String フォーマット
schema String スキーマ
comment String コメント
location String ロケーション
created_at Time 作成日時
modified_at Time 更新日時
cluster_name String クラスタ名
db_name String データベース名

テーブル作成

テーブルを作成します。

# クラスタを選択
$client = $client->open('cluster1');

# データベースを選択
$db = $client->database('database1');

# テーブルを作成
# INPUT: テーブル名、フォーマット、スキーマ、コメント
$table = $tables->create('table1', 'csv', 'v array<string>', 'its a test');
表. テーブル作成時パラメータ一覧
パラメータ名 必須 デフォルト値 概要 備考
table yes String   テーブル名  
format no String json_agent csv, tsv, json, json_agent の何れか  
schema no String formatの値に対応したデフォルトのスキーマ スキーマ  
comment no String   コメント  

テーブル作成(分割)

1つまたは複数の巨大なオブジェクトを100MBごとのオブジェクトに分割しストレージに出力します。
詳しくは クエリ発行(Split)API を参照してください。
# クラスタを選択
$client = $client->open('cluster1');

$params = [
    'input_object_keys' => ['dag://bucket1/object1/', 'dag://bucket1/object2/'],
    'input_format' => 'csv'
];

# テーブル分割
$job = $client->tableSplit('bucket1', 'object3', $params);
echo "split job id: {$job->id}\n";

設定可能なパラメータに関しては以下の表をご覧ください。

表. テーブル作成(分割)パラメータ一覧
パラメータ名 必須 デフォルト値 概要
input_object_keys yes Array   バケット名/オブジェクト名の配列
input_format no String json_agent csv, tsv, json, json_agent の何れか
schema no String formatの値に対応したデフォルトのスキーマ スキーマ
label no String   split job に対するラベル

テーブル情報更新

テーブル情報を更新します。
テーブル名の変更はできません。
テーブル名の変更を行いたい場合は、いったんテーブルを削除し作成し直してください。その場合でもデータが消えることはありません。
# クラスタを選択
$client = $client->open('cluster1');

# データベースを選択
$db = $client->database('database1');

# テーブルを選択
$table = $db->table('table1');

$params = [
  'comment' => 'update comment',
  'format' => 'update format',
  'schema' => 'update schema'
];

# テーブル情報を更新
$table->update($params);

テーブル削除

テーブルを削除します。

# クラスタを選択
$client = $client->open('cluster1');

# データベースを選択
$db = $client->database('database1');

# テーブルを選択
$table = $db->table('table1');

# テーブルを削除
$table->delete();

ジョブ管理

ジョブ一覧取得

以下のようにしてジョブの一覧を取得可能です。
取得可能なジョブ情報の詳細については、「ジョブ情報取得」を参照してください。
ジョブのステータスについては クエリ/ステータス を参照してください。
$jobs = $client->jobs();
foreach($jobs as $job) {
    echo "job id : {$job->id} status : {$job->status}\n";
}

ジョブ一覧に検索条件を加えた場合

# ステータスが実行中のものを取得
$jobs = $client->jobs()->where(['status' => 'running']);
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

# ステータスがキャンセル、エラーのものを取得
$jobs = $client->jobs()->where(['status' => ['canceled', 'error']);
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

# タイプがselectのものを取得
$jobs = $client->jobs()->where(['type' => 'select');
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

# 前方一致でクラスタ名が一致するものを取得
$jobs = $client->jobs()->where(['cluster_name' => 'cluster1');
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

# 前方一致でラベルが一致するものを取得
$jobs = $client->jobs()->where(['label' => 'label1');
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

# クラスタが再起動済みのクラスタを返す
$jobs = $client->jobs()->where(['cluster_rebooted' => true);
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

ジョブの一覧を昇順または降順で取得する場合

# 昇順
$jobs = $client->jobs()->order('asc');
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

# 降順
$jobs = $client->jobs()->order('desc');
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

ジョブの表示数を絞る場合

# 100個取得
# 引数が与えられない場合、デフォルト値として100個取得する
$jobs = $client->jobs()->limit();
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

# 昇順で10個取得
$jobs = $client->jobs()->order('asc')->limit(10);
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

# ステータスがfinishedのものを10個取得
$jobs = $client->jobs()->where(['status' => 'running'])->limit(10);
foreach($jobs as $job) {
    echo "job : {$job->id} status : {$job->status} type : {$job->type} cluster name : {$job->cluster_name}\n";
}

whereメソッドに以下のパラメータを設定することでオブジェクトを絞り込んで取得できます。

表. ジョブ情報項目一覧
パラメータ名 必須 デフォルト値 概要
status no String or Array   ジョブのステータスを指定
type no String   ジョブのタイプを指定
cluster_name no String   ジョブが実行されたクラスタ名を指定
label no String   ジョブのラベルを指定
cluster_rebooted no Boolean   ジョブの実行後にクラスタが再起動されたか指定

ジョブ情報取得

ジョブの詳細情報を取得します。

# ジョブを選択
$job = $client->job(1038);

echo "job id: {$job->id}\n";
#=> job id: 1038

echo "job type: {$job->type}\n";
#=> job type: select

echo "job process engine: {$job->process_engine}\n";
#=> job process engine: mapreduce

echo "job dsl: {$job->dsl}\n";
#=> job dsl: hive

echo "job status: {$job->status}\n";
#=> job status: finished

echo "job cluster name: {$job->cluster_name}\n";
#=> job cluster name: cluster1

echo "job start at: {$job->start_at}\n";
#=> job start at: 2015-04-09 16:02:09

echo "job access key id: {$job->access_key_id}\n";
#=> job access key id: xxxxxxxxxxxxxxxxxxxx

echo "job label: {$job->label}\n";
#=> test label

echo "job progress: {$job->progress}\n";
#=> job progress: # null

echo "job finished?: " . var_export($job->is_finished(), true) . "\n";
#=> job finished?: true

# ジョブ情報更新
$job->reload();

ジョブのtypeにより、取得可能なジョブ情報が異なります。

表. ジョブ情報項目一覧
項目名 概要
id Integer ジョブID
type String select または split
process_engine String 実行エンジン
dsl String hive または mapreduce
status String ジョブステータス
cluster String クラスタ名
start_at Time 開始時間
access_key_id String アクセスキー
label String ラベル
progress String 進捗率(ex. ‘70%’)
finished? Boolean ジョブが終了しているか
reload Nil ジョブ情報更新
表. typeがselectの場合のジョブ情報項目一覧
項目名 概要
stage Integer ステージ
query String 実行クエリ
output_format String 出力フォーマット(csv またはtsv)
output_object String 出力オブジェクト
表. typeがsplitの場合のジョブ情報項目一覧
項目名 概要
job_id String ジョブID
schema String スキーマ情報
input_object_keys Array オブジェクト情報の配列
input_format String 入力フォーマット(csvまたはtsv)
output_bucket String 出力先バケット名
ouput_table String 出力先テーブル名

ジョブ実行結果取得

ジョブの実行結果を取得するためのワンタイムURLを生成します。
ワンタイムURLのダウンロード可能時間は標準で30分です。
# ジョブを選択
$job = $client->job(1038);

# ジョブの結果ダウンロードリンクを生成
$urls = $job->downloadUrls();
#=> https://bucket1.storage-dag.iijgio.com/object1/.resultsetmetadata?Expires=.....
#=> https://bucket1.storage-dag.iijgio.com/object1/000000_0?Expires=.....

# ダウンロード可能時間を5分に変更
$urls = $job->downloadUrls(5); # 分で指定
#=> https://bucket1.storage-dag.iijgio.com/object1/.resultsetmetadata?Expires=.....
#=> https://bucket1.storage-dag.iijgio.com/object1/000000_0?Expires=.....

ジョブ実行ログ取得

ジョブ実行後にクラスタを再起動した場合、ログを取得することはできません。

# ジョブを選択
$job = $client->job(1038);

# ジョブのログを取得
echo "{$job->log()}\n";

ストレージ管理

ストレージの操作を行うことができます。

バケット一覧取得

バケット一覧を取得します。

$buckets = $client->buckets();
foreach ($buckets as $bucket) {
    echo "{$bucket->name}\n";
}

バケット取得

指定したバケットを取得します。

# バケットを選択
$bucket = $client->bucket('bucket1');

echo "{$bucket->name}\n";
#=> bucket1

バケット作成

バケットを作成します。

# バケットを作成
$bucket = $buckets->create('newbucket');

echo "{$bucket->name}\n";
#=> newbucket

バケット削除

バケットを削除します。

# バケットを選択
$bucket = $client->bucket('bucket1');

# バケットを削除
$bucket->delete();

オブジェクト一覧取得

以下のようにしてオブジェクトの一覧を取得可能です。

# バケットを選択
$bucket = $client->bucket('bucket1');

# オブジェクト一覧を取得
$objects = $bucket->objects();
foreach ($objects as $object) {
    echo "{$object->name}\n";
}

#=> object1/
#=> object1/test1
#=> object2/

# 接頭辞を指定して検索することが可能
$objects = $bucket->objects();
foreach ($objects->where(['prefix' => 'object1']) as $object) {
    echo "{$object->name}\n";
}

#=> object1/
#=> object1/test1

delimiterを指定した場合の例

# ストレージ上に存在するデータ
# /foo/photo/2009/index.html
# /foo/photo/2009/12/index.html
# /foo/photo/2010/index.html
# /foo/photo/2010/xmas.jpg
# /foo/photo/2010/01/index.html
# /foo/photo/2010/01/xmas.jpg
# /foo/photo/2010/02/index.html

# バケットを選択
$bucket = $client->bucket('bucket1');

# 以下の条件でdelimiterを指定した場合
$objects = $bucket->objects();
foreach ($objects->where(['prefix' => '/foo/photo/2010', 'delimiter' => '/']) as $object) {
    echo "{$object->name}\n";
}

#=> /foo/photo/2010/index.html
#=> /foo/photo/2010/xmas.jpg
#=> /foo/photo/2010/01
#=> /foo/photo/2010/02

whereメソッドの以下のパラメータを設定することでオブジェクトを絞り込んで取得できます。

表. オブジェクト情報項目一覧
パラメータ名 必須 デフォルト値 概要
prefix no String   前方一致でフィルタするための文字列
delimiter no String   オブジェクト階層の区切り文字

オブジェクト取得

オブジェクトを取得します。

# バケットを選択
$bucket = $client->bucket('bucket1');

# オブジェクトを選択
$object = $bucket->object('object1/test.gz');

echo "{$object->name}\n";
#=> object1/test.gz

# オブジェクトからデータを読み込む
$data = $object->read();
echo "{$data}\n";
#=> "abcdefg"

# オブジェクトから3byte分データを読み込む
$data = $object->read([0, 3]);
echo "{$data}\n";
#=> "abc"

オブジェクト作成

オブジェクトを作成します。
オプションを渡すことでマルチパートアップロードに対応しています。
# バケットを選択
$bucket = $client->bucket('bucket1');

# オブジェクトを選択
$object = $bucket->object('object1/test.json');

# 文字列
$object->write('testobject');

# パス
$object->write('./object_1.json');

マルチパートアップロードでオブジェクトを作成する

# バケットを選択
$bucket = $client->bucket('bucket1');

# オブジェクトを選択
$object = $bucket->object('newobject');

# マルチパートアップロードでオブジェクトを作成する
$params = ['multipart' => true];
$object->write('./object_1.json', $params);

マルチパートアップロードを使用する場合は以下のオプションを指定することができます。

表. マルチパートアップロード時パラメータ一覧
パラメータ名 必須 デフォルト値 概要
multipart no Boolean false マルチパートアップロードを有効にする
jobs no String 1 マルチパートアップロードの並列アップロード数
splitsz no Integer 104857600 オブジェクト分割サイズ。5MBバイト以上を指定

オブジェクト削除

オブジェクトを削除します。

# バケットを選択
$bucket = $client->bucket('bucket1');

# オブジェクトを選択
$object = $bucket->object('newobject');

# オブジェクトを削除
$object->delete();

データインポート

指定したデータベース/テーブルに対して解析可能なデータを簡単に生成する機能です。
指定したJSONファイルのデータを特定のサイズで分割し、ストレージ上にアップロードします。
インポート対象のデータは一行がJSONオブジェクトであり、\nで区切られているものになります。
インポート可能なファイル形式はテキストデータかgzip圧縮されたものに限ります。

インポート可能なデータの形式例

{"key1":"value1", "key2":"value2"}
{"key3":"value3", "key4":"value4"}
.
.
.
# インポート対象のデータベース作成
$dbs = $client->databases();
$db = $dbs->create('database1');

# インポート対象のテーブル作成
$tables = $db->tables();
$table = $tables->create('table1', 'json');

# インポートしたいファイル
$files = ['log/data1.log.gz', 'log/data2'log.gz'];

# インポート時のパラメータ
$params = ['label' => 'importdata', "splitsz" => 20];

# 複数のファイルをdatabase1/table1にインポートする
$client->import('database1', 'table1', $files, $params);
#=> Initialize...
#=> jobs: 3, splitsz: 104857600
#=> > starting upload part 1, 189
#=> < finished upload part 1, 189
#=> > starting upload part 2, 954
#=> < finished upload part 2, 954
#=> finished upload 2 objects.

#=> upload_objects:
#=> /database1/table1/importdata_0.gz
#=> /database1/table1/importdata_1.gz

インポートには以下のパラメータを設定できます。

表. インポート実行時のパラメータ一覧
パラメータ名 必須 デフォルト値 概要
label no String label インポートした後のファイル名
jobs no Integer 1 並列実行するスレッド数
splitsz no Integer 104857600 ファイルの分割サイズ

クエリ

HiveQLを発行します。

クエリ発行

# クラスタ選択
$client = $client->open('moge');

$params = [
  "query" => "SELECT COUNT(1) FROM database1.table1",
  "label" => "label1",
  "output_format" => "csv",
  "output_resource_path" => "dag://bucket1/output_object1"
];

# クエリを発行するとジョブになる
$job = $client->query($params);
表. クエリ発行時パラメータ一覧
パラメータ名 必須 デフォルト値 概要 備考
query yes String   実行対象のクエリ 先頭がSELECT文以外、またはクエリ中に”OVERWRITE”が含まれていた場合はエラーとなります。
output_format no String csv csv または tsv  
output_resource_path yes String   出力オブジェクトのパス /#{バケット名}/#{オブジェクト名}/  
label no String   ラベル  

ページ先頭へ