こんにちは。CData Software Japan リードエンジニアの杉本です。
前回の記事で自動スキーマ検出の対応を紹介したんですが、合わせて強力なアップデートがあったので、お届けします。
www.cdatablog.jp
GraphQL では Mutation と呼ばれる、サーバー側のリソース・データを更新するための仕組みが提供されていますね。
graphql.org
大胆に言ってしまえば、RDBのストアド・プロシージャみたいな仕組みかなと思います。APIの文脈で行けば、RPCライクなものですね。
今までCData GraphQL DriverではQueryだけがサポートされていて、データ読み取り特化だったのですが、最新バージョンではこのMutation を呼び出す機能がサポートされたので、紹介したいと思います。
対象のGraphQL
今回もGraphQL を自動生成するサービス、Hasraを利用しました。
Hasraでは予め以下のような「Accounts」テーブルを作っています。
Hasraは大変便利なことに、このデータモデルから自動的にCreate/Update/Delete用の各種Mutationを生成してくれます。
今回はこのMutationを実行してみます。
Mutationを実行してみる
まずはシンプルに1レコード追加する「insert_Accounts_one」のMutationを実行してみましょう。
GraphiQL上では以下のような記述になります。
mutation MyMutation {
insert_Accounts_one(object: {AccountName: "Sample Company", AccountNumber: "004"}) {
AccountName
AccountNumber
Id
}
}
CData GraphQL Driver はJDBCを利用しましたが、基本的にODBCやADO.NET、どのテクノロジーでも利用できます。
www.cdata.com
接続設定は前回と同様で、そのまま同じ設定でMutationが利用できます。
Mutation はCData GraphQL Driverではストアド・プロシージャの形式で利用できるようになっています。
今回のようなMutation だと、以下のようにストアド・プロシージャを発行すればシンプルに利用できます。
Exec insert_Accounts_one AccountName = 'CData Driver Sample', AccountNumber = '005';
配列のオブジェクトを利用する場合
ちなみに、Hasraの場合以下のような一括書き込み処理もサポートしていたりします。
mutation MyMutation {
insert_Accounts(
objects: [
{AccountName: "Sample2", AccountNumber: "006"},
{AccountName: "Sample3", AccountNumber: "007"}
]) {
affected_rows
}
}
このような配列形式のオブジェクトを利用したい場合、以下のようにTEMPテーブルという機能を用いて、一時的にデータを格納することで対応できます。
Insert into insert_Accounts_objects#TEMP(AccountName,AccountNumber)VALUES('INSERT Sample 1','008');
Insert into insert_Accounts_objects#TEMP(AccountName,AccountNumber)VALUES('INSERT Sample 2','009');
Exec insert_Accounts objects = insert_Accounts_objects#TEMP;
おわりに
このようにMutationの対応が行われたことで、より幅広く様々なツールとGraphQLインターフェースを通じた連携が可能になりました。
ETL・EAIツールなどでは利用するケースが多いと思うので、ぜひ試してみてください。
ご不明な点がありましたら、お気軽にテクニカルサポートフォームまでお問い合わせください。
https://www.cdata.com/jp/support/submit.aspx
関連コンテンツ