Обработка геоданных в Greenplum с PostGIS

Greenplum PostGIS примеры курсы обучение, обработка геопространственных данных в Greenplum и PostgreSQL PostGIS, обучение Greenplum PostGIS, обучение Arenadata DB курсы, Greenplum для инженеров данных и и разработчиков ГИС-систем, Greenplum PostGIS геоинформационные системы, хранение и аналитика больших данных с Greenplum, Школа Больших Данных Учебный центр Коммерсант

Сегодня познакомимся с расширением PostGIS, которое позволяет PostgreSQL и Greenplum обрабатывать пространственные данные в геолокационных и логистических задачах. Как оно устроено и каковы ограничения его практического использования в MPP-СУБД.

Что такое PostGIS и как это работает

Как и PostgreSQL, Greenplum поддерживает геометрические типы данных, с помощью которых можно строить статичные визуальные карты. Но этого недостаточно для разработки сложных геоинформационных систем (ГИС). Чтобы обойти эти ограничения, необходимо подключить расширение PostGIS, которое позволяет работать с пространственными пространственные предикатами, индексами и операторами, а также растровыми данными, геометриями, двумерными и трехмерными функциями. Эти возможности нужны для решения современных геопространственных задач, таких как определение расстояния между точками на местности, подсчет количества объектов в заданной области, вычисления площади, поиска ближайшей заправки или других объектов по заданным критериям.

PostgreSQL обеспечивает поддержку пространственного индексирования GiST, схема которого подходит даже для крупных объектов благодаря индексации, где меньшие объекты действуют как прокси для более крупных. Это расширение добавляет поддержку географических объектов, позволяя выполнять SQL-запросы к пространственным данным, упрощая манипулирование ими при разработке ГИС-решений и картографических приложений. В Greenplum расширение PostGIS включает поддержку пространственных индексов R-Tree на основе GiST и функции для анализа и обработки геопространственных объектов, включая растровые данные. PostGIS Raster использует библиотеку транслятора GDAL (Geospatial Data Abstraction Library) для форматов растровых геопространственных данных, которая представляет вызывающему приложению единую растровую абстрактную модель данных.

Включение и настройка георасширения в Greenplum

Чтобы включить поддержку PostGIS в Greenplum, надо сперва установить пакет расширения с помощью утилиты gppkg, а затем использовать команду CREATE EXTENSION для отдельной базы данных. Для включения PostGIS и PostGIS Raster в определенной схеме, следует создать схему данных, задать путь поиска для нее (search_path), а затем выполнить команду CREATE EXTENSION с предложением WITH SCHEMA:

SHOW search_path ; -- display the current search_path
CREATE SCHEMA <schema_name> ;
SET search_path TO <schema_name> ;
CREATE EXTENSION postgis WITH SCHEMA <schema_name> ;

Для включения в PostGIS геокодера TIGER, который может обрабатывать произвольную адресную строку и создавать геометрию точки и рейтинг, отражающий местоположение заданного адреса и вероятность местоположения, надо включить расширение fuzzystrmatch перед включением postgis_tiger_geocoder:

CREATE EXTENSION fuzzystrmatch ;
CREATE EXTENSION postgis_tiger_geocoder ;

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

CREATE EXTENSION address_standardizer ;
CREATE EXTENSION address_standardizer_data_us ;

PostGIS использует растровые драйверы GDAL при обработке растровых данных с помощью таких команд, как ST_AsJPEG(). По умолчанию PostGIS деактивирует все растровые драйверы, включить которые можно, установив значение переменной среды POSTGIS_GDAL_ENABLED_DRIVERS в файле greenplum_path.sh на всех хостах Greenplum. Можно сделать это на уровне сеанса, установив postgis.gdal_enabled_drivers с помощью команды SET:

SET postgis.gdal_enabled_drivers TO 'GTiff PNG JPEG';

После установки PostGIS настройка по умолчанию POSTGIS_ENABLE_OUTDB_RASTERS=0 в файле greenplum_path.sh деактивирует поддержку растров вне базы данных. Чтобы включить эту функцию, надо установить значение true на всех хостах и перезапустить Greenplum. Аналогично предыдущему варианту использования, можно активировать или деактивировать эту функцию для сеанса базы данных Greenplum:

SET postgis.enable_outdb_rasters = true;

Когда эта функция включена, параметр конфигурации сервера postgis.gdal_enabled_drivers определяет доступные растровые форматы.

Особенности и ограничения практического использования

Будучи основанной на PostgreSQL, о чем мы писали здесь, Greenplum поддерживает большинство ее концепций и функций, не все. Это замечание справедливо и для расширения PostGIS. В частности, в Greenplum оно не поддерживает следующие функции топологию postgis_topology, трехмерные данные и дополнительный модуль геообработки postgis_sfcgal, а также некоторые UDF-функции, агрегаты и длинные транзакции.

В Greenplum расширение PostGIS поддерживает типы данных box2d, box3d, geometry, geography, а также некоторые типы растровых данных: geomval, addbandarg, rastbandarg, raster, reclassarg, summarystats, unionarg. А вот типы данных и функции, связанные с топологиями PostGIS, такие как TopoGeometry, не поддерживаются Greenplum. Также Greenplum не поддерживает PostGIS-агрегаты ST_Collect и ST_MakeLine: агрегат с несколькими сегментами является неидемпотентным, т.е. в этой распределенной MPP-СУБД при каждом вызове он может возвращать разные ответы. Еще Greenplum не поддерживает длинные транзакции PostGIS, т.к. при этом используются триггеры и таблица public.authorization_table. Когда PostGIS пытается получить блокировки для длинных транзакций, Greenplum сообщает об ошибках, ссылаясь на невозможность получить доступ к этому отношению.

Еще Greenplum не поддерживает модификаторы для пользовательских типов данных. Обойти это можно, применив функцию AddGeometryColumn() для геометрии PostGIS. Например, таблицу с геометрией PostGIS нельзя создать с помощью SQL-команды

CREATE TABLE geometries(id INTEGER, geom geometry(LINESTRING));

А функция AddGeometryColumn() позволяет добавить геометрию PostGIS в таблицу, используя следующие SQL-операторы:

CREATE TABLE geometries(id INTEGER);
SELECT AddGeometryColumn('public', 'geometries', 'geom', 0, 'LINESTRING', 2);

В 6-ой версии Greenplum не поддерживается функция _postgis_index_extent из-за ее зависимости от операций пространственного индекса. Не поддерживается обновление расширения геокодера TIGER, хотя сам геокодер поддерживается. А вот в свежей версии GP 7, которая пока еще находится в статусе бета-релиза, расширение PostGIS вообще не поддерживается.

Распределенный характер MPP-СУБД делает специфичными некоторые функции. В частности, функция стандартизации адреса standardize_address() по умолчанию использует в качестве параметров таблицы lex, gaz или rules. При работе в Greenplum с другими таблицами, помимо us_lex, us_gaz или us_rules, их следует создать их с политикой распределения DISTRIBUTED REPLICATED.

В заключение отметим особенности удаления расширения PostGIS с использованием команды DROP EXTENSION. Удаление поддержки PostGIS из базы данных не удаляет следующие переменные среды PostGIS Raster из файла greenplum_path.sh: GDAL_DATA, POSTGIS_ENABLE_OUTDB_RASTERS, POSTGIS_GDAL_ENABLED_DRIVERS. Переменные среды удаляются при удалении пакета расширения PostGIS. Причем удаление поддержки PostGIS из базы данных приводит к удалению всех объектов PostGIS из-за каскадных ссылок в табличных триггерах. Перед удалением поддержки PostGIS следует убедиться, что к базе данных не обращаются пользователи, т.к. это помешает удалению объектов PostGIS.

О других расширениях, которые позволяют Greenplum и PostgreSQL применять графовые алгоритмы к данным, хранящмся в этих базах, читайте в нашей новой статье

Больше подробностей про администрирование и эксплуатацию Greenplum с Arenadata DB для эффективного хранения и аналитики больших данных вы узнаете на специализированных курсах в нашем лицензированном учебном центре обучения и повышения квалификации для разработчиков, менеджеров, архитекторов, инженеров, администраторов, Data Scientist’ов и аналитиков Big Data в Москве:

Я даю свое согласие на обработку персональных данных и соглашаюсь с политикой конфиденциальности.

Источники

  1. https://docs.vmware.com/en/VMware-Tanzu-Greenplum/7/greenplum-database/GUID-analytics-postGIS.html
  2. https://postgis.net/docs/
  3. https://sbercloud.ru/ru/warp/blog/postgis-about
Поиск по сайту