Платформа 3V/Соединение с источником/Подключение к БД PostgreSQL: различия между версиями

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
Строка 156: Строка 156:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
===== Создание показателя с данными внешней таблицы БД PostgreSQL=====
 +
Создадим справочник rnc_database, куда добавим атрибуты id, descr, current_release из rnc_database  из соединения https://study.3v-cloud.com/navigator/#/home?objectId=852
 +
<syntaxhighlight lang="JSON" line>
 +
{
 +
  "disableCache": false,
 +
  "cacheSettings": {
 +
    "expirationMinutes": null
 +
  },
 +
  "discriminator": "TableDictionary",
 +
  "dictionaryStructure": {
 +
    "id": 855,
 +
    "name": "Пример таблицы из бд hh-pgsql-public.ebi.ac.uk_копия",
 +
    "code": "New_Dictionary_2339_copy",
 +
    "description": null,
 +
    "type": "TableDictionary",
 +
    "tableName": "rnc_database",
 +
    "sequenceName": "",
 +
    "databaseId": 852,
 +
    "attributes": [
 +
      {
 +
        "id": 1,
 +
        "name": "Идентификатор",
 +
        "code": "id",
 +
        "description": "",
 +
        "dataType": "Integer",
 +
        "type": "Id",
 +
        "isNullable": false,
 +
        "hasMultipleValues": false,
 +
        "isVisible": false,
 +
        "isReadOnly": true,
 +
        "tableName": "",
 +
        "identIndex": {
 +
          "code": null,
 +
          "isUnique": false,
 +
          "dbIndexName": null,
 +
          "fields": [],
 +
          "isNew": true
 +
        },
 +
        "referenceIndex": {
 +
          "code": null,
 +
          "isUnique": false,
 +
          "dbIndexName": null,
 +
          "fields": [],
 +
          "isNew": true
 +
        },
 +
        "defaultValue": -1,
 +
        "defaultValueExpression": null,
 +
        "component": null,
 +
        "parentAttributeId": null,
 +
        "locale": null
 +
      },
 +
      {
 +
        "id": 31,
 +
        "name": "descr",
 +
        "code": "descr",
 +
        "description": "",
 +
        "dataType": "String",
 +
        "type": "Custom",
 +
        "isNullable": true,
 +
        "hasMultipleValues": false,
 +
        "isVisible": false,
 +
        "isReadOnly": true,
 +
        "tableName": "",
 +
        "identIndex": {
 +
          "code": null,
 +
          "isUnique": false,
 +
          "dbIndexName": null,
 +
          "fields": [],
 +
          "isNew": true
 +
        },
 +
        "referenceIndex": {
 +
          "code": null,
 +
          "isUnique": false,
 +
          "dbIndexName": null,
 +
          "fields": [],
 +
          "isNew": true
 +
        },
 +
        "defaultValue": -1,
 +
        "defaultValueExpression": null,
 +
        "component": null,
 +
        "parentAttributeId": null,
 +
        "locale": null
 +
      },
 +
      {
 +
        "id": 32,
 +
        "name": "current_release",
 +
        "code": "current_release",
 +
        "description": "",
 +
        "dataType": "Integer",
 +
        "type": "Custom",
 +
        "isNullable": true,
 +
        "hasMultipleValues": false,
 +
        "isVisible": false,
 +
        "isReadOnly": true,
 +
        "tableName": "",
 +
        "identIndex": {
 +
          "code": null,
 +
          "isUnique": false,
 +
          "dbIndexName": null,
 +
          "fields": [],
 +
          "isNew": true
 +
        },
 +
        "referenceIndex": {
 +
          "code": null,
 +
          "isUnique": false,
 +
          "dbIndexName": null,
 +
          "fields": [],
 +
          "isNew": true
 +
        },
 +
        "defaultValue": -1,
 +
        "defaultValueExpression": null,
 +
        "component": null,
 +
        "parentAttributeId": null,
 +
        "locale": null
 +
      }
 +
    ],
 +
    "indexes": [
 +
      {
 +
        "code": "primary_key",
 +
        "isUnique": true,
 +
        "dbIndexName": null,
 +
        "fields": [
 +
          "ID"
 +
        ],
 +
        "isNew": true
 +
      }
 +
    ]
 +
  },
 +
  "id": 855,
 +
  "name": "Пример таблицы из бд hh-pgsql-public.ebi.ac.uk_копия",
 +
  "code": "New_Dictionary_2339_copy",
 +
  "description": null,
 +
  "dictionaryType": "TableDictionary",
 +
  "tableName": "rnc_database",
 +
  "isHistoryEnabled": false,
 +
  "databaseId": 852,
 +
  "isAccessRightsEnabled": false,
 +
  "viewOptions": {
 +
    "limit": 100,
 +
    "filteringAttributes": [],
 +
    "filtersJoin": "And",
 +
    "disableRefreshWhenParameterChanged": false,
 +
    "gridComponent": null
 +
  },
 +
  "isDataSourceExternal": true,
 +
  "isNotifyEnable": false
 +
}
 +
</syntaxhighlight>
 +
 +
[[Файл:пример конструктора внешней таблицы показателя.png|1000px]] <br>
 +
 +
Теперь возможно создать показатель и добавить в качестве данных показателя данные внешней таблицы.
 +
Для этого необходимо открыть конструктор внутри показателя, выбрать соединение, указать название внешней таблицы и выбрать необходимый маппинг атрибутов для связи со справочником показателя и для значения факта.
 +
В нашем примере, связь будет по атрибуту current_release, а  фактом для показателя будет атрибут num_organisms.
 +
[[Файл:факт бд rnc database.png|1000px]]

Версия 14:33, 22 ноября 2021

В платформе 3v возможно подключаться к внешним бд PostgreSQL, через создания объекта репозитория Соединение, настройки его через json и использование его внутри справочников платформы. Для подключения к внешним бд PostgreSQL возможно настроить соединение следующего вида: 
1 {
2   "dbType": "PostgreSQL",
3   "connectionString": "Server=my_db_adress;Port=5432;User Id=postgres;Password=postgres;Database=test;Search Path=public;Timeout=120;",
4   "id": 70000,
5   "name": "Соединение с БД PostgreSQL"
6 }

После создания соединения возможно создать справочник, который будет ссылаться на данное соединение. Справочник доступен на чтение.

Структура схемы соединения типа "Link"
Ключ Значение или описание значения
dbType PostgreSQL
"connectionString" строки подключения к внешней бд PostgreSQL, где Server - адрес бд, Port - номер порта для подключения (дополнительно необходимо проверить открыттие порта для подключения со стороны бд), User Id - id пользователя бд, Password - пароль, Database - название бд на сервере, Search Path - путь для поиска схем, по умолчанию обычно указывается = Public, Timeout=120 (таймаут выполнения запроса для соединения)
id id объекта подключения в репозитории платформы
name наименование подключения
Пример подключения к внешней БД PostgreSQL

В дальнейшем можно использовать данное соединение на чтение внутри структуры обычных справочников, например создадим подключение к тестовой бд, посвященной исследованиям РНК https://rnacentral.org/help/public-database и попробуем добавить данные из одной ее таблицы в справочник на платформу. Соединение: https://study.3v-cloud.com/navigator/#/home?objectId=852

1 {
2   "dbType": "PostgreSQL",
3   "connectionString": "Server=hh-pgsql-public.ebi.ac.uk;Port=5432;User Id=reader;Password=NWDMCE5xdipIjRrp;Database=pfmegrnargs;Search Path=rnacen;Timeout=120;",
4   "id": 852,
5   "name": "hh-pgsql-public.ebi.ac.uk"
6 }

Справочник: https://study.3v-cloud.com/navigator/#/home?objectId=853, в который добавим пару атрибутов из бд и укажем, что он внешний.
Мы создали структуру справочника, и добавили через json данные об атрибутах внешней таблицы бд, не забыв прописать "isDataSourceExternal": true (отмечая справочник внешним источником) и "limit": 100 для ограничения числа данных.

Пример структуры:

  1 {
  2   "disableCache": false,
  3   "cacheSettings": {
  4     "expirationMinutes": null
  5   },
  6   "discriminator": "TableDictionary",
  7   "dictionaryStructure": {
  8     "id": 853,
  9     "name": "Новый справочник",
 10     "code": "New_Dictionary_2339",
 11     "description": null,
 12     "type": "TableDictionary",
 13     "tableName": "qa_status",
 14     "sequenceName": "",
 15     "databaseId": 852,
 16     "attributes": [
 17       {
 18         "id": 1,
 19         "name": "Идентификатор",
 20         "code": "taxid",
 21         "description": "",
 22         "dataType": "Integer",
 23         "type": "Id",
 24         "isNullable": false,
 25         "hasMultipleValues": false,
 26         "isVisible": false,
 27         "isReadOnly": true,
 28         "tableName": "",
 29         "identIndex": {
 30           "code": null,
 31           "isUnique": false,
 32           "dbIndexName": null,
 33           "fields": [],
 34           "isNew": true
 35         },
 36         "referenceIndex": {
 37           "code": null,
 38           "isUnique": false,
 39           "dbIndexName": null,
 40           "fields": [],
 41           "isNew": true
 42         },
 43         "defaultValue": -1,
 44         "defaultValueExpression": null,
 45         "component": null,
 46         "parentAttributeId": null,
 47         "locale": null
 48       },
 49       {
 50         "id": 31,
 51         "name": "upi",
 52         "code": "upi",
 53         "description": "",
 54         "dataType": "String",
 55         "type": "Custom",
 56         "isNullable": true,
 57         "hasMultipleValues": false,
 58         "isVisible": false,
 59         "isReadOnly": true,
 60         "tableName": "",
 61         "identIndex": {
 62           "code": null,
 63           "isUnique": false,
 64           "dbIndexName": null,
 65           "fields": [],
 66           "isNew": true
 67         },
 68         "referenceIndex": {
 69           "code": null,
 70           "isUnique": false,
 71           "dbIndexName": null,
 72           "fields": [],
 73           "isNew": true
 74         },
 75         "defaultValue": -1,
 76         "defaultValueExpression": null,
 77         "component": null,
 78         "parentAttributeId": null,
 79         "locale": null
 80       }
 81     ],
 82     "indexes": [
 83       {
 84         "code": "primary_key",
 85         "isUnique": true,
 86         "dbIndexName": null,
 87         "fields": [
 88           "ID"
 89         ],
 90         "isNew": true
 91       }
 92     ]
 93   },
 94   "id": 853,
 95   "name": "Новый справочник",
 96   "code": "New_Dictionary_2339",
 97   "description": null,
 98   "dictionaryType": "TableDictionary",
 99   "tableName": "qa_status",
100   "isHistoryEnabled": false,
101   "databaseId": 852,
102   "isAccessRightsEnabled": false,
103   "viewOptions": {
104     "limit": 100,
105     "filteringAttributes": [],
106     "filtersJoin": "And",
107     "disableRefreshWhenParameterChanged": false,
108     "gridComponent": null
109   },
110   "isDataSourceExternal": true,
111   "isNotifyEnable": false
112 }
Создание показателя с данными внешней таблицы БД PostgreSQL

Создадим справочник rnc_database, куда добавим атрибуты id, descr, current_release из rnc_database из соединения https://study.3v-cloud.com/navigator/#/home?objectId=852

  1 {
  2   "disableCache": false,
  3   "cacheSettings": {
  4     "expirationMinutes": null
  5   },
  6   "discriminator": "TableDictionary",
  7   "dictionaryStructure": {
  8     "id": 855,
  9     "name": "Пример таблицы из бд hh-pgsql-public.ebi.ac.uk_копия",
 10     "code": "New_Dictionary_2339_copy",
 11     "description": null,
 12     "type": "TableDictionary",
 13     "tableName": "rnc_database",
 14     "sequenceName": "",
 15     "databaseId": 852,
 16     "attributes": [
 17       {
 18         "id": 1,
 19         "name": "Идентификатор",
 20         "code": "id",
 21         "description": "",
 22         "dataType": "Integer",
 23         "type": "Id",
 24         "isNullable": false,
 25         "hasMultipleValues": false,
 26         "isVisible": false,
 27         "isReadOnly": true,
 28         "tableName": "",
 29         "identIndex": {
 30           "code": null,
 31           "isUnique": false,
 32           "dbIndexName": null,
 33           "fields": [],
 34           "isNew": true
 35         },
 36         "referenceIndex": {
 37           "code": null,
 38           "isUnique": false,
 39           "dbIndexName": null,
 40           "fields": [],
 41           "isNew": true
 42         },
 43         "defaultValue": -1,
 44         "defaultValueExpression": null,
 45         "component": null,
 46         "parentAttributeId": null,
 47         "locale": null
 48       },
 49       {
 50         "id": 31,
 51         "name": "descr",
 52         "code": "descr",
 53         "description": "",
 54         "dataType": "String",
 55         "type": "Custom",
 56         "isNullable": true,
 57         "hasMultipleValues": false,
 58         "isVisible": false,
 59         "isReadOnly": true,
 60         "tableName": "",
 61         "identIndex": {
 62           "code": null,
 63           "isUnique": false,
 64           "dbIndexName": null,
 65           "fields": [],
 66           "isNew": true
 67         },
 68         "referenceIndex": {
 69           "code": null,
 70           "isUnique": false,
 71           "dbIndexName": null,
 72           "fields": [],
 73           "isNew": true
 74         },
 75         "defaultValue": -1,
 76         "defaultValueExpression": null,
 77         "component": null,
 78         "parentAttributeId": null,
 79         "locale": null
 80       },
 81       {
 82         "id": 32,
 83         "name": "current_release",
 84         "code": "current_release",
 85         "description": "",
 86         "dataType": "Integer",
 87         "type": "Custom",
 88         "isNullable": true,
 89         "hasMultipleValues": false,
 90         "isVisible": false,
 91         "isReadOnly": true,
 92         "tableName": "",
 93         "identIndex": {
 94           "code": null,
 95           "isUnique": false,
 96           "dbIndexName": null,
 97           "fields": [],
 98           "isNew": true
 99         },
100         "referenceIndex": {
101           "code": null,
102           "isUnique": false,
103           "dbIndexName": null,
104           "fields": [],
105           "isNew": true
106         },
107         "defaultValue": -1,
108         "defaultValueExpression": null,
109         "component": null,
110         "parentAttributeId": null,
111         "locale": null
112       }
113     ],
114     "indexes": [
115       {
116         "code": "primary_key",
117         "isUnique": true,
118         "dbIndexName": null,
119         "fields": [
120           "ID"
121         ],
122         "isNew": true
123       }
124     ]
125   },
126   "id": 855,
127   "name": "Пример таблицы из бд hh-pgsql-public.ebi.ac.uk_копия",
128   "code": "New_Dictionary_2339_copy",
129   "description": null,
130   "dictionaryType": "TableDictionary",
131   "tableName": "rnc_database",
132   "isHistoryEnabled": false,
133   "databaseId": 852,
134   "isAccessRightsEnabled": false,
135   "viewOptions": {
136     "limit": 100,
137     "filteringAttributes": [],
138     "filtersJoin": "And",
139     "disableRefreshWhenParameterChanged": false,
140     "gridComponent": null
141   },
142   "isDataSourceExternal": true,
143   "isNotifyEnable": false
144 }

пример конструктора внешней таблицы показателя.png

Теперь возможно создать показатель и добавить в качестве данных показателя данные внешней таблицы. Для этого необходимо открыть конструктор внутри показателя, выбрать соединение, указать название внешней таблицы и выбрать необходимый маппинг атрибутов для связи со справочником показателя и для значения факта. В нашем примере, связь будет по атрибуту current_release, а фактом для показателя будет атрибут num_organisms. факт бд rnc database.png