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

Материал из 3v-wiki
Перейти к навигации Перейти к поиску
 
(не показана 1 промежуточная версия этого же участника)
Строка 9: Строка 9:
 
}
 
}
 
</syntaxhighlight>
 
</syntaxhighlight>
После создания соединения возможно создать справочник, который будет ссылаться на данное соединение. Справочник доступен на чтение.
+
 
 
===== Структура схемы соединения типа "Link" =====
 
===== Структура схемы соединения типа "Link" =====
  
Строка 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]]

Текущая версия на 13:25, 23 ноября 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