No, the way you're doing it is right - there's no batching, as the batching really happens when you commit.

By far the most efficient way to import data is bulk import, though. Have you done bulk import before with HBase? We should talk about how that can be plugged into Pig. You basically build entire HFiles and hand them off to HBase. The rows have to be ordered in the expected order (by row key). To do this, instead of using the connection.commit(), you use an "under-the-covers" API to get at the uncommitted data like this:

      Iterator<Pair<byte[],List<KeyValue>>> dataIterator = PhoenixRuntime.getUncommittedDataIterator(conn);

In this case, the byte[] is the HBase table name and the List<KeyValue> are the correctly ordered KeyValues. You'd use HFileOutputFormat to build the HFile. The use case when you'd have multiple tables is when a table is indexed. The first element in the iterator would be the data table values while the successive ones would be the index table values. Take a look at <code>com.salesforce.phoenix.query.ConnectionlessUpsertTest</code> for an example usage.

I can see how this would work in map/reduce, where you could get map/reduce to do the sort, and then do the above (with a little bit of metadata to determine when to close the HFile and when to start a new one (the split points). The interesting angle about doing it this way is, you can even get away without having an HBase connection until you want to hand off the HFiles.