Выписка отменена из-за тайм-аута или запроса клиента - PullRequest
0 голосов
/ 18 июня 2020

Я пытаюсь добавить данные в свою базу данных Google Cloud SQL с помощью Google App Script. Вчера вечером, когда я закончил, мой код работал нормально, но когда я запустил его сегодня утром, он теперь выдает ошибку «Оператор отменен из-за тайм-аута или запроса клиента», ошибка, которую я получаю в облачной консоли: «Получена ошибка чтения. пакеты связи ».

Прошлой ночью было обработано около 1600 строк данных. Я поигрался с этим и сузил его, что ошибка возникнет, когда будет больше 15 строк. 15 строк он добавит данные в порядке, изменит его на 16 строк и выдает ошибку, это говорит мне, что это не само соединение. Я также протестировал данные в электронной таблице, скопировав строку 15 в строку 16 и удалив все остальные данные, это не сработало. Мое главное замешательство в том, что я прочитал о том, что время истекает, заключается в том, что вчера вечером он работал нормально с 1600 строками данных. Мой код ниже:

function connection(folderId, db, c1, c2, c3, c4, c5, c6, c7) {
  var files = DriveApp.getFolderById(folderId).getFiles();
  var excelfile = files.next();
  var fileId = excelfile.getId();
  var data = SpreadsheetApp.openById(fileId).getSheetByName('Report 1');
  var last = data.getLastRow()
  var sheetdata=data.getRange("B5:H16").getValues();

  var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);//dburl is not defined

  conn.setAutoCommit(false); 
  var start = new Date();
  var stmt = conn.prepareStatement('INSERT INTO '+ db + ' ' + '('+c1+','+c2+','+c3+','+c4+','+c5+','+c6+','+c7+') values (?, ?, ?, ?, ?, ?, ?)');
  for (var i=0; i<sheetdata.length; i++) {
    stmt.setString(1, Utilities.formatDate(sheetdata[i][0], 'Etc/GMT', 'yyyy-MM-dd'));
    stmt.setString(2, sheetdata[i][1]);
    stmt.setString(3, sheetdata[i][2]);
    stmt.setString(4, sheetdata[i][3]);
    stmt.setString(5, sheetdata[i][4]);
    stmt.setString(6, sheetdata[i][5]);
    stmt.setString(7, sheetdata[i][6]);
    stmt.addBatch();
  }
      var batch = stmt.executeBatch();
      conn.commit();
      conn.close();

var end = new Date()
Logger.log('Time elapsed: %sms for %s rows.', end - start, batch.length);
}

Ответы [ 2 ]

2 голосов
/ 19 июня 2020

Выяснилось, что проблема связана с новой средой выполнения сценария приложения V8. Для исправления верните среду выполнения к Rhino. Для этого go в «Просмотр> Показать манифест проекта», затем там, где написано «runtimeVersion»: «V8», измените это на «runtimeVersion»: «STABLE». В настоящее время здесь есть открытая ошибка по этой проблеме: https://issuetracker.google.com/issues/149413841

0 голосов
/ 18 июня 2020

Попробуйте так:

function connection(folderId, db, c1, c2, c3, c4, c5, c6, c7) {
  var ss=SpreadsheetApp.openById("fileId");//just go to the file and get the id
  var sh=ss.getSheetByName('Report 1');
  var rg=sh.getRange("B5:H16");
  var sheetdata=rg.getValues();
  var conn = Jdbc.getCloudSqlConnection(dbUrl, user, userPwd);//dburl is not defined
  conn.setAutoCommit(false);
  var stmt = conn.prepareStatement('INSERT INTO '+ db + ' ' + '('+c1+','+c2+','+c3+','+c4+','+c5+','+c6+','+c7+') values (?, ?, ?, ?, ?, ?, ?)');
  for (var i=0; i<sheetdata.length; i++) {
    stmt.setString(1, Utilities.formatDate(sheetdata[i][0], Session.getScriptTimeZone(), 'yyyy-MM-dd'));
    stmt.setString(2, sheetdata[i][1]);
    stmt.setString(3, sheetdata[i][2]);
    stmt.setString(4, sheetdata[i][3]);
    stmt.setString(5, sheetdata[i][4]);
    stmt.setString(6, sheetdata[i][5]);
    stmt.setString(7, sheetdata[i][6]);
    stmt.addBatch();   
  }
  var batch = stmt.executeBatch();
  conn.commit();
  conn.close();
}
...