При создании таблицы или добавлении столбца в таблицу базы данных вы указываете определенный тип данных для столбца. Типы данных определяются, исходя из следующего:
- Какие значения можно хранить в столбце
- Какие операции можно применять к данным этого столбца
- Как данные этого столбца хранятся в базе данных
ArcGIS работает с определенными типами данных. При осуществлении доступа к таблице базы данных через Подключения к базам данных или слой запроса, ArcGIS отфильтровывает любые неподдерживаемые типы данных. ArcGIS не будет отображать неподдерживаемые типы данных, и вы не сможете редактировать их в ArcGIS. Аналогично, если при помощи ArcGIS копировать и вставлять таблицы, содержащие неподдерживаемые типы данных, из одной базы в другую, ArcGIS вставит только те столбцы, которые используют поддерживаемые типы данных.
В первом столбце в следующей таблице перечислены типы данных ArcGIS. Во втором столбце перечислены Oracle типы данных, создаваемые ArcGIS. В третьем столбце показано, какие другие Oracle типы данных (если имеются) сопоставляются типам данных ArcGIS при просмотре таблицы, созданной вне ArcGIS. В последнем столбце при необходимости предоставляется дополнительная информация.
Типы данных ArcGIS | Создаваемые типы данных Oracle | Другие типы данных Oracle, которые можно просматривать | Примечания |
---|---|---|---|
BLOB | BLOB | ||
DATE | TIMESTAMP | ||
DOUBLE | NUMBER(38,8) | NUMBER(p,s) | Точность и масштаб, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. |
FLOAT | NUMBER(38,8) | NUMBER(p,s) | Точность и число десятичных знаков, указанные в ArcGIS, могут повлиять на тип полученных данных, создаваемых в базе данных. Более подробно см. Типы данных полей ArcGIS. |
GEOMETRY | ST_GEOMETRY, NUMBER(38), or SDO_GEOMETRY | Тип создаваемых данных Oracle зависит от указанного при создании класса пространственных объектов хранилища геометрии. Compressed binary или well-known binary (только для баз геоданных) = NUMBER(38); Oracle Spatial = SDO_GEOMETRY; spatial type = ST_GEOMETRY. Для того чтобы применять ST_Geometry в базе данных, сначала необходимо установить его. | |
GLOBAL ID | CHAR or NCHAR (UUID LEN) | Поддерживается только базами геоданных. Поле уникального идентификатора будет создано как NCHAR, если параметр UNICODE_STRING ключевого слова конфигурации, с которым было задано построение таблицы, имел значение TRUE. | |
GUID | CHAR or NCHAR (UUID LEN) | Поле уникального идентификатора будет создано как NCHAR в многопользовательской базе геоданных, если параметр UNICODE_STRING ключевого слова конфигурации, с которым было задано построение таблицы, имел значение TRUE. | |
LONG INTEGER | NUMBER(38) | NUMBER(n) | n может принимать значения из диапазона от 5 до 10. При создании с помощью ArcGIS for Desktop или ArcObjects и при значении точности, равном 0, в базе данных создается NUMBER(38); в ином случае используется заданная точность. |
OBJECT ID | NUMBER(38) при создании в многопользовательской базе геоданных NUMBER(38) с последовательностью и триггером при создании со следующими условиями:
NUMBER(38) всегда создается в качестве идентификатора при использовании ArcGIS для создания класса пространственных объектов или таблицы в базе данных Oracle 12c либо при работе с инструментом геообработки Добавить прирастающее поле ID для добавления поля ID field к таблице базы данных Oracle 12c. | В ArcGIS тип ObjectID соответствует столбцу с идентификаторами записей (ID) таблицы (или класса объектов). В таблице может быть только один. | |
RASTER | BLOB, LONG RAW, SDO_GEORASTER, or ST_RASTER | Растры поддерживаются только базами геоданных. Тип данных для поля растра зависит от ключевого слова конфигурации, указанного при создании каталога растров, набора растровых данных или набора данных мозаики. | |
SHORT INTEGER | NUMBER(5) | NUMBER(n) | n может принимать значения из диапазона от 1 до 5. Но в столбцах short integer могут храниться только значения в диапазоне от -32 768 до 32 767. Даже если точность числа равна 5, вы не можете хранить в столбце short integer значение, большее 32 767 или меньшее -32 768. При создании с помощью ArcGIS for Desktop n = 5. Это позволит вам сохранять значения short integer, попадающие в допустимый интервал. |
TEXT | VARCHAR2, CLOB, NVARCHAR2 или NCLOB |
Текстовые типы данных
Если вы собираетесь включить текстовое поле в таблицу, создаваемую с помощью ArcGIS, используется тип данных VARCHAR2, если в базе данных не выбрана кодировка Unicode. Если установлен размер текстового поля, больший 4000, а для базы данных не выбрана кодировка Unicode, тип данных Oracle будет CLOB.
Если для вашей базы данных выбрана кодировка Unicode, будет создано текстовое поле NVARCHAR2. (Это настройка, используемая по умолчанию для баз геоданных в Oracle.) Если установлен размер текстового поля, больший 2 000, а для базы данных выбрана кодировка Unicode, тип данных Oracle будет NCLOB.
Геометрические типы данных
Как указано в таблице, ArcGIS создает и может работать в Oracle с тремя типами геометрических данных: Esri ST_Geometry, Oracle SDO_Geometry и Сжатый бинарный. Хранение геометрии Compressed binary может использоваться только в базах геоданных.
ST_Geometry
Ниже приводится общее описание пространственного типа данных ST_Geometry. Сведения о реализации в Oracle см. в разделе ST_Geometry в Oracle.
Тип данных ST_Geometry использует спецификацию пользовательских типов данных SQL 3 (UDT), что позволяет создавать столбцы, в которых могут храниться пространственные данные, например, улицы, земельные участки, достопримечательности. В соответствии со стандартами International Organization for Standards (ISO) и Open Geospatial Consortium, Inc., (OGC) он обеспечивает поддержку SQL-доступа к базам геоданных и базам данных Данный вид хранения расширяет возможности базы данных, обеспечивая хранение для объектов (точек, линий и полигонов), которые представляют графические объекты. Оно было разработано для эффективного использования ресурсов баз данных, для совместимости с объектами баз данных, такими, как реплики и разделы, и для предоставления быстрого доступа к пространственным данным.
Хотя вы можете определить столбец в виде типа ST_Geometry, вы не добавляете значения ST_Geometry в этот столбец, поскольку он не может быть вызван. Вместо этого вы добавляете значения подкласса.
ST_Geometry является абстрактным невызываемым суперклассом. Однако его подклассы могут быть вызваны (инициализированы). Вызванный тип данных – это тип данных, который может быть определен как столбец таблицы; в него могут быть добавлены значения этого типа.
Следующая схема демонстрирует иерархию типа данных ST_Geometry и его подклассов.
Подклассы ST_Geometry разделены на две категории: подклассы основной геометрии и подклассы однородных наборов. Основная геометрия включает: ST_Point, ST_LineString и ST_Polygon, а однородные наборы включают ST_MultiPoint, ST_MultiLineString и ST_MultiPolygon. Как ясно из названий, наборы однородных элементов являются наборами базовых геометрий. Помимо добавлений одинаковых свойств с базовой геометрией, однородные наборы имеют некоторые собственные свойства.
Каждый подкласс хранит тип геометрии, отображенный в его имени; например, ST_MultiPoint хранит мультиточки. Список подклассов и их описание приведены в следующей таблице:
Подтип | Описание |
---|---|
ST_Point |
|
ST_LineString |
|
ST_Polygon |
|
ST_MultiPoint |
|
ST_MultiLineString |
|
ST_MultiPolygon |
|
SDO_Geometry
SDO_Geometry реализован с помощью системы расширяемых типов реляционных объектов Oracle. Тип SDO_Geometry предлагается компанией Oracle с двумя основными опциями:
- Oracle Spatial – это дополнительный компонент Oracle Database Enterprise Edition. Кроме предоставления типа SDO_Geometry, Oracle Spatial предоставляет ряд дополнительных геопространственных возможностей.
- Oracle Locator поддерживает поднабор возможностей Oracle Spatial. Он включается как стандартный компонент Oracle Database в версиях Standard и Enterprise. Помимо прочих возможностей, в нем содержится тип геометрии Oracle Spatial (который называется SDO_Geometry) и интерфейс SQL API, предназначенный для этого содержимого.
ArcGIS поддерживает SDO_Geometry в качестве дополнительного метода хранения пространственных данных. В частности геометрия Oracle Spatial или Locator может использоваться для хранения и управления объектами и содержанием растровых наборов данных в многопользовательских базах геоданных или базах данных Oracle.
SDO_Geometry сохраняет сведения о геометрии, включая тип геометрии, ID пространственной привязки, тип интерполяции (прямая или с изгибами) и значений координат. SDO_Geometry в базах геоданных ArcSDE поддерживает отдельные и множественные точки, линии и геометрию площади. Геометрии можно описать как наличие линейной интерполяции между координатами по определению, данному в спецификации OpenGIS Simple Feature Specification. Геометрия также может строиться по круговым кривым или с комбинацией обоих методов интерполяции. Программные приложения отвечают за правильную вставку, обновление и вызов содержимого типа SDO_Geometry, используя объектно-реляционный интерфейс SQL Oracle. Приложения также отвечают за то, чтобы содержимое каждой геометрии соответствовало правилам, определенным в документации по Oracle Spatial. Oracle предоставляет процедуры регулярной проверки геометрии, которые могут выполняться после добавления геометрии. Кроме того, начиная с Oracle версии 11.1.0.7, геометрия проверяется при добавлении индекса.
Информация о каждом столбце SDO_Geometry должна быть записана в схеме метаданных Oracle Spatial несмотря на то, что Oracle Spatial не делает этого автоматически. (Схема метаданных Oracle Spatial предоставляется в каждой схеме в представлении USER_SDO_GEOM_METADATA.) Программное обеспечение, которое создает столбцы SDO_Geometry, должно добавлять в них метаданные. ArcGIS делает это для любых создаваемых классов объектов SDO_Geometry. Метаданные содержат имя пространственного столбца, имя таблицы, в котором он находится, а также идентификатор Oracle Spatial Reference Identifier (SRID), число размеров, диапазон каждого размера и соответствующий координатный допуск.
Пространственные индексы предоставляют быстрый доступ к объектам на основе местоположения их геометрии. Для SDO_Geometry, пространственные индексы R-tree часто являются самым эффективными и простыми в создании, поэтому в большинстве случаев компания Oracle рекомендует пользоваться именно этими индексами. Oracle Spatial предоставляет средство Spatial Index Advisor, которое позволяет определить лучший тип пространственного индекса для данной таблицы. Кроме того, обратитесь к руководству пользователя и справке по Oracle Spatial для получения подробных сведений о поддерживаемых типах пространственных индексов, способов их создания и преимуществах различных методов пространственной индексации.
Oracle Spatial расширяет возможности SQL благодаря функциям пространственного поиска для первичной и вторичной фильтрации. Включение функции SDO_FILTER в SQL-запрос приводит к первичному пространственному поиску с использованием пространственного индекса. Пространственные предикаты, такие как SDO_RELATE и SDO_CONTAINS, возвращают вторичные отношения между парами объектов SDO_GEOMETRY. Oracle Spatial предоставляет функции пространственного преобразования, которые меняют форму для значения SDO_Geometry. Например, функция SDO_BUFFER вычисляет координаты нового объекта SDO_Geometry в виде буферного полигона на определенном расстоянии вокруг исходной геометрии. Другие функции пространственного преобразования включают SDO_DIFFERENCE и SDO_INTERSECTION.
Oracle Spatial предоставляет доступ к ряду предварительно определенных базовых систем координат с использованием значения SRID. Значение SRID, хранящееся в объекте SDO_Geometry, определяет привязку координат для геометрии, хранящейся в этом объекте. Если значение не NULL, идентификатор SRID объекта SDO_Geometry является внешним ключом для таблицы, содержащей сведения о каждом идентификаторе SRID. Это таблица MDSYS.CS_SRS. Функция SDO_TRANSFORM использует идентификатор пространственной привязки для организации преобразования базовых координат. ArcGIS также использует эту информацию для создания пространственных привязок.
Сжатый бинарный формат
Тип Esri compressed binary использует механизм бинарного хранения для хранения геометрии пространственных объектов. Сжатый бинарный класс пространственных объектов состоит из трех таблиц: бизнес-таблицы, таблицы объектов и таблицы пространственного индекса.
После проверки геометрии клиентское приложение сжимает и отсылает ее в базу геоданных, где она хранится в сжатом бинарном формате в таблице пространственных объектов, или F-таблице. Сжатие геометрии клиентским приложением снимает эту задачу с сервера базы данных и сокращает время на пересылку этой геометрии. Оно также обеспечивает эффективное хранение и извлечение пространственных данных, экономя пространство, необходимое для хранения данных, на целых 40 процентов.
В бизнес-таблице находятся атрибуты и пространственный столбец. Пространственный столбец является ключом к таблице объектов и таблице пространственного индекса.
Отношения между бизнес-таблицей и таблицей объектов управляются через пространственный столбец и столбец ID объектов (FID). Данный ключ, который поддерживается ArcGIS, является уникальным.
Растровые типы данных
Вы можете использовать BLOB, Long Raw, ST_Raster или SDO_GeoRaster для столбцов наборов растровых данных, растровых каталогов или наборов данных мозаики.
Сведения о BLOB в Oracle см. в разделе BLOB этой главы.
Oracle отказался от поддержки типа данных Long Raw; следует избегать этого типа данных, т.к. он более не будет поддерживаться. Хотя Long Raw все еще работает, не используйте его; следует перенести данные в другой тип хранения, если используется Long Raw.
В следующих двух подразделах описываются остальные типы растровых данных.
ST_Raster
ST_Raster – это определяемый пользователем тип данных, который можно установить в многопользовательских базах геоданных, чтобы обеспечить SQL-доступ к растровым данным.
Чтобы использовать ST_Raster, его необходимо настроить в базе данных. См. Установка ST_Raster в Oracle.
Подробные сведения об определении объекта типа ST_Raster см. в разделе Тип данных ST_Raster.
SDO_GeoRaster
Тип данных растра Oracle Spatial SDO_GeoRaster реализуется при помощи расширяемой системы объектно-реляционного типа. Тип SDO_GeoRaster хранит информацию о растре, включая его тип пиксела, идентификатор пространственной привязки и значения пиксела.
Тип SDO_GeoRaster поддерживает все типы пикселей Esri: от 1 бита до 64 бит, со знаком и без знака, а также с плавающей точкой. ArcGIS поддерживает тип данных Oracle Spatial SDO_GeoRaster как опцию для хранения растровых данных.
После создания таблицы, содержащей столбец SDO_GeoRaster Oracle, ArcGIS заполняет необходимую схему метаданных Oracle. За выполнение этой задачи отвечают приложения, такие как ArcGIS, поскольку это не реализуется автоматически средствами Oracle. Если вы зарегистрируете таблицу, содержащую столбец SDO_GEORASTER Oracle, который был создан посредством стороннего продукта, то этот сторонний продукт будет нести ответственность за правильное заполнение схемы метаданных Oracle для столбца SDO_GeoRaster.
Известные ограничения применения SDO_GeoRaster с базой геоданных
Ниже представлен список ограничений, который необходимо иметь в виду при хранении растровых данных в многопользовательской базе геоданных как SDO_GeoRaster.
- Oracle не поддерживает фрагментированного обновления SDO_GeoRaster. Поэтому невозможно перенести мозаику файлов изображений в существующий набор растровых данных, который был сохранен как SDO_GeoRaster.
- Пирамиды не могут выстраиваться во время вставки данных. После вставки данных изображения в SDO_GeoRaster необходимо выполнить отдельное действие для построения пирамиды. По этой причине всегда необходимо снимать отметку Построить пирамиду в диалоговом окне любого из инструментов геообработки ArcGIS, с помощью которых создаются наборы растровых данных или каталоги растров.
- Нельзя использовать хранилище SDO_GeoRaster в базе данных Oracle 11g R2 из-за ошибки Oracle 12537431. Если вы хотите использовать хранилище SDO_GeoRaster, используйте Oracle 11g R1 или более новые версии.
- Oracle реализует SDO_GeoRaster как архитектуру, интегрированную в канал. По этой причине добавлять или удалять собственные каналы набора растровых данных невозможно.
- ArcGIS не поддерживает более одного столбца растра в таблице. Таблицы с несколькими столбцами SDO_GeoRaster могут быть доступны посредством видов, содержащих только один столбец SDO_GeoRaster. Создайте представление таблицы и включите в определение представления только один столбец SDO_GeoRaster.
- При использовании хранения SDO_GeoRaster в базе геоданных поддержка для nodata bitmask отсутствует. Поэтому построение пирамидных слоев на неквадратичных регулярных данных невозможно.
BLOB
BLOB – используемое в СУБД сокращение, обозначающее большие бинарные объекты. Столбцы BLOB были введены несколько лет назад корпорацией Oracle для замены технологии LONG RAW для хранения бинарных данных.
Архитектура типа данных BLOB делится на три базовых компонента: столбец BLOB, сегмент LOB и индекс LOB. В столбце BLOB хранится локатор LOB (36 байт) и бинарные данные в строке, если длина строки составляет менее 3965 байт и если для столбца не отключено хранение в строках.
Если размер бинарных данных превышает 3964 байт, место для хранения в строках в столбце BLOB не выделяется, и локатор LOB ссылается на бинарные данные, хранящиеся в сегменте LOB.
В связи с этим размер значения в столбце BLOB с включенным хранением в строках всегда составляет не менее 36 байт (место, выделенное на локатор LOB) и может составлять до 4000 байт (сумма места, выделенного на локатор LOB, и максимального места, которое может быть выделено на бинарные данные, хранящиеся в строке).
Сегмент LOB делится на блоки. Размер блока должен быть кратным размеру блока данных Oracle. Например, если размер блока данных составляет 8КБ, сегмент LOB можно создавать с размером блока не менее 8 КБ. Если длина данных в сегменте LOB составляет 5000 байт, они сохраняются в сегменте LOB, поскольку их длина превышает 3964 байт, а размер блока составляет 8 КБ или 8192 байт. В данном случае неиспользованными остаются 3192 байт блока из сегмента LOB. При преобразовании данных из LONG RAW в BLOB может потребоваться больше места в связи с наличием неиспользуемого места в сегменте LOB. Это увеличение может составить до 30 процентов. Этого нельзя избежать, если размер данных превышает 3964 байт, т.е. пороговое ограничение столбца BLOB для хранения внутри строк.
Размер блока 8 КБ обеспечивает наилучшую производительность ввода/вывода при минимальных затратах места. При использовании размера блока 16 КБ затраты места будут больше, чем для блока 8 КБ. В связи с этим, чтобы избежать потери места, рекомендуется перестроить базу данных с размером блока данных 16 КБ в базу с размером блока 8 КБ. Если же это невозможно, рекомендуется создать в табличных пространствах сегменты LOB с размером блока 8 КБ. Для этого нужно выделить буфер кэширования 8 КБ в глобальной области системы Oracle (SGA).
При использовании размеров блока 4 КБ и 2 КБ затраты составляют еще меньше, но снижение эффективности ввода/вывода не оправдывает их использование.
Индекс LOB используется, только если количество адресуемых локатором LOB блоков превышает 12. В ином случае за адресацию первых 12 блоков отвечает локатор LOB.
На следующих трех рисунках иллюстрируется три возможных примера сохранения бинарных данных в столбце BLOB. В первом случае в строке хранится 3000 байт бинарных данных, поскольку 3000 байт меньше 3965 байт или порогового ограничения объема хранения в строке. Если хранение внутри строк в столбце BLOB не отключено, сегмент LOB и индекс LOB не используются. Обычно это обеспечивает увеличение скорости доставки данных BLOB в связи с уменьшением числа операций ввода/вывода, поскольку Oracle не требуется получать доступ к сегменту LOB или индексу LOB.
На следующем рисунке проиллюстрирован второй пример, в котором размер бинарных данных превышает 3964 байт (в этом случае размер данных составляет 81920 байт), и данные не помещаются внутри строк. В связи с этим, локатор LOB ссылается на бинарные данные, которые хранятся в сегменте LOB. Поскольку бинарные данные не занимают более 12 блоков в сегменте LOB, локатор LOB сохраняет его адреса. В этом случае индекс LOB не используется.
На последнем рисунке показаны бинарные данные такого большого размера (106496 байт), что для их размещения требуется индекс LOB. В этом случае размер бинарных данных превышает ограничение для хранения внутри строк, и для их хранения требуется более 12 блоков в сегменте LOB. Для данных такого размера локатор LOB ссылается на индекс LOB для получения месторасположения блоков внутри сегмента LOB. Эта ситуация чрезвычайно редко встречается для векторных данных, а для растровых данных ее можно избежать.
Сведения о настройке хранения BLOB см. в разделе Параметры конфигурации Oracle.