private static void populateDataToRebalanceTarget(Dataset source, Dataset target, MetadataProvider metadataProvider,
IHyracksClientConnection hcc) throws Exception {
JobSpecification spec = new JobSpecification();
TxnId txnId = metadataProvider.getTxnIdFactory().create();
JobEventListenerFactory jobEventListenerFactory = new JobEventListenerFactory(txnId, true);
spec.setJobletEventListenerFactory(jobEventListenerFactory);
IOperatorDescriptor starter = DatasetUtil.createDummyKeyProviderOp(spec, source, metadataProvider);
IOperatorDescriptor primaryScanOp = DatasetUtil.createPrimaryIndexScanOp(spec, metadataProvider, source);
IOperatorDescriptor upsertOp = createPrimaryIndexUpsertOp(spec, metadataProvider, source, target);
IOperatorDescriptor commitOp = createUpsertCommitOp(spec, metadataProvider, target);
spec.connect(new OneToOneConnectorDescriptor(spec), starter, 0, primaryScanOp, 0);
int numKeys = target.getPrimaryKeys().size();
int[] keys = IntStream.range(0, numKeys).toArray();
IConnectorDescriptor connectorDescriptor = new MToNPartitioningConnectorDescriptor(spec,
new FieldHashPartitionComputerFactory(keys, target.getPrimaryHashFunctionFactories(metadataProvider)));
spec.connect(connectorDescriptor, primaryScanOp, 0, upsertOp, 0);
spec.connect(new OneToOneConnectorDescriptor(spec), upsertOp, 0, commitOp, 0);
JobUtils.runJob(hcc, spec, true);
}