2014-07-15 2 views
0

Gmail 계정에서 CSV 첨부 파일을 가져 와서 Fusion 테이블로 푸시하려고합니다. 때로는 작동하지만 대부분 "Execution failed : 가져 오기를 처리 할 때 내부 오류가 발생했습니다. 다시 시도하십시오."라는 오류 메시지와 함께 실패합니다. Fusion 테이블의 importRows 호출에서 가져옵니다. 가져 오기 크기는 ~ 4k이므로 1m 제한보다 훨씬 낮습니다.애플 리케이션 스크립트를 통해 퓨전 테이블 importRows 이상 실패

importRows 대신 Fusion table SQL INSERT 옵션을 사용하려고 시도하지만 importRows 호출에 문제가 있는지 알고 싶습니다. 아마도 Fusion 테이블이 더 느리게 공급 될 필요가 있는지를보기 위해 호출 사이에 5 초의 지연이있었습니다. 여기

는 응용 프로그램 스크립트입니다 :

function getDataFromMailbox() { 
    var tableID = "XXXXXXXX"; 
    var threads = GmailApp.getInboxThreads(); 
    if (threads.length) { 
    var thread = threads.pop(); 
    var messages = thread.getMessages(); 
    for (var j=0; j < messages.length; j++) { 
     var message = messages[j]; 
     if (message.isUnread()) { 
     var from = message.getFrom(); 
     if (from == "[email protected]") { 
      var attachments = message.getAttachments(); 
      for (var k=0; k< attachments.length; k++) { 
      var attachment = attachments[k]; 
      Logger.log(attachment.getSize()); 
      FusionTables.Table.importRows(tableID, attachment, {startLine:2}); 
      } 
     } else { 
      thread.moveToTrash(); // Thread isn't from our source 
     } 
     message.markRead(); 
     } 
    } 
    Logger.log("Processed %s messages", messages.length); 
    if (!thread.isUnread()) { thread.moveToArchive(); } 
    } 
} 

답변

2

드디어 다시 조사 할 수있는 기회를 가졌습니다. 잠자기 전화가 열쇠 인 것 같습니다. 융합 테이블 가져 오기 후 5 초의 절전 모드를 사용하면 가져 오기 오류가 발생합니다. 10 초 동안 스크립트를 잠자면 시간 초과 오류가 발생합니다. 7 초가 적당합니다 (적어도 오늘은). 다음은 누군가가 Gmail 계정에 데이터를 기록한 다음 App Script를 사용하여 Fusion 테이블로 가져 오려는 경우에 대비하여 업데이트 된 스크립트입니다. 내가 같은 일을 얻고있다

function getDataFromMailbox() { 
    var tableID = "XXXXXXXXXXXXXXXXXX"; 

    var threads = GmailApp.getInboxThreads(); 
    while (threads.length) { 
    var thread = threads.pop(); 
    var messages = thread.getMessages(); 
    for (var j=0; j < messages.length; j++) { 
     var message = messages[j]; 
     if (message.isUnread()) { 
     var from = message.getFrom(); 
     if (from == "[email protected]") { 
      var attachments = message.getAttachments(); 
      for (var k=0; k< attachments.length; k++) { 
      var attachment = attachments[k]; 

      var attString = attachment.getDataAsString(); 
      var lines = attString.match(/^.*((\r\n|\n|\r)|$)/gm); 
      lines.shift(); lines.shift(); 

      Logger.log(lines.length); 
      FusionTables.Table.importRows(tableID, attachment, {startLine:2}); 
      } 
     } else { 
      thread.moveToTrash(); // Thread isn't from our source 
     } 
     Logger.log("Processed message: " + message.getId()); 
     message.markRead(); 
     Utilities.sleep(7000); // Wait for fusion tables to catch up 
     } 
    } 
    Logger.log("Processed %s messages", messages.length); 
    if (!thread.isUnread()) { thread.moveToArchive(); } 
    } 
} 
+0

나는 지수 백 오프를 사용하는 경우에도 (https://gist.github.com/peterherrmann/2700284)하지만, 20 대 지연 후에도 나는 여전히에 오류를 받고 있어요 두 번째 importRows 호출. –