PHP版ユーザライブラリ¶
インストール¶
- バージョン5.5以降のPHPが導入されている必要があります。
- 以下のURLからPharファイルをダウンロードし、PHPコード中で読み込むことでライブラリの機能を利用できます。
- https://storage-dag.iijgio.com/support/libs/dag-client-php/iij-dag-client-1.0.0.phar
上記Pharファイルを同一ディレクトリへ配置した場合の読込例
<?php
require_once "phar://iij-dag-client-1.0.0.phar/vendor/autoload.php";
使い方¶
clientの生成¶
アクセスキーIDおよびシークレットアクセスキーを設定し、clientを生成します。
$client = new Dag\Client(<アクセスキーID>, <シークレットアクセスキー>, <オプション>)
パラメータについて¶
アクセスキーIDおよびシークレットアクセスキーに加え、以下の表に示すオプションを設定することが出来ます。
パラメータ名 | 必須 | 型 | デフォルト値 | 概要 |
---|---|---|---|---|
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 | |
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);
エラーレスポンス¶
名前 | 概要 |
---|---|
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";
}
また、上記以外のエラーレスポンスには以下のものがあります。
名前 | 概要 |
---|---|
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 | コメント |
テーブル作成(分割)¶
# クラスタを選択
$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 | ジョブ情報更新 |
項目名 | 型 | 概要 |
---|---|---|
stage | Integer | ステージ |
query | String | 実行クエリ |
output_format | String | 出力フォーマット(csv またはtsv) |
output_object | String | 出力オブジェクト |
項目名 | 型 | 概要 |
---|---|---|
job_id | String | ジョブID |
schema | String | スキーマ情報 |
input_object_keys | Array | オブジェクト情報の配列 |
input_format | String | 入力フォーマット(csvまたはtsv) |
output_bucket | String | 出力先バケット名 |
ouput_table | String | 出力先テーブル名 |
ジョブ実行結果取得¶
# ジョブを選択
$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');
# オブジェクト一覧を取得
$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();
データインポート¶
インポート可能なデータの形式例
{"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 | ラベル |