Сложные SQL запросы

ArcGIS 8.x,9.x,10.x (Arcview, ArcEditor, Arcinfo).
EvsYur
Новоприбывший
Сообщения: 12
Зарегистрирован: 25 окт 2015, 08:44
Репутация: 1

Сложные SQL запросы

Сообщение EvsYur » 25 окт 2015, 09:08

Добрый день, уважаемые коллеги.
Есть набор слоев, как линейных, так и полигональных, со сходной атрибутикой. Необходимо получить некоторую группирующую статистику из этих слоев. Наиболее простой для меня способ - подключить таблицы в Access и там построить union запросы с последующим group by, sort by. Однако здесь возникает проблема - данные находятся в файловой базе геоданных. Есть ли возможность средствами аркгис сформировать сложный (объединяющий, группирующий) SQL запрос к таблицам файловой бгд, либо подключить эти таблицы хотя бы на чтение к Access, либо какому-либо другому инструменту для работы с базой данных? Переносить данные в персональную бгд не хочется, так как там периодически возникают проблемы с отображением, прорисовкой объектов.

ericsson
Гуру
Сообщения: 3321
Зарегистрирован: 27 июл 2009, 19:26
Репутация: 748
Ваше звание: Вредитель полей

Re: Сложные SQL запросы

Сообщение ericsson » 25 окт 2015, 09:25


Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Сложные SQL запросы

Сообщение Andrey Zhukov » 25 окт 2015, 09:37

Нет, формат gdb не располагает к такому. Возможности SQL там сильно ограничены.

Перенесите в СУБД (например, PostgreSQL или SQL Express), там будет все удобно и красиво. Но рендер будет медленнее, увы.

EvsYur
Новоприбывший
Сообщения: 12
Зарегистрирован: 25 окт 2015, 08:44
Репутация: 1

Re: Сложные SQL запросы

Сообщение EvsYur » 25 окт 2015, 09:45

ericsson, что-то не совсем понятен Ваш ответ. В первой ссылке администрирование баз данных, во второй - простейшие sql запросы на выборку, где "SELECT * FROM <table> WHERE" уже жестко прописан и не изменяем. Единственное, более менее похожее на то, что мне нужно, описано здесь https://desktop.arcgis.com/ru/desktop/l ... abases.htm , но я так и не понял, куда эти SQL выражения можно вставить.

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Сложные SQL запросы

Сообщение Andrey Zhukov » 25 окт 2015, 10:01

Вообще вам сюда, но повторю еще раз: не все многообразие SQL поддерживается в gdb. Впрочем, я не знаю, что для вас "сложные" SQL-запросы.

EvsYur
Новоприбывший
Сообщения: 12
Зарегистрирован: 25 окт 2015, 08:44
Репутация: 1

Re: Сложные SQL запросы

Сообщение EvsYur » 25 окт 2015, 10:36

Andrey Zhukov, сложные не для меня, а, похоже, для ArcMap. ) В данном случае имеется ввиду union в понимании SQL для таблиц с разной геометрией - полилинии и полигоны, объединить нужно именно атрибутивную информацию, чтобы потом можно было посчитать суммарную статистику. Ни "Создать представление таблицы", ни "Создать таблицу запроса", увы, не позволяет произвести объединение (union) таблиц. (

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Сложные SQL запросы

Сообщение Andrey Zhukov » 25 окт 2015, 10:53

Позволяет, если данные в СУБД.

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

EvsYur
Новоприбывший
Сообщения: 12
Зарегистрирован: 25 окт 2015, 08:44
Репутация: 1

Re: Сложные SQL запросы

Сообщение EvsYur » 25 окт 2015, 11:21

Для субд как минимум нужна лицензия ArcGIS for Server, хотя можно еще попробовать на SQL Express конечно, но как-то мне это урезанное решение не по душе.
Сейчас нашел многоходовое решение - создаю представление таблиц, затем их сливаю инструментом "Слияние", затем обрабатываю "Суммарной статистикой". Пытаюсь разобраться как все эти задачи утрамбовать в ModelBuilder, но что-то ArcMap который раз уже предлагает отправить отчет о своем плохом поведении разработчику. Но это, как говорится, уже другая тема.
Andrey Zhukov, спасибо за помощь, тему можно считать закрытой.

Monstria
Активный участник
Сообщения: 133
Зарегистрирован: 17 май 2011, 06:22
Репутация: 50
Откуда: Нижний Новгород

Re: Сложные SQL запросы

Сообщение Monstria » 26 окт 2015, 09:08

Andrey Zhukov писал(а):Позволяет, если данные в СУБД.
Андрюха, там есть тоже сложности - под запросы, если работаем с СУБД, Возвращают не все данные. Мы столкнулись с этой проблемой при получении максимального значения в столбце - под запрос составленный средствами арки, работает только с основными таблицами и не учитывает временные, соответственно и возвращаемое значение не корректное (это только с СУБД, с файловой базой данных проблем нет). Поэтому, если надо получить ПОЛНЫЕ данные, нужно делать кучу запросов с помощью скриптов, объединяя временные и основные таблицы)...

Вот для примера попробуй получить максимальное знчение objectid при работе с СУБД, немного поработав в режиме редактирования, создав запрос типа...

Код: Выделить всё

objectid = (SELECT MAX( objectid ) FROM <table name>)
Где <table name> это названия таблицы...
Andrey Zhukov писал(а):А вообще можно обратиться к универсальному средству решения проблемы: сформулируйте задачу целиком, а не место тупика.
А вот тут ты прав - но порой решение становится далеко как не тривиальным :)

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Сложные SQL запросы

Сообщение Andrey Zhukov » 26 окт 2015, 09:48

Monstria, что-то странное ты пишешь. Вы как делали?

Monstria
Активный участник
Сообщения: 133
Зарегистрирован: 17 май 2011, 06:22
Репутация: 50
Откуда: Нижний Новгород

Re: Сложные SQL запросы

Сообщение Monstria » 26 окт 2015, 09:54

Andrey Zhukov писал(а):Monstria, что-то странное ты пишешь. Вы как делали?
:) что значит как я делал - я же запрос написал? Ты проверил и никаких странностей не обнаружил - возвращенное значение ровно такое же как и реальное в таблице данных? Попробуй повторить в классе, где большое количество объектов, скажем так - тысяч 100.
Могу показать на реальном примере - но уже в скайпе... Если очень интересно.

PS.. если ты имеешь ввиду как решали эту проблему - то без скриптов, не обойтись... Я же решал сию задачу программным способом внутри плагина.

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Сложные SQL запросы

Сообщение Andrey Zhukov » 26 окт 2015, 10:09

Запросы это где писали-то?

Чесгря, я такие запросы вообще через ArcGIS не стал бы кидать. Напрямую в СУБД проще.

gamm
Гуру
Сообщения: 4056
Зарегистрирован: 15 окт 2010, 08:33
Репутация: 1054
Ваше звание: программист
Откуда: Казань

Re: Сложные SQL запросы

Сообщение gamm » 26 окт 2015, 10:45

Monstria писал(а):есть тоже сложности - под запросы, если работаем с СУБД, Возвращают не все данные. Мы столкнулись с этой проблемой при получении максимального значения в столбце - под запрос составленный средствами арки, работает только с основными таблицами и не учитывает временные
мне когда-то, лет 30 назад, рассказывали, что в базах данных (если это базы данных) есть транзакции. Может, какой-нибудь commit нужно выдать?

P.S. кстати, раньше Арка работала с базами только через свои нахлобучки (ArcStorm, ArcSDE) - а теперь напрямую может?

Andrey Zhukov
Гуру
Сообщения: 838
Зарегистрирован: 10 дек 2009, 23:24
Репутация: 169
Ваше звание: старик-гисовик
Откуда: Москва
Контактная информация:

Re: Сложные SQL запросы

Сообщение Andrey Zhukov » 26 окт 2015, 10:49

Работает-то оно напрямую, но sde-структуру все равно создает.

Monstria
Активный участник
Сообщения: 133
Зарегистрирован: 17 май 2011, 06:22
Репутация: 50
Откуда: Нижний Новгород

Re: Сложные SQL запросы

Сообщение Monstria » 26 окт 2015, 10:58

gamm писал(а): рассказывали, что в базах данных (если это базы данных) есть транзакции. Может, какой-нибудь commit нужно выдать?
:) Если чё - у нас проблема решена, просто опрашиваем не одну таблицу, а три и дело тут не в SQL запросах, транзакциях и прочего, а именно в алгоритме работы самой арки - структура данных в СУБД у нее не простая, отсюда и сложности...
Т.е. в структуре БД СУБД есть временные таблицы для каждой вашей таблицы данных в которых хранятся изменения (новые, измененные данные), и когда есть изменения в данных они хранятся именно там... что бы найти эту временную таблицу - надо искать ее индекс в таблице sde.sde_table_registry структуры БД (в каталоге служебные таблицы вы не увидите никогда), потом уже переходить в найденную временную таблицу и если она не пустая - повторять запрос в ней - только после этого уже получим ВСЕ результаты, а не только те, которые лежат в основной таблице....

PS... как то так...

Ответить

Вернуться в «ArcGIS»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 30 гостей