РАЗРАБОТКА ABAPP1L2

ABAP: выбор внутренней таблицы и ключа

Как выбирать STANDARD, SORTED или HASHED TABLE по способу доступа, ключу, порядку и стоимости обслуживания.

Ревизия 1 Общие понятия Частичное покрытие Контекст: CTX-GENERAL документальная опора: недостаточно данных
Справочный материал. Контракты данных, архитектурные решения и ограничения применения. Источники приведены в материалах, где используются внешние основания.

Внутренняя таблица хранит строки в памяти программы. Выбирайте её тип по основному способу доступа: нужен ли индекс, важен ли порядок строк, будет ли поиск идти по полному или частичному ключу и должны ли ключи быть уникальными.

Три категории#

Категория Устройство и доступ Когда рассматривать
STANDARD TABLE Есть индекс вставки. Доступ по индексу естественен; поиск по свободному ключу обычно просматривает строки последовательно. Последовательная обработка, добавление строк, сохранение входного порядка или небольшой набор без частого поиска по ключу.
SORTED TABLE Строки поддерживают порядок ключа. Ключ может быть уникальным или неуникальным; доступ возможен по полному ключу и подходящему начальному фрагменту ключа. Нужны упорядоченный обход и повторные выборки по полному или ведущему фрагменту ключа.
HASHED TABLE Доступ выполняется по полному уникальному ключу; первичного индекса нет. Главная операция - точечный поиск по стабильному уникальному ключу, а индексный порядок строк не нужен.

Документация SAP описывает поиск по ключу для стандартной таблицы как линейный, для сортированной - как логарифмический, а хешированный доступ - как не зависящий от числа строк при обычной оценке алгоритма. Это ориентир по категории доступа, а не гарантия времени конкретной программы: на результат влияют размер строк, операции изменения, вторичные ключи и фактический профиль вызовов.

Начните с операций#

Перед объявлением типа выпишите реальные операции над набором:

  1. Строки обычно обходятся все подряд или по очереди добавляются? Это аргумент в пользу STANDARD TABLE.
  2. Часто читаются группы по начальным полям ключа и затем нужен упорядоченный обход? Проверьте, подходит ли SORTED TABLE и соответствует ли порядок полей ключа этим запросам.
  3. Часто читается ровно одна строка по всем полям стабильного ключа, а порядок не нужен? Рассмотрите HASHED TABLE.
  4. Нужны несколько способов чтения? Сначала определите основной и измерьте второстепенные. Вторичный ключ может помочь, но требует памяти и дополнительных затрат при изменении данных.

Ключ задаёт семантику доступа и идентичности внутри конкретной таблицы. Для хешированной таблицы первичный ключ обязан быть уникальным. У сортированной таблицы уникальность выбирается явно. Стандартная таблица допускает повторяющиеся значения ключа. Если дубликаты являются ошибкой бизнес-данных, это нужно проверять как отдельное условие: категория таблицы сама по себе не объясняет, почему строка повторилась.

Объявляйте ключ явно#

Не полагайтесь на неявный стандартный ключ для прикладного алгоритма. Укажите поля, которые реально идентифицируют строку в этом наборе. Для финансового примера ключом сверки могут быть компания, год, номер документа и позиция, но применимость такого состава зависит от источника и выбранного уровня данных.

До загрузки данных решите, что делать с повтором ключа: отклонять набор, сохранять несколько строк в таблице с неуникальным ключом или агрегировать по отдельно заданному правилу. Молчаливое перезаписывание строки может скрыть проблему качества. Тестируйте как минимум дубликат ключа, отсутствующую строку, изменение порядка входа и повторный запуск алгоритма.

Вторичные ключи имеют цену#

Вторичный сортированный или хешированный ключ может улучшить дополнительный способ чтения, но у него есть память и стоимость обслуживания. SAP отдельно указывает, что обновление вторичного индекса может происходить при обращении к нему после изменений таблицы, поэтому изменение строк и последующий поиск тоже относятся к профилю нагрузки.

Не добавляйте ключ только потому, что он доступен в синтаксисе. Сначала зафиксируйте размер набора, долю чтений и изменений, поля поиска и порядок вывода. Затем сравните вариант без вторичного ключа и с ним на целевой версии ABAP и типичном объёме данных.

Границы примера#

Внутренняя таблица живёт в памяти текущего процесса. Её уникальный ключ не заменяет ограничение базы данных, межзапусковую дедупликацию, блокировку, идемпотентность публикации или управление LUW. Табличная категория также не определяет валютную точность, правила округления и смысл суммы: эти контракты задаются отдельно.

Ссылки ведут на актуальную документацию ABAP Cloud. Классический ABAP, конкретный выпуск SAP и доступные языковые элементы нужно сверять по документации целевой системы. Пример объясняет модель данных; синтаксис и производительность в SAP runtime здесь не проверялись.

Связанные материалы#

Источники и документация

  1. SAP ABAP: Distinguishing Table Keys in Internal Tables ↗
  2. SAP ABAP Keyword Documentation: TYPES, key ↗
  3. SAP ABAP Keyword Documentation: DATA, key ↗

Источники нужны для самостоятельной проверки. Примеры и интерпретации на сайте могут быть учебными упрощениями.