protected void createOdpsTableWithRecords(
     String tableName, String[] partitionCols, int numRecords, ColumnGenerator... extraCols)
     throws OdpsException, IOException, ParseException {
   createOdpsTable(tableName, partitionCols, extraCols);
   TableTunnel tunnel = new TableTunnel(odps);
   PartitionSpec partitionSpec = getSimplePartitionSpec(partitionCols);
   TableTunnel.UploadSession uploadSession =
       partitionSpec == null
           ? tunnel.createUploadSession(PROJECT, tableName)
           : tunnel.createUploadSession(PROJECT, tableName, partitionSpec);
   RecordWriter recordWriter = uploadSession.openRecordWriter(0);
   for (int i = 0; i < numRecords; i++) {
     Record record = getOdpsRecord(uploadSession, i, extraCols);
     recordWriter.write(record);
   }
   recordWriter.close();
   uploadSession.commit(new Long[] {0L});
 }