021 dimensions dimension1
This commit is contained in:
@@ -0,0 +1,113 @@
|
||||
-- выполнить в базе dwh для создания внешних таблиц схемы vmreports
|
||||
-- перед выполнением забекапить схему vmreports для восстановления в БД billing
|
||||
CREATE EXTENSION IF NOT EXISTS postgres_fdw;
|
||||
GRANT USAGE ON FOREIGN DATA WRAPPER postgres_fdw TO dbo;
|
||||
|
||||
SET ROLE dbo;
|
||||
--DROP SCHEMA IF EXISTS vmreports CASCADE;
|
||||
CREATE SCHEMA IF NOT EXISTS vmreports AUTHORIZATION dbo;
|
||||
|
||||
GRANT USAGE ON SCHEMA vmreports TO nifi,analytics,analyst;
|
||||
ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT SELECT ON TABLES TO nifi,analytics,analyst; -- это работает и для внешних таблиц
|
||||
--ALTER DEFAULT PRIVILEGES FOR ROLE dbo IN SCHEMA vmreports GRANT USAGE ON SEQUENCES TO nifi,analytics,analyst;
|
||||
|
||||
/*
|
||||
конструкция осложняется тем, что
|
||||
нужен один пользователь-владелец и второй читатель
|
||||
Это вызывает множество телодвижений при создании.
|
||||
Необходимость указывать пароль при локальном коннекте не очень радует
|
||||
(ведь пользователь локальный, прописан на этом же сервере)
|
||||
А при смене его пароля все сломается, и поиск ошибки будет неочевиден
|
||||
*/
|
||||
|
||||
DO $$
|
||||
DECLARE
|
||||
rec RECORD;
|
||||
BEGIN
|
||||
FOR rec IN
|
||||
SELECT tablename
|
||||
FROM pg_tables
|
||||
WHERE schemaname = 'vmreports'
|
||||
LOOP
|
||||
EXECUTE format('ALTER TABLE vmreports.%I RENAME TO %I',
|
||||
rec.tablename,
|
||||
'del_' || rec.tablename);
|
||||
END LOOP;
|
||||
END $$;
|
||||
|
||||
DROP SERVER IF EXISTS billing CASCADE;
|
||||
CREATE SERVER billing
|
||||
FOREIGN DATA WRAPPER postgres_fdw
|
||||
OPTIONS (host 'localhost', port '5432', dbname 'billing', updatable 'false');
|
||||
DROP USER MAPPING IF EXISTS FOR PUBLIC SERVER billing;
|
||||
CREATE USER MAPPING FOR PUBLIC SERVER billing OPTIONS (user 'nifi', password '***');
|
||||
|
||||
IMPORT FOREIGN SCHEMA vmreports FROM SERVER billing INTO vmreports;
|
||||
|
||||
--select * from vmreports.host;
|
||||
|
||||
/*
|
||||
план миграции - черновик
|
||||
Забекапить схему vmreports
|
||||
Восстановить схему vmreports из бэкапа в базу биллинг
|
||||
Поменять целевую базу импорта НиФи (для прода - втащить новый обмен из репозитория)
|
||||
Выполнить скрипт в базе DWH - он удалит (переименует) физические таблицы и создаст внешние таблицы на базу billing
|
||||
*/
|
||||
|
||||
/*
|
||||
Исходно данные host, compute, storage, (gpu)
|
||||
загружались в dwh.vmreports,
|
||||
для анализа capacity
|
||||
|
||||
В текущей конфигурации,
|
||||
чтобы избежать дублирования
|
||||
таблиц, данных и обменов NiFi
|
||||
Направляем загрузку данных из VROPS в схему billing.vmreports
|
||||
и в базе dwh (схема vmreports) создаем Foreign Tables на billing.vmreports.
|
||||
-----------------------------------------------
|
||||
Миграция на проде:
|
||||
убедиться, что новый обмен VROPS->billing.vmreports (billing/vmReports) загружен в NiFi Registry
|
||||
найти пароль nifi (под ним коннект к localhost)
|
||||
остановить загрузку из VROPS на nifi-01 (billing/vmReports),
|
||||
сделать бэкап схемы dwh.vmreports (займет минут 10 ... заняло 215 сек),
|
||||
Восстановить схему vmreports в БД billing - запустить восстановление (Clean Before Restore) (РИСК: восстановление может занять много времени и завершиться с ошибками, обычно так бывает)
|
||||
select count (*) from vmreports.storage
|
||||
Выполнить этот скрипт (заменив пароль nifi на актуальный перед выполнением)
|
||||
переименовать таблицы из схемы vmreports для удаления (есть в скрипте выше)
|
||||
создать Foreign Tables (коннект проверится при импорте схемы)
|
||||
Проверить, что права назначились коррректно
|
||||
|
||||
Обновить обмен billing/vmReports на продуктиве, запустить
|
||||
-----------------------------------------------------------------
|
||||
Данные из billing.vmreports также реплицируются
|
||||
(процессорами группы LK)
|
||||
в буферную базу rpt
|
||||
|
||||
*/
|
||||
|
||||
/*
|
||||
17:04:49 MSKERROR0dff1f93-153d-3a90-ed64-55d23960b88c
|
||||
EvaluateJsonPath[id=0dff1f93-153d-3a90-ed64-55d23960b88c] FlowFile FlowFile[filename=06c68bec-d824-4114-913b-bda34cb4fb1d] did not have valid JSON content.
|
||||
-- со второй попытки отработало
|
||||
17:05:15 MSKERROR239db407-76f2-3660-7fad-c4bedff6a4f8
|
||||
InvokeHTTP[id=239db407-76f2-3660-7fad-c4bedff6a4f8] Request Processing failed: FlowFile[filename=3474c340-f360-4a1e-a27e-283be41fc264]: java.net.SocketTimeoutException: timeout
|
||||
- Caused by: java.net.SocketException: Socket closed
|
||||
|
||||
https://payg.adl.nubes.ru/payg.cfm с первого раза таймаут, со второго посчиталось
|
||||
*/
|
||||
|
||||
/*
|
||||
теперь ищу в нифи примеры с кроном
|
||||
|
||||
17:25:05 MSKERROR16efa0f6-f1e7-3755-04fc-5be0383244ec
|
||||
PutDatabaseRecord[id=16efa0f6-f1e7-3755-04fc-5be0383244ec] Failed to put Records to database for FlowFile[filename=11f8176f-2a98-4199-932e-22e2fc2073b1]. Routing to failure.: org.apache.nifi.serialization.MalformedRecordException: Record does not have a value for the UpdateKey column 'obj_uuid'
|
||||
17:25:05 MSKERROR16efa0f6-f1e7-3755-04fc-5be0383244ec
|
||||
PutDatabaseRecord[id=16efa0f6-f1e7-3755-04fc-5be0383244ec] Record does not have a value for the UpdateKey column 'obj_uuid'
|
||||
17:25:05 MSKERROR16efa0f6-f1e7-3755-04fc-5be0383244ec
|
||||
PutDatabaseRecord[id=16efa0f6-f1e7-3755-04fc-5be0383244ec] Failed to put Records to database for FlowFile[filename=5039a3b6-2244-4451-81fc-deb8074f3cc7]. Routing to failure.: org.apache.nifi.serialization.MalformedRecordException: Record does not have a value for the UpdateKey column 'obj_uuid'
|
||||
17:25:05 MSKERROR16efa0f6-f1e7-3755-04fc-5be0383244ec
|
||||
PutDatabaseRecord[id=16efa0f6-f1e7-3755-04fc-5be0383244ec] Record does not have a value for the UpdateKey column 'obj_uuid'
|
||||
17:25:05 MSKERROR16efa0f6-f1e7-3755-04fc-5be0383244ec
|
||||
PutDatabaseRecord[id=16efa0f6-f1e7-3755-04fc-5be0383244ec] Failed to put Records to database for FlowFile[filename=8c6e9efb-198d-4303-897a-53fcfdf4d0f6]. Routing to failure.: org.apache.nifi.serialization.MalformedRecordException: Record does not have a value for the UpdateKey column 'obj_uuid'
|
||||
|
||||
*/
|
||||
Reference in New Issue
Block a user