Skip to content

プロベナンス: テーブル・ビュー操作

当ドキュメントでは、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_typevarcharを指定し、更に need_crypto に trueを使って暗号化を指定した場合、レスポンス時の data_typebytea になります。

{
  "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名 必須