プロベナンス: テーブル・ビュー操作
当ドキュメントでは、DDCに関連づけたテーブルを作成する方法を記述しています。
実行方式は全て JSON-RPC v2.0 を利用します。
テーブルの作成 prov.new_ddc
provenance 上にテーブルを作成したい場合のJSON-RPCのリクエスト例は下記の通りです。
リクエスト例
CREATE TABLE test (
id int,
name varchar,
password varchar,
phone varchar,
email varchar,
UNIQUE (id)
);
上記のようなテーブルを作成したい場合のJSON-RPCのリクエスト例は下記の通りです。
{
"jsonrpc": "2.0",
"method": "prov.new_ddc",
"params": {
"ddc_label": "ddc:test",
"columns": [
{"column_name":"id", "data_type":"int"},
{"column_name":"name", "data_type":"varchar"},
{"column_name":"password", "data_type":"varchar"},
{"column_name":"phone", "data_type":"varchar"},
{"column_name":"email", "data_type":"varchar"}],
"key": "id"
},
"id": "provenance_jsonrpc_id"
}
同時に records
を指定すると初期データを登録します。
{
"jsonrpc": "2.0",
"method": "prov.new_ddc",
"params": {
"ddc_label": "ddc:test",
"columns": [
{"column_name":"id", "data_type":"int", "nullable": false},
{"column_name":"name", "data_type":"varchar", "need_crypto": true},
{"column_name":"password", "data_type":"varchar"},
{"column_name":"phone", "data_type":"varchar"},
{"column_name":"email", "data_type":"varchar"}],
"key": "id",
"records":[
{"id": 1, "name": "yamada tarou","password": "password_abcde", "phone": "00-0000-0000", "email": "foobar@example.com"},
{"id": 1, "name": "yamada tarou2","password": "password_abcde2", "phone": "00-0000-0002", "email": "foobar2@example.com"}
]
},
"id": "provenance_jsonrpc_id"
}
パラメータ
params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 | 必須 |
columns | [object] | カラム名を column_name ,型をdata_type で指定する。data_type に指定できるのはvarchar , int , geometry , double precision , timestamp with time zone , timestamp の何れかです。varhcar を使う場合で暗号化したいときは、need_crypto を true とします。 |
必須(すべてのカラムと型) |
key | string | columns で指定したうち、ユニークにしたいカラムの column_name | |
records | [object] | columns で指定した column_name の値をキーにした値のセット |
カラム情報の取得 prov.get_ddc_columns
作成済のテーブルのカラム情報を取得したい場合のJSON-RPCのリクエスト例は下記の通りです。
{
"jsonrpc": "2.0",
"method": "prov.get_ddc_columns",
"params": {"ddc_label": "ddc:test"},
"id": "provenance_jsonrpc_id"
}
レスポンスの形式は以下の通りです。data_type
に varchar
を指定し、更に need_crypto
に trueを使って暗号化を指定した場合、レスポンス時の data_type
は bytea
になります。
{
"result":[
{"column_name": "id", "data_type": "integer", "nullable": false, "attnum": 1},
{"column_name": "name", "data_type": "bytea", "nullable": false, "attnum": 2},
{"column_name": "password", "data_type": "character varying", "nullable": false, "attnum": 3},
{"column_name": "phone", "data_type": "character varying", "nullable": false, "attnum": 4},
{"column_name": "email", "data_type": "character varying", "nullable": false, "attnum": 5}]
}
パラメータ
params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 | 必須 |
alias | string | ASで指定するプレフィックス文字列 |
レコード数のカウント prov.count_ddc_records
作成済のテーブルのレコード数を取得したい場合のJSON-RPCのリクエスト例は下記の通りです。
{
"jsonrpc": "2.0",
"method": "prov.count_ddc_records",
"params": {"ddc_label": "ddc:test"},
"id": "provenance_jsonrpc_id"
}
レスポンスの形式は以下の通りです。
{
"result": 0
}
パラメータ
params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 | 必須 |
session_id | integer | セッションIDが判っている場合に指定 |
レコード・カラムの部分選択 prov.set_ddc
作成済のテーブルを部分的に選択して取得したい場合のJSON-RPCのリクエスト例は下記の通りです。
CREATE VIEW subtable AS
SELECT id, name, email
FROM test
WHERE id <= 100;
上記のようなイメージで取得したい場合のリクエスト例です。
{
"jsonrpc": "2.0",
"method": "prov.set_ddc",
"params": {"ddc_label": "ddc:subtable","source": "ddc:test", "ddc_type":"view", "columns":["id", "name","email"], "conds":{"<=":["id", 100]}},
"id": "provenance_jsonrpc_id"
}
パラメータ
params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 | 必須 |
source | string | 既存のテーブル名を指定する。スキーマがわかっている場合は |
必須 |
ddc_type | string | link , table , view の何れかを指定 |
必須 |
columns | [string] | 一部のカラムのみを使ってddcを作成する場合はカラム名を文字列の配列で指定 | |
conds | string | true, false の何れか | 必須 |
no_exec | string | true, false の何れか | 必須 |
レコード追加 prov.put_ddc_records
作成済のテーブルに対してレコードを追加したい場合のJSON-RPCのリクエスト例は下記の通りです。
INSERT INTO test (id, name, password, phone, email) VALUES
(1,'石塚 洋次','WJI67hUi','080-4715-4302','WzxKRGR6J@sample.com'),
(2,'近藤 恭之','pHSBKdvB','090-3132-9449','KefD6KU@test.net'),
(3,'玉井 真帆','SieMcQZi','090-2613-4478','cTC6Gu7a@test.com');
上記のようなイメージで追加したい場合のリクエスト例です。2番目のリクエストは追加した行を数えています。
{
"jsonrpc": "2.0",
"method": "prov.put_ddc_records",
"params": {"ddc_label": "ddc:test",
"records":[[1,"石塚 洋次","WJI67hUi","080-4715-4302","WzxKRGR6J@sample.com"],
[2,"近藤 恭之","pHSBKdvB","090-3132-9449","KefD6KU@test.net"],
[3,"玉井 真帆","SieMcQZi","090-2613-4478","cTC6Gu7a@test.com"]],
"on_conflict": "error"
},
"id": "provenance_jsonrpc_id"
}
{
"jsonrpc": "2.0",
"method": "prov.count_ddc_records",
"params": {"ddc_label": "ddc:test"},
"id": "provenance_jsonrpc_id"
}
count_ddc_records の結果例は下記の通りです。
{
"result": 3,
"id": "provenance_jsonrpc_id",
"jsonrpc": "2.0"
}
パラメータ
prov.put_ddc_records
の params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 | 必須 |
records | [object] | new_ddc などの columns で指定した column_name の値をキーにした値のセット |
|
on_conflict | string | update , nothing , error の何れか |
必須 |
prov.count_ddc_records
の params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 |
テーブルに別のテーブルのレコードを追加 prov.merge_ddc
作成済のテーブルに対して別テーブルのレコードを追加したい場合のJSON-RPCのリクエスト例は下記の通りです。
INSERT INTO xrain
SELECT * FROM xrain_recent;
上記のようなイメージで別テーブルのレコードを追加したい場合のリクエスト例です。2番目のリクエストは追加した行を数えています。
{
"jsonrpc": "2.0",
"method": "prov.merge_ddc",
"params": {"source": "ddc:xrain_recent",
"target": "ddc:xrain",
"on_conflict": "nothing",
"no_exec": false},
"id": "provenance_jsonrpc_id"
}
パラメータ
params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
target | string | DDC名 | 必須 |
source | string | DDC名 | 必須 |
no_exec | string | true, false の何れか | 必須 |
on_conflict | string | update , nothing , error の何れか |
必須 |
レコード取得 prov.get_ddc_records
データ保存済のテーブルに対してテーブルのレコードを取得したい場合のJSON-RPCのリクエスト例は下記の通りです。
SELECT * FROM test;
上記のようなイメージでレコードを取得したい場合のリクエスト例です。
{
"jsonrpc": "2.0",
"method": "prov.get_ddc_records",
"params": {"ddc_label": "ddc:test"},
"id": "provenance_jsonrpc_id"
}
パラメータ
params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 | 必須 |
テーブル結合
データ保存済の2つのテーブルに対して結合したテーブルを作成したい場合のJSON-RPCのリクエスト例は下記の通りです。
CREATE TABLE xrain_domingo AS
SELECT
l.start_datetime, l.rain_map AS rast,
r.zoomlevel, r.tile_x, r.tile_y, r.start_datetime
FROM xrain l
INNER JOIN domingo r ON l.start_datetime = r.start_datetime;
上記のようなイメージでテーブルを結合したい場合のリクエスト例です。左側の別名は l
、右側の別名は r
で固定です。
{
"jsonrpc": "2.0",
"method": "prov.join_ddc",
"params": {"output_ddc": "ddc:xrain_domingo",
"left_ddc":"ddc:xrain", "right_ddc":"ddc:domingo",
"columns":["l.start_datetime", "l.rain_map as rast",
"r.zoomlevel", "r.tile_x", "r.tile_y", "r.area_q"],
"conds":{"=": ["l.start_datetime", "r.start_datetime"]},
"join_type": "inner"},
"id": "provenance_jsonrpc_id"
}
パラメータ
params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
output_ddc | string | DDC名 | 必須 |
left_ddc | string | DDC名 | 必須 |
right_ddc | string | DDC名 | 必須 |
columns | [string] | 取得したいカラム名を左側テーブルをl , 右側テーブルをr をエイリアスとして指定 |
必須 |
conds | object | <= , >= , < , > , = をキーとし、配列で条件を指定 |
必須 |
join_type | string | inner , outer のいずれか |
必須 |
テーブル削除 prov.delete_ddc
作成済のテーブルを削除したい場合のJSON-RPCのリクエスト例は下記の通りです。
DROP TABLE test;
上記のようなイメージでテーブルを削除したい場合のリクエスト例です。
{
"jsonrpc": "2.0",
"method": "prov.delete_ddc",
"params": {"ddc_label": "ddc:test"},
"id": "provenance_jsonrpc_id"
}
パラメータ
params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 | 必須 |
トランザクション prov.begin_session, prov.resume_session, prov.begin_or_resume_session, prov.rollback, prov.commit
データベースのトランザクションを制御する場合のJSON-RPCのリクエスト例は下記の通りです。
BEGIN TRANSACTION;
...
ROLLBACK;
...
COMMIT;
上記のようなイメージで制御したい場合のリクエスト例です。
{
"jsonrpc": "2.0",
"method": "prov.begin_session",
"id": "provenance_jsonrpc_id"
}
{
"jsonrpc": "2.0",
"method": "prov.resume_session",
"id": "provenance_jsonrpc_id"
}
{
"jsonrpc": "2.0",
"method": "prov.begin_or_resume_session",
"id": "provenance_jsonrpc_id"
}
{
"jsonrpc": "2.0",
"method": "prov.rollback",
"id": "provenance_jsonrpc_id"
}
{
"jsonrpc": "2.0",
"method": "prov.commit",
"id": "provenance_jsonrpc_id"
}
テーブル名と ddc の変換 prov.set_ddc, prov.resolve_ddc
既存テーブルにddcを付与したい場合のJSON-RPCのリクエスト例は下記の通りです。
{
"jsonrpc": "2.0",
"method": "prov.set_ddc",
"params":{"ddc_label":"ddc:test","source":"public.test","ddc_type":"link", "no_exec": false},
"id": "provenance_jsonrpc_id"
}
ddcが指している実体(table/view)を取得したい場合のJSON-RPCのリクエスト例は下記の通りです。
{
"jsonrpc": "2.0",
"method": "prov.resolve_ddc",
"params":{"ddc_label":"ddc:test"},
"id": "provenance_jsonrpc_id"
}
resolve_ddc の結果例は下記の通りです。
{
"result": {"table": {"ddc_info":["realname"]}},
"id": "provenance_jsonrpc_id",
"jsonrpc": "2.0"
}
パラメータ
prov.set_ddc
の params には前述の内容を使用してください。
prov.resolve_ddc
の params には以下のパラメータを指定します。
パラメータ名 | データ型 | 内容 | 既定値 |
---|---|---|---|
ddc_label | string | DDC名 | 必須 |