Let's go through this one step at a time.
A PK is a set of one or more fields from a table that is unique. Example, suppose you have a table that stores revenue by customer for each month. The PK will then be :
INFA allows you to tackle this in more than one way,depending upon your requirements.
Let us consider them one at a time:
1. Inserting after truncate
Without a PK this may be an option. It may allow you to use external bulk-loaders for performance-gain.
However, for a period your table will be empty and what happens if the source table is purged after some time.
This option should only be used if all others are not viable
2. Using update else insert
Essentially every time source data is written to the target and when the PK for the records already exists the row is overwritten, otherwise it is inserted.
Obviously, this is only possible with a meaningful PK.
3. Using datadriven strategy
This allows the greatest control, cause by caching the target as lookup you can ascertain beforehand if a record should be treated as insert/update/ delete.
However, performance is often reduced, cause caching the target may be quite demanding. Also, you need a PK to control the update strategies in your mapping
4. Using a timestamp to perform only inserts.
If the source data has a date/timestamp field that indicates when the record was inserted, you could use this to write inserts on a daily basis. (no PK needed)
However,this is much trickier than one would think. If you need to postpone the workflow for one or more days than you risk entire days of data missing.
(And yes, we have several jobs running that have been build that way, even after trying to prevent them from being accepted in production)
It is VERY unlikely that you cannot define a PK on the AS400 source table. If this is an OLTP database there is a 99% chance that it can be defined.
Bye the way what are you running on the AS400. It may be something I have worked with as well
Ties Blom