Пример: Использование маркеров TempTable и OutputTempTable
Допустим, что у вас есть процесс Select1, который выбирает 10000 покупателей, являющихся "золотыми" покупателями (“Gold”); например, Indiv.AcctType = ‘Gold’. Вы связываете процесс Select1 со вторым процессом выбора (“Select2”) с использованием запроса на основе чистого SQL:
Select p.CustID from Indiv p, <TempTable> where p.CustID = <TempTable>.CustID group by p.CustID having sum(p.PurchAmt) > 500
В этом примере выбираются покупатели, у которых сумма покупок превысила 500 долларов и которые находятся во входной ячейке (другими словами, покупатели с типом учетной записи “Gold”).
Напротив, в запросе на основе чистого SQL, где пропущен маркер и объединение <TempTable>:
Select p.CustID from Purchases p group by p.CustID having sum(p.PurchAmt) > 500
сначала вычисляется сумма покупок для всех покупателей в таблице Purchases (в которой могут содержаться миллионы покупателей), а затем выбираются все покупатели, у которых сумма покупок превысила $500, независимо от того, являются ли они заказчиками типа “Gold”, или нет.
Поэтому, чтобы обеспечить наивысшую производительность, даже если оптимизация в базе данных выключена, пишите свои чистые запросы SQL с использованием маркера <TempTable>, если существует входная ячейка.
Для простоты, в этом примере не используется маркер <OutputTempTable>, но, чтобы управлять оптимизацией в базе данных и не позволит получить ID аудитории из базы данных обратно на сервер Campaign, нужно включать маркер <OutputTempTable> в запрос на основе чистого SQL. Например:
Create table <OutputTempTable> as Select p.CustID from Purchases p, <TempTable> where p.CustID = <TempTable>.CustID group by p.CustID having sum(p.PurchAmt) > 500