Сложные SQL запросы
-
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 25 окт 2015, 08:44
- Репутация: 1
Сложные SQL запросы
Добрый день, уважаемые коллеги.
Есть набор слоев, как линейных, так и полигональных, со сходной атрибутикой. Необходимо получить некоторую группирующую статистику из этих слоев. Наиболее простой для меня способ - подключить таблицы в Access и там построить union запросы с последующим group by, sort by. Однако здесь возникает проблема - данные находятся в файловой базе геоданных. Есть ли возможность средствами аркгис сформировать сложный (объединяющий, группирующий) SQL запрос к таблицам файловой бгд, либо подключить эти таблицы хотя бы на чтение к Access, либо какому-либо другому инструменту для работы с базой данных? Переносить данные в персональную бгд не хочется, так как там периодически возникают проблемы с отображением, прорисовкой объектов.
Есть набор слоев, как линейных, так и полигональных, со сходной атрибутикой. Необходимо получить некоторую группирующую статистику из этих слоев. Наиболее простой для меня способ - подключить таблицы в Access и там построить union запросы с последующим group by, sort by. Однако здесь возникает проблема - данные находятся в файловой базе геоданных. Есть ли возможность средствами аркгис сформировать сложный (объединяющий, группирующий) SQL запрос к таблицам файловой бгд, либо подключить эти таблицы хотя бы на чтение к Access, либо какому-либо другому инструменту для работы с базой данных? Переносить данные в персональную бгд не хочется, так как там периодически возникают проблемы с отображением, прорисовкой объектов.
-
- Гуру
- Сообщения: 3321
- Зарегистрирован: 27 июл 2009, 19:26
- Репутация: 748
- Ваше звание: Вредитель полей
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Сложные SQL запросы
Нет, формат gdb не располагает к такому. Возможности SQL там сильно ограничены.
Перенесите в СУБД (например, PostgreSQL или SQL Express), там будет все удобно и красиво. Но рендер будет медленнее, увы.
Перенесите в СУБД (например, PostgreSQL или SQL Express), там будет все удобно и красиво. Но рендер будет медленнее, увы.
-
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 25 окт 2015, 08:44
- Репутация: 1
Re: Сложные SQL запросы
ericsson, что-то не совсем понятен Ваш ответ. В первой ссылке администрирование баз данных, во второй - простейшие sql запросы на выборку, где "SELECT * FROM <table> WHERE" уже жестко прописан и не изменяем. Единственное, более менее похожее на то, что мне нужно, описано здесь https://desktop.arcgis.com/ru/desktop/l ... abases.htm , но я так и не понял, куда эти SQL выражения можно вставить.
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Сложные SQL запросы
Вообще вам сюда, но повторю еще раз: не все многообразие SQL поддерживается в gdb. Впрочем, я не знаю, что для вас "сложные" SQL-запросы.
-
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 25 окт 2015, 08:44
- Репутация: 1
Re: Сложные SQL запросы
Andrey Zhukov, сложные не для меня, а, похоже, для ArcMap. ) В данном случае имеется ввиду union в понимании SQL для таблиц с разной геометрией - полилинии и полигоны, объединить нужно именно атрибутивную информацию, чтобы потом можно было посчитать суммарную статистику. Ни "Создать представление таблицы", ни "Создать таблицу запроса", увы, не позволяет произвести объединение (union) таблиц. (
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Сложные SQL запросы
Позволяет, если данные в СУБД.
А вообще можно обратиться к универсальному средству решения проблемы: сформулируйте задачу целиком, а не место тупика.
А вообще можно обратиться к универсальному средству решения проблемы: сформулируйте задачу целиком, а не место тупика.
-
- Новоприбывший
- Сообщения: 12
- Зарегистрирован: 25 окт 2015, 08:44
- Репутация: 1
Re: Сложные SQL запросы
Для субд как минимум нужна лицензия ArcGIS for Server, хотя можно еще попробовать на SQL Express конечно, но как-то мне это урезанное решение не по душе.
Сейчас нашел многоходовое решение - создаю представление таблиц, затем их сливаю инструментом "Слияние", затем обрабатываю "Суммарной статистикой". Пытаюсь разобраться как все эти задачи утрамбовать в ModelBuilder, но что-то ArcMap который раз уже предлагает отправить отчет о своем плохом поведении разработчику. Но это, как говорится, уже другая тема.
Andrey Zhukov, спасибо за помощь, тему можно считать закрытой.
Сейчас нашел многоходовое решение - создаю представление таблиц, затем их сливаю инструментом "Слияние", затем обрабатываю "Суммарной статистикой". Пытаюсь разобраться как все эти задачи утрамбовать в ModelBuilder, но что-то ArcMap который раз уже предлагает отправить отчет о своем плохом поведении разработчику. Но это, как говорится, уже другая тема.
Andrey Zhukov, спасибо за помощь, тему можно считать закрытой.
-
- Активный участник
- Сообщения: 133
- Зарегистрирован: 17 май 2011, 06:22
- Репутация: 50
- Откуда: Нижний Новгород
Re: Сложные SQL запросы
Андрюха, там есть тоже сложности - под запросы, если работаем с СУБД, Возвращают не все данные. Мы столкнулись с этой проблемой при получении максимального значения в столбце - под запрос составленный средствами арки, работает только с основными таблицами и не учитывает временные, соответственно и возвращаемое значение не корректное (это только с СУБД, с файловой базой данных проблем нет). Поэтому, если надо получить ПОЛНЫЕ данные, нужно делать кучу запросов с помощью скриптов, объединяя временные и основные таблицы)...Andrey Zhukov писал(а):Позволяет, если данные в СУБД.
Вот для примера попробуй получить максимальное знчение objectid при работе с СУБД, немного поработав в режиме редактирования, создав запрос типа...
Код: Выделить всё
objectid = (SELECT MAX( objectid ) FROM <table name>)
А вот тут ты прав - но порой решение становится далеко как не тривиальнымAndrey Zhukov писал(а):А вообще можно обратиться к универсальному средству решения проблемы: сформулируйте задачу целиком, а не место тупика.
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Сложные SQL запросы
Monstria, что-то странное ты пишешь. Вы как делали?
-
- Активный участник
- Сообщения: 133
- Зарегистрирован: 17 май 2011, 06:22
- Репутация: 50
- Откуда: Нижний Новгород
Re: Сложные SQL запросы
что значит как я делал - я же запрос написал? Ты проверил и никаких странностей не обнаружил - возвращенное значение ровно такое же как и реальное в таблице данных? Попробуй повторить в классе, где большое количество объектов, скажем так - тысяч 100.Andrey Zhukov писал(а):Monstria, что-то странное ты пишешь. Вы как делали?
Могу показать на реальном примере - но уже в скайпе... Если очень интересно.
PS.. если ты имеешь ввиду как решали эту проблему - то без скриптов, не обойтись... Я же решал сию задачу программным способом внутри плагина.
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Сложные SQL запросы
Запросы это где писали-то?
Чесгря, я такие запросы вообще через ArcGIS не стал бы кидать. Напрямую в СУБД проще.
Чесгря, я такие запросы вообще через ArcGIS не стал бы кидать. Напрямую в СУБД проще.
-
- Гуру
- Сообщения: 4056
- Зарегистрирован: 15 окт 2010, 08:33
- Репутация: 1054
- Ваше звание: программист
- Откуда: Казань
Re: Сложные SQL запросы
мне когда-то, лет 30 назад, рассказывали, что в базах данных (если это базы данных) есть транзакции. Может, какой-нибудь commit нужно выдать?Monstria писал(а):есть тоже сложности - под запросы, если работаем с СУБД, Возвращают не все данные. Мы столкнулись с этой проблемой при получении максимального значения в столбце - под запрос составленный средствами арки, работает только с основными таблицами и не учитывает временные
P.S. кстати, раньше Арка работала с базами только через свои нахлобучки (ArcStorm, ArcSDE) - а теперь напрямую может?
-
- Гуру
- Сообщения: 838
- Зарегистрирован: 10 дек 2009, 23:24
- Репутация: 169
- Ваше звание: старик-гисовик
- Откуда: Москва
- Контактная информация:
Re: Сложные SQL запросы
Работает-то оно напрямую, но sde-структуру все равно создает.
-
- Активный участник
- Сообщения: 133
- Зарегистрирован: 17 май 2011, 06:22
- Репутация: 50
- Откуда: Нижний Новгород
Re: Сложные SQL запросы
Если чё - у нас проблема решена, просто опрашиваем не одну таблицу, а три и дело тут не в SQL запросах, транзакциях и прочего, а именно в алгоритме работы самой арки - структура данных в СУБД у нее не простая, отсюда и сложности...gamm писал(а): рассказывали, что в базах данных (если это базы данных) есть транзакции. Может, какой-нибудь commit нужно выдать?
Т.е. в структуре БД СУБД есть временные таблицы для каждой вашей таблицы данных в которых хранятся изменения (новые, измененные данные), и когда есть изменения в данных они хранятся именно там... что бы найти эту временную таблицу - надо искать ее индекс в таблице sde.sde_table_registry структуры БД (в каталоге служебные таблицы вы не увидите никогда), потом уже переходить в найденную временную таблицу и если она не пустая - повторять запрос в ней - только после этого уже получим ВСЕ результаты, а не только те, которые лежат в основной таблице....
PS... как то так...
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 30 гостей