If I understand your use case properly, I would not use the "Table output" step for this kind of move.
"Table output" is a great step for data warehousing, where you usually insert data to tables which are supposed to be empty and are part of a much broader process.
Alternatively, I would use "Execute SQL script" to tweak the INSERT to your own needs.
Consider this to be your desired SQL statement (PostgreSQL syntax in this example):
INSERT INTO ${TargetTable}
(contact_id, request_id, event_time, channel_id)
VALUES ('?', '?', '?', '?')
WHERE
NOT EXISTS (
SELECT contact_id, request_id, event_time, channel_id FROM ${TargetTable}
WHERE contact_id = '?' AND
-- and so on...
);
:
- Get the required fields for mapping (will be referenced by the question marks into an argument sequence);
- Check the "Variable substitution" check box in case you intend to use variables which were loaded and/or created along the broader process;

SQL-performance-wise, it may not be the most efficient way, but it looks to me like a better implementation for your use case.