Отслеживание изменений для TeraData

Нам нужен способ узнать, какие строки изменились в базе данных TeraData с момента последнего импорта данных из этой базы данных. В таблице базы данных TeraData нет ничего о таблице или данных в таблице, которые оказались бы надежным сигналом изменения, который мы можем использовать для определения этого. В SQL Server кажется, что функция отслеживания изменений делает именно то, что нам нужно, однако исходной системой является TeraData. Кто-нибудь знает, есть ли функция в TeraData или сторонний инструмент, который работает с TeraData, который бы эффективно добавил функциональность, предоставляемую отслеживанием изменений SQL Server, но в базу данных TeraData?

0 ответов

Teradata - это база данных OLAP. Функция, о которой вы также говорите в Sql Server, предназначена для обработки типа OLTP. Teradata предполагает, что вы будете выполнять большие операции над наборами, а не небольшие операции на уровне одной строки. Все в оптимизаторе и наборе функций Teradata основано на создании производительности для этих больших наборов операций.

Единственный способ отследить изменения в базах данных Teradata - это:

  1. Добавьте в таблицу атрибут отметки времени обновления, который поддерживается кодом, изменяющим данные. (пользовательский интерфейс или скрипт или триггер в базе данных)
  2. ИЛИ создайте триггер для каждой таблицы, которую вы хотите отслеживать. Этот триггер может: A. Добавить в другую таблицу только ключ записи и метку времени обновления B. Или добавить в другую таблицу весь набор атрибутов и метку времени обновления.
  3. ИЛИ захватите всю таблицу в каждом временном окне и сравните данные. Мы сделали это только для очень маленьких наборов данных. (Данные домена)

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

Мы закончили тем, что сгенерировали триггеры из шаблона для каждой таблицы, из которой нам нужно было фиксировать изменения, а также DDL для таблицы сбора данных. (Копия, которую мы тоже добавляем). Таблица сбора данных имеет те же атрибуты, что и исходная таблица, ПЛЮС как минимум 2 атрибута метаданных: тип изменения и отметка времени.

Кроме того, мы закончили тем, что добавили "Копировать отметку времени" к атрибутам метаданных, которые мы могли заполнять по мере сбора данных. Это было необходимо, потому что данные могли быть добавлены вне ВРЕМЕННОЙ последовательности. Другими словами, короткая транзакция может завершить добавление в таблицу сбора данных задолго до того, как длительная транзакция, которая началась намного раньше, когда-либо завершится.

Все это может показаться немного более сложным, чем просто ссылка на "отслеживание изменений" SQL Server, но это довольно просто и не сильно влияет на общую производительность базы данных. Наши измерения дали результат 3% из-за всех добавленных триггеров.

Другие вопросы по тегам