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

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


person Orlando Colamatteo    schedule 14.03.2013    source источник
comment
Рассматриваете ли вы это с точки зрения репликации, с точки зрения отказоустойчивой системы или просто с точки зрения ETL, чтобы определить, какие записи были изменены?   -  person Rob Paller    schedule 15.03.2013
comment
Это строго для ETL.   -  person Orlando Colamatteo    schedule 15.03.2013


Ответы (1)


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

Единственный способ, которым нам удалось отслеживать изменения в базах данных Teradata, заключался в следующем:

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

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

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

Кроме того, в итоге мы добавили «метку времени копирования» к атрибутам метаданных, которые мы могли заполнять по мере получения данных. Это было необходимо, потому что данные могли быть добавлены вне последовательности TIME. Другими словами, короткая транзакция может завершить добавление в таблицу сбора данных задолго до того, как завершится длительная транзакция, начавшаяся намного раньше.

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

person Techdeveloper    schedule 25.04.2020