загрузка данных из связанных классов/таблиц

0 голосов
спросил 17 Март, 17 от katrina (1,580 баллов) в категории Программные продукты Esri
редактировать 06 Июнь, 17 от varvara_t

Здравствуйте, знатоки!
Бьюсь над задачей удобной загрузки данных из классов со связанными данными...
Что дано:
БГД_1 с классом_1 со связанной через Relationship Class таблицей_1, связь осуществляется по полю GlobalID. И в классе, и в таблице имеются данные.
Требуется:
данные из класса_1+таблица_1 загрузить в класс_2+таблица_2 (в БГД_2) так, чтобы при загрузке были перенесены не только сами объекты, но и связанные с ними записи в таблице.
загрузка требуется по причине того, что у класса_2+таблицы_2 немного отличается структура полей - хотелось бы сохранить атрибутику и просто указать, из каких полей в какие поля требуется записать данные.
Возможно литакуюзадачуреализовать стандартными средствами Desktop (Standard)/Pro, доступными просто пользователю?
Дополнительное требование: перед загрузкой данных в класс_2+таблица_2 объекты класса_1 нужно перепроецировать.
Пробовала и через загрузчик данных, и через копирование... связанные записи не "тянутся" вслед за своими объектами.
При этом, при перепроецировании класса_1 сохраняются значения GlobalID - и тем самым есть возможность сохранить связность объектов и записей в таблице.
При использовании загрузчика данных в ArcMapзначения GlobalID меняются в целевом классе_2/таблице_2 - т.е. в нашем случаесвязь будет потеряна.

3 Ответы

0 голосов
ответил 17 Март, 17 от Grigoriy (127,020 баллов)
1. Копируете схему класс_2/таблица_2 в xml.
2. В БГД2 убиваете "класс_2/таблицу_2".
3. Создаете в БГД2пустые "класс_2/таблицу_2" с нужными полями, но без Relationship Class.
4. Перепроецируете данные из "класса_1" в промежуточный класс.
5. Правой кнопкой мыши в арккаталоге на класс_2 и Load данных из "промежуточного класса".
6. Правой кнопкой мыши в арккаталогена таблица_2 и Load данных из таблица_1.
7. Создаете Relationship Class в БГД2.
0 голосов
ответил 23 Март, 17 от katrina (1,580 баллов)
в п.4 сохраняются значения поля GlobalID в новом, уже перепроецированном, классе
вп.5 загрузчик ArcCatalog'а тоже изменяет значения поля GlobalID (являетсяпервичным ключом для будущего Relationship Class) - и тут вопрос: почему при перепроецировании GlobalID сохраняется, а при загрузке – нет? При этом GlobalID = уникальный идентификатор в рамках всей БГД. Но даже если я перепроецирую класс в ту же БГД, где находится исходный класс, то легко возникает ситуация, что в одной БГД есть 2 объекта с одинаковыми GlobalID. А это выглядит странно… хотя и может быть удобно в данном конкретном случае для меня
в п.6 в таблице сохраняются значения вторичного ключа
но т.к.после п.5 были изменены значения первичного ключа, то восстановить связь между загруженными объектами и записями таблицы становится просто невозможно (первичный ключ не совпадает со вторичным)
Поправьте меня, если я ошибаюсь в своих ожиданиях. Если есть связанные данные и есть «умный» загрузчик – то ожидается, что весь этот ум будет способен перенести весь массив данных, раз они всё равно уже связаны и как раз Загрузчик объектов умеет работать со связанными штуками. Мы тут поразмышляли с коллегами на тему загрузки… было бы логично, чтобы загрузка связанных данных работала со всеми связанными данными (уже ведь имеется в БГД описание связи) и, даже если при этом меняется значение первичного ключа, то тогда аналогично меняется и значение вторичного ключа.
Остается непонятным, была ли (или, возможно, будет?)возможность загружать связанные данные... конструкцию связанных классов/таблиц в БГД создать можно, но далее такие данные можно использовать либо в исходной БГД, либо просто копируя весь класс целиком в новую БГД (в этом случае при копировании связанные классы/таблицы "тянутся" в новое местоназначение)? Агрегировать в одной БГД информацию из разных БГД с такими конструкциями уже становится невозможно... но не всегда есть возможность сразу сделать железобетонную БГД и никогда её больше не менять (зачастую такая ситуация – это некий идеал, к которому мы все стремимся), также может быть ситуация, что пользователи работают в нескольких БГД одинаковой структуры, а в какой-то момент данные из этих БГД хотелось бы собрать в одну общую.
про Загрузчик объектов всправке указано :
С помощью Загрузчика объектов вы можете загружать данные в классы объектов геометрической сети, в классы объектов, участвующие в отношениях с применением сообщений, или в классы, имеющие объектно-связанные аннотации.
Эта фразав рамках работы сArcGIS означает лишь то, что да, мы можем загружать объекты в такую конструкцию связанных классов/таблиц; НОтолько по-отдельности, без учета наличия Relationship Class’а?
Если есть желание также перенести исвязанные данные, то пользователю требуется многоискать решениеили делать всё руками... или писать скрипты/add-in’ы (если получится сделать самому или найти того, кто это сможет сделать).
Про тип данных GlobalID в справке написано:
Глобальные идентификаторы: типы данных GlobalID и GUID хранят строки наподобие строк записей реестра, состоящие из 36 символов, заключенных в фигурные скобки. Эти строки уникально определяют объект или запись таблицы внутри и вне базы геоданных. В большей степени этот тип данных используется для управления отношениями, особенно в управлении данными, версионном редактировании, обновлениях на изменение и репликациях.
Попробовала также решить эту задачу и через Data Interoperability. В принципе, это можно сделать с сохранением значений поля GlobalID везде, где требуется. Но есть одно но… тип таких полей после обработки Data Interoperability становится не globalid, а просто guid. И тут уже теряютсяиные настройки классов/БГД (для уверенности в корректном реплицировании корпоративных БГД нужно поле типа globalid… наверное, и ещё что-то найдется).
0 голосов
ответил 23 Март, 17 от Grigoriy (127,020 баллов)
см п.2 В БГД2 убиваете "класс_2/таблицу_2". :)
В базе геоданных вместе с классом создается "счетчик" для полей objectid и globalid.
И ArcGIS пытается "продолжить" его заполнение.
При загрузке данныхв "новый класс" значения этих полей должны загружаться такими как они есть в исходном классе.
При загрузке в уже существующий класс значения могут изменяться - они там должны быть гарантированно уникальными.
"Уже существующий" - это тот в котором уже были данные.
Даже еслисам класссейчас пустой - значения "счетчиков" уже не пустые.
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...