itgendch033: Резервные базы данных требуют, чтобы Invantive Data Replicator ограничивал количество столбцов до 1000 для «ExactOnlineXML.XML.SubscriptionLines». - PullRequest
0 голосов
/ 29 мая 2018

При выполнении пакетного сценария для репликации моих данных из Exact Online я получаю следующую ошибку:

Ошибка itgencun016: Восклицательный знак itgendch033: Для резервного копирования баз данных требуется Invantive Data Replicator, чтобы ограничить число столбцов1000 за 'ExactOnlineXML.XML.SubscriptionLines'.

Это происходит для следующего запроса:

select /*+ ods(true, interval '20 hours') */ count(*) 
from   ExactOnlineXML.XML.SubscriptionLines

То же самое относится к ExactOnlineXML.XML.InvoiceLines.

Как можно реплицировать эти таблицы, не увеличивая количество столбцов.

1 Ответ

0 голосов
/ 29 мая 2018

Invantive SQL не накладывает ограничений ни на длину имен столбцов, ни на количество столбцов для таблицы или представления.

Однако традиционные базы данных были разработаны в другое время и обычно ограничиваются, например, 30..128 символов имен столбцов и 1.000, 1.024 или несколько тысяч столбцов.Помните, что Oracle работал на 64 КБ (32 КБ, 32 КБ данных);это примерно размер этого вопроса и ответа: -)

При репликации данных из Exact Online в традиционную базу данных, такую ​​как Oracle, SQL Server или PostgreSQL, Invantive Data Hub будет использовать Invantive SQL для извлечения данных изв этом случае Exact Online, а затем массовая загрузка его в базу данных.

Однако данные должны соответствовать как именам столбцов, так и номерам столбцов.

Это главная причина, по которой имена столбцов такие странные;они помещаются в ограниченное количество символов независимо от оригинальных имен столбцов.Имена столбцов сгенерированных представлений также сокращаются за счет удаления центральных частей с уникальным хешем MD5.

Для числа столбцов Data Hub просто строго проверяет, что в вашем источнике не более 1 000 столбцов.,Exact Online XML API не имеет документации, описывающей, какие столбцы можно заполнить значением;просто XSD, описывающий все теоретические возможности, приводящие к миллионам столбцов.

Большинство таблиц Exact Online на основе XML были настроены таким образом, чтобы исключить пути к именам столбцов, которые не имеют значений, но все же часто не соответствуютв пределах 1000 столбцов.

Возможные решения:

  • Использовать вариант Exact Online REST API, который часто присутствует, а иногда и похож по функциональности и производительности (не всегда, XMLAPI старый, но в целом лучше для удобства использования).Поэтому проверьте, существует ли ExactonlineREST..SubscriptionLines.
  • . Подробно опишите, какие столбцы нужно реплицировать.

Опишите столбцы для репликации

Последнее решение немного сложнее.Он также не поддается использованию продвинутых стратегий, таких как ручная загрузка (с веб-хуками) или умная выборка;это просто обычная копия с версиями или без них.

В качестве примера я выполнил запрос к 200 точным компаниям с подписками при подключении к среде репликатора данных:

normale query on subscription lines

Обратите внимание, что /*+ ods(true) */ отсутствует, но подразумевается;репликация по умолчанию выполняется также при подключении к репликатору данных.

Добавляя /*+ ods(false) */, вы фактически указываете механизму SQL не отправлять данные для репликации в базу данных поставщику репликатора данных.

Когда я запускаю его, возникает другая ошибка itgenugs026 (запрошенное количество столбцов превышает максимальное число, поддерживаемое для отображения в таблице результатов):

Error 2

Это на самом деле ошибка рендеринга;сетка, используемая в Query Tool, ограничивается 1.000 столбцами.Большие объемы столбцов приводят к очень медленному времени отклика пользовательского интерфейса.

Нажав кнопку «Скрыть пустые столбцы» или используя Invantive Data Hub в качестве пользовательского интерфейса, вы можете получить фактические результаты:

Result on Exact Online XML subscriptions

Обратите внимание на подсказку: заголовок отображает несколько естественных меток, но фактическое имя столбца отображается во всплывающей подсказке.

Запишите названия столбцов, которые вам нужны, изаполните таблицу в памяти только теми столбцами, которые вам нужны, например:

create or replace table my_subscriptions@inmemorystorage
as
select /*+ ods(false) */ 
       subscription_number_attr 
,      subscription_description
from   exactonlinexml..subscriptionlines

Теперь скопируйте эту таблицу обычным способом:

select /*+ ods(true, interval '1 second') */ 
       count(*) some_unneeded_data_to_force_replication
from   my_subscriptions@inmemorystorage

Обратите внимание, что подсказка ODS должна присутствовать,Таблицы в памяти никогда не реплицируются по умолчанию.

Для обновления вы можете использовать alter persistent cache [force] refresh, но таблица в памяти должна быть заполнена заранее.

Результирующая запись в хранилищебудет:

repository change

Таблица фактов (см. dcs _.... для Data Vault с перемещением во времени):

raw facts backing table

Именное представление по умолчанию - imy_my_subscription_r (imy - это сокращение от драйвера 'inmemorystorage'):

default current version view

...