Настройка вкладки Инкрементальное обновление
Вводная информация по инкрементальному обновлению данных представлена в разделе Обновление импортированных данных.
Некоторые узлы в PolyAnalyst предоставляют пользователям возможность выбора и настройки способа обновления импортированных данных. В окне настроек таких узлов имеется вкладка Инкрементальное обновление. В настоящий момент к таким узлам относятся источники данных ODBC, OLE DB и JDBC.
Данная вкладка разбита на несколько разделов. В верхнем разделе представлены различные режимы работы. Следующий раздел представляет собой текстовое поле, в которое можно ввести запрос SQL, который называется Уточняющий запрос. Нижний раздел предназначен для настройки ключа сравнения.
Выбор режима обновления
Режим Нет является режимом по умолчанию. Этот режим выбирается тогда, когда вы не пытаетесь обновить импортированные данные. При выборе режима Нет значения других настроек на вкладке Инкрементальное обновление игнорируются при выполнении узла. При выборе режима Нет любые ранее импортированные данные удаляются каждый раз при выполнении узла, и сохраняются только вновь импортируемые записи. Так ведет себя большинство узлов в PolyAnalyst, которые заменяют существующие выходные данные новыми каждый раз при выполнении узла.
Режим Добавить дает PolyAnalyst команду добавить новые записи к ранее импортированным данным, если таковые существуют.
Режим Обновить дает PolyAnalyst команду добавить, удалить и изменить ранее импортированные данные так, чтобы они адекватно отражали текущее состояние исходных данных. Эта операция может включать удаление ранее импортированных данных, замену записей, которые были импортированы, актуальными значениями, или добавление записей, которые ранее отсутствовали в массиве данных.
Настройка запроса SQL
Запрос на обновление - это запрос SQL SELECT, применяемый к внешнему источнику данных. Часто это упрощенный запрос SQL, такой как "SELECT * FROM table". Цель использования данного запроса заключается в том, чтобы вместо запросов ко всему внешнему источнику данных пользователи могли ограничить запрос отдельными записями (например, обратиться к записям, созданным за последнюю неделю, если в источнике данных присутствует колонка с отметкой времени). Использование запроса для ограничения количества внешних записей, которые необходимо учитывать при обновлении, значительно повышает эффективность операции добавления/обновления.
Правила составления запросов SQL не входят в круг вопросов, рассматриваемых в данной документации.
Текстовое поле для запроса SQL не является обязательным для заполнения. Если запрос отсутствует, все записи во внешнем массиве данных учитываются в ходе импорта.
Запрос SELECT * FROM tablename эквивалентен выбору всех записей в таблице. Такой запрос позволяет получить такой же результат, что и при отсутствии запроса. Единственным преимуществом является наличие оператора WHERE. Существует возможное преимущество в зависимости от драйвера ODBC/OLE DB при использовании явных наименований колонок, если наименований колонок несколько, и некоторые колонки не включены в список явных типов и содержат данные типа BLOB/CLOB. Это снижает нагрузку на внешнюю базу данных и ускоряет выполнение запроса SQL, который, в свою очередь, ускоряет выполнение узла-источника данных. Данное свойство в зависимости от драйвера может присутствовать или отсутствовать.
Описание возможностей драйверов поддерживать частичную загрузку колонок не входит в задачи данной документации, однако следующая информация может быть полезна пользователям:
-
Драйверы могут поддерживать или не поддерживать данное свойство в зависимости от версии.
-
Более новые версии драйверов ODBC/OLE DB, как правило, поддерживают данную функцию.
-
Возможность частичной загрузки колонок зависит от конкретной базы данных и версии базы данных.
-
Более старые базы данных могут не поддерживать данное свойство и требовать получения всех колонок из строки по вызову ODBC, даже когда драйвер для более старой базы данных новее и поддерживает данное свойство.
-
Ограничение количества данных, которые должны передаваться по сети (через протокол ODBC) не всегда дает ощутимый результат: данная опция важна только при работе с очень крупными массивами данных.
Если вы планируете учитывать все колонки во внешних данных, вы можете опустить компонент SELECT * FROM tablename в запросе SQL и просто включить компонент оператора WHERE. Далее вы можете опустить само ключевое слово WHERE. Например, вместо того, чтобы написать запрос: SELECT * FROM mytable WHERE country="USA", вы можете просто написать: country="USA".
Если вы не знаете, как использовать SQL, оставьте поле запроса пустым. В этом случае условия анализа не будут оптимальными, но несмотря на это, вы все же можете получить желаемый результат (инкрементально обновляя свои данные). Оптимизация важна только при работе с очень большим объемом данных (несколько миллионов записей или более). На самом деле, если вы работаете с меньшим количеством данных и не ограничены во времени, нет необходимости использовать эту сложную функцию, можно просто повторно запустить весь узел целиком в режиме Нет и получить новые данные.
Обратите внимание, что в настоящий момент система сохраняет текстовые данные в виде данных типа BLOBS, а строковые данные - в виде данных VARCHAR. В PolyAnalyst данные типов TEXT и BLOB похожи по способу хранения (в качестве указателей фактических данных), но отличаются набором средств обработки, встроенных в базы данных. Текстовые данные позволяют выполнять индексацию, поиск, используются узлами Извлечение ключевых слов и Извлечение сущностей. Данные BLOBS позволяют распознавать изображения и голос (если такой функционал поддерживается базой данных).
При самом первом запуске узла данный запрос игнорируется. Все записи в исходных данных включаются в выходные данные, поскольку выходных данных пока не существует. Этот запрос используется для оценки записей для сравнения при повторном выполнении узла. В этом смысле он не ограничивает импортируемые записи. Для фильтрации записей в ходе импорта вы можете указать запрос SQL на первой вкладке узла ODBC или OLE DB. Цели данного запроса и исходного запроса очень разные.
Построение первичного ключа инкрементального обновления
Списки первичных ключей внизу предназначены для настройки первичного ключа. Первичный ключ представляет одну или более колонок, которые используются совместно для сравнения двух записей на предмет сходства. Список всех колонок находится под полем Фильтр. Отметьте галочкой колонки, которые представляют первичный ключ.
Инкрементальное обновление не позволяет повторно загружать измененные записи. Измененные записи соответствуют тому же первичному ключу, и потому они будут считаться похожими на те записи, которые уже присутствуют в результатах узла, и следовательно будут отброшены. Если вам нужно повторно загрузить существующие записи, вам придется повторно загрузить весь массив данных целиком (переключите режим обновления обратно на Нет и затем выполните узел). |
Указание первичного ключа не является обязательным. При работе в режиме Добавить/Обновить, если ключ не указан, все записи будут считаться уникальными, а значит, они отсутствуют в результатах узла. Все новые записи будут добавлены в конец существующих записей.
Производительность инкрементального обновления
Уточняющий запрос необходим для сокращения размера исходного массива данных, поскольку поиск существующих записей в узле-источнике данных требует много времени.
Это очень приблизительная оценка, поскольку на импорт влияют еще несколько факторов. Обычно Уточняющий запрос должен вернуть данные, которые могли измениться или содержать добавления с момента последнего выполнения узла.
Записи, которые уже хранятся (кэшированные записи или просто кэш), не обязательно удаляются. В зависимости от настроек они могут быть сохранены. Это сокращает количество операций, которые должен выполнить Сервер PolyAnalyst. Многие операционные системы плохо справляются с удалением больших блоков записей, поскольку это предполагает выполнение нескольких операций на жестком диске, что может значительно замедлить работу (даже если скорость обработки исчисляется в наносекундах/миллисекундах, это ощутимо при работе с миллионами записей).
Другим преимуществом инкрементального обновления является потенциальное снижение нагрузки на источник данных. Каждый раз, когда программа получает доступ к базе данных, эта база данных должна выполнить работу, чтобы ответить на запрос. Это предполагает считывание данных из файлов в память в процессе подготовки к передаче в программу, которая выполнила запрос. Чем больше записей запрошено, тем больше работы предстоит выполнить базе данных. Сокращение количества запрошенных записей сокращает объем работы. Инкрементальная загрузка может уменьшить количество записей, к которым необходимо получить доступ, что приводит к сокращению нагрузки на базу данных.
Следующим преимуществом является сниженная загрузка сети. Когда серверу PolyAnalyst (или другой похожей программе для обработки данных) необходимо прочитать данные с внешнего источника данных, этот источник может находиться на отдельной машине, которая подключена к сети или к Интернету. Все записи должны быть переданы через это соединение. Каждый раз при необходимости передачи данных по соединению может возникнуть ряд затруднений. Трудно точно рассчитать производительность такого процесса. Обычно сокращение количества записей, к которым необходимо получить доступ и передать, сокращает количество передаваемых данных, что повышает производительность процесса их передачи.
Другое преимущество - работа с уже существующими записями. Не нужно запрашивать и передавать эти данные с внешних источников на сервер PolyAnalyst и заставлять сервер PolyAnalyst сохранять их во второй раз только для того, чтобы позже удалить при выполнении аналитического процесса.
В первую очередь PolyAnalyst - программа, созданная для анализа данных, а не инструмент управления базой данных. Его механизмы доступа к данным и обработки данных оптимизированы для подготовки данных к моделированию и применению моделей. PolyAnalyst не предназначен для работы с хранилищем данных размером в несколько терабайт, с чем эффективно справляются базы данных типа Microsoft SQL Server, IBM DB2 или Oracle. В PolyAnalyst выполняется несколько операций (например, индексирование), которые не выполняются в других программах обработки данных, что делает PolyAnalyst менее эффективными при импорте данных. Как и большинство других приложений по глубокой обработке данных, PolyAnalyst предназначен, в первую очередь, для работы с данными в режиме офф-лайн. Данные офф-лайн обычно являются статичными, редко изменяются и хранятся отдельно от транзакционной системы, которая их создала. Инкрементальная загрузка позволяет как-то компенсировать подобное снижение производительности, но это не идеальное решение. Если вы работаете с динамической базой данных, рекомендуется использовать стороннюю программу, которая создает витрину данных или хранилище данных, которое сначала подготавливает эти данные на промежуточном полустатическом этапе.