GridDB v5.7.0 がリリースされました。今回は、新しい機能の一部についてご説明します。新しいリリースは、 GitHubから直接ダウンロードできます。また、Downloads ページからもダウンロード可能です。この記事では、特に2つの新機能に焦点を当てて解説します:WebAPIの変更とSQLワーキングメモリの制限。
GridDB Web APIの変更点(v5.7.0)
GridDB WebAPIは、HTTPリクエストを介してGridDBサーバーと通信するためのインターフェースです。今回のリリースにおける主な変更点は、SQL機能の拡張と、パッケージのインストール方法の新たな方式です。この新リリースには、これまで利用できなかったSQLコマンド(DDL、DML、DCLコマンドなど)が追加されています。GitHub ページでは、インストール用の .deb
と .rpm
ファイルも用意されており、これを使用すると Web API をサービスとしてインストールすることも可能です。
以下のセクションの情報は、プロジェクトの GitHub ページで確認できます:https://github.com/griddb/webapi/blob/master/GridDB_Web_API_Reference.md
インストール変更
上記で説明したように、GridDB Web APIをパッケージとしてインストールできるようになりました。これにより、必要なディレクトリが自動的に作成され、サービスとして起動するためのシンボリックリンクも作成されます。GridDBサーバーと同様に、systemctl
を使用してサービスを起動できます。これを行うには、https://github.com/griddb/webapi/releases/tag/5.7.0から.deb
ファイルを取得し、以下のコマンドを実行します:
$ sudo dpkg -i https://github.com/griddb/webapi/releases/download/5.7.0/griddb-ce-webapi_5.7.0_amd64.deb
インストール後、必要に応じて以下のディレクトリで設定を変更できます: /var/lib/gridstore/webapi/conf
。その後、サービスを起動するには: $ sudo systemctl start griddb-webapi.service
SQL DDL (データ定義言語)
Web APIの最大の特徴は、SQL DDLコマンドのサポートです。これにより、Web API を使用して慣れた SQL 構文でテーブルを作成できるようになり、テーブルの作成に TQL API を使用する必要がなくなりました。以前の方法も問題なく機能していましたが、この追加のメリットは2つあります: 1, SQL は広く知られたクエリ言語であり、扱いやすい点、2, TQL コマンドではパーティション化されたテーブル/コンテナの操作や作成ができなかった点です。
次に、新しいSQL DDLコマンドを使用してテーブルを作成する方法を見てみましょう。URLパスは次のとおりです:/:cluster/dbs/:database/sql/ddl
。以下の例は動作するサンプルです:
curl --location 'http://192.168.50.206:8082/griddb/v2/myCluster/dbs/public/sql/ddl' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '[
{"stmt" : "CREATE TABLE IF NOT EXISTS pyIntPart2 (date TIMESTAMP NOT NULL PRIMARY KEY, value STRING) WITH (expiration_type='\''PARTITION'\'',expiration_time=10,expiration_time_unit='\''DAY'\'') PARTITION BY RANGE (date) EVERY (5, DAY);"},
{"stmt" : "ALTER TABLE pyIntPart2 ADD temp STRING"}
]'
ここでは、2つのステートメントを実行しています。1つ目は、有効期限ルール付きのパーティション化されたテーブルを作成するステートメント(詳細はこちらを参照:https://griddb.net/en/blog/griddb-partitioning-and-expiry/)であり、もう1つは同じテーブルを修正し、新しい列を追加するステートメントです。これらは、パーティション化されたテーブルの性質上、以前には不可能でした。
SQL DML(データ操作言語)
DMLコマンドを使用すると、コンテナに対してSELECT、INSERT、UPDATEなどのコマンドを実行できます。この機能はv5.7.0リリース以前に一部存在していましたが、機能は大幅に制限されており、現在では使用が推奨されていません。DMLリクエストを実行するには、上記のパスと同様のパスを使用します:/:cluster/dbs/:database/sql/dml/query
。これにより、コンテナ内のデータの一部を検索するための SELECT ステートメントを実行できます。例えば
curl --location 'http://192.168.50.206:8082/griddb/v2/myCluster/dbs/public/sql/dml/query' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '[
{"stmt" : "select AVG(total_points_per_game) from Top_NBA_Playoff_Scorers"}
]
'
再び、TQL メソッドを使用してパーティション化されたテーブルからデータをクエリする場合、コマンドは失敗します:
curl --location 'http://192.168.50.206:8082/griddb/v2/myCluster/dbs/public/tql' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '[
{"name" : "pyIntPart2", "stmt" : "select *", "columns" : null}
]'
DML 更新
同じ行キーを使用して行を更新することもできますし、新しいキーを使用して新しい行を追加することもできます。例:
curl --location 'http://192.168.50.206:8082/griddb/v2/myCluster/dbs/public/sql/dml/update' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '[
{"stmt" : "INSERT INTO pyIntPart2(date, value, temp) VALUES (NOW(), '\''blog_test'\'', '\''cold'\'')"}
]
'
再び、ここでSQLを使用する利点は、古いTQLではなくGridDB Time Series SQLコマンド(例:NOW()
)を使用できる点です。これらのコマンドの詳細は、以下のドキュメントを参照してください:https://docs.griddb.net/sqlreference/sql-commands-supported/#time-functions。
TQLバージョンのINSERT文でNOW()
コマンドを使用しようとすると、エラーが発生します:
curl --location --request PUT 'http://192.168.50.206:8082/griddb/v2/myCluster/dbs/public/containers/pyIntPart2/rows' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '[
[NOW(), "failure","hot"]
]'
このコマンドは失敗します。
SQL DCL (データ制御言語)
SQL データ制御言語は、主にデータベースの権限/アクセス制御に関するものです。この言語はそれほど興味深いものではありませんが、複数のデータベースやユーザーを管理する場合に役立ちます。例えば、新しいデータベースとユーザーを作成した場合、Web API を使用してそのユーザーにそのデータベースへのアクセス権限を付与できます。
curl --location 'http://192.168.50.206:8082/griddb/v2/myCluster/dbs/public/sql/dcl' \
--header 'Content-Type: application/json' \
--header 'Authorization: ••••••' \
--data '[
{"stmt" : "REVOKE all on testing1 from israel"},
{"stmt" : "GRANT all on testing1 to israel"}
]'
このことを確認するには、GridDB CLI ツールを使用してください。
gs[public]> showuser israel
Name : israel
Type : General User
GrantedDB: public
testing1 ALL
ブログの内容について疑問や質問がある場合は Q&A サイトである Stack Overflow に質問を投稿しましょう。 GridDB 開発者やエンジニアから速やかな回答が得られるようにするためにも "griddb" タグをつけることをお忘れなく。 https://stackoverflow.com/questions/ask?tags=griddb