Google BigQuery-쿼리가 성공적으로 실행되었지만 결과가 대상 테이블에 푸시되지 않았습니다.

그레이엄 폴리

결과를 푸시 할 대상 테이블을 지정하는 Java REST API를 통해 BigQuery에 대해 야간 쿼리를 실행합니다 (write disposition = WRITE_TRUNCATE). 오늘의 쿼리는 오류없이 실행되는 것처럼 보였지만 결과가 대상 테이블로 푸시되지 않았습니다.

이 쿼리는 몇 주 동안 실행되었으며 문제가 없었습니다. 코드도 변경되지 않았습니다.

"실패"한 후 수동으로 두 번째 실행하면 제대로 작동했습니다. 우리가 발견 한 것은 바로이 결함이었으며 다시 발생할 수 있다는 우려가 있습니다.

"실패한"쿼리에서 기록 된 JSON 응답은 괜찮아 보입니다 (민감한 데이터를 난독 처리했습니다).

INFO: Job finished successfully: {
"configuration" : {
"dryRun" : false,
"query" : {
  "createDisposition" : "CREATE_IF_NEEDED",
  "destinationTable" : {
    "datasetId" : "[REMOVED]",
    "projectId" : "[REMOVED]",
    "tableId"   : "[REMOVED]"
  },
  "priority" : "INTERACTIVE",
  "query" : "[REMOVED]",
  "writeDisposition" : "WRITE_TRUNCATE"
 }
},
"etag" : "[REMOVED]",
"id" : "[REMOVED]",
"jobReference" : {
 "jobId" : "[REMOVED]",
 "projectId" : "[REMOVED]"
},
"kind" : "bigquery#job",
"selfLink" : "[REMOVED]",
"statistics" : {
 "creationTime" : "1390435780070",
 "endTime" : "1390435780769",
 "query" : {
  "cacheHit" : false,
  "totalBytesProcessed" : "12546"
},
 "startTime" : "1390435780245",
 "totalBytesProcessed" : "12546"
 },
 "status" : {
 "state" : "DONE"
 }
}

"시도해보세요!" 여기 에 Jobs / GET의 경우 작업 ID를 연결하면 작업이 실제로 성공했으며 로깅 된 출력 (위에 붙여 넣기)과 일치 함을 보여줍니다.

웹 콘솔을 확인하면 대상 테이블이 잘 렸지만 업데이트되지 않은 것으로 표시됩니다. 이상하게도 "Last Modified"가 업데이트되지 않았습니다 (페이지를 여러 번 새로 고쳤습니다).

http://i.stack.imgur.com/384NL.png

BigQuery에서 쿼리가 성공적으로 실행되는 것처럼 보이지만 대상 / 참조 테이블이 지정된 경우 결과가 아직 푸시되지 않은 상태에서 테이블이 잘린 것처럼 이전에 BigQuery에서 이것을 경험 한 사람이 있습니까?

그레이엄 폴리

그래서 우리는 이것의 문제가 무엇인지 알아 냈습니다. 지난 며칠 동안 몇 번 다시 실패했기 때문에 더 자세히 조사했습니다.

실행중인 쿼리는 바로 전에 실행되는 다른 쿼리에 종속됩니다. 첫 번째 쿼리가 완료 될 때까지 기다리지 만 (작업 상태 = "DONE") 실제로 완전히 완료되지 않았으며 데이터를 아직 사용할 수없는 것처럼 보입니다.

현재 프로세스는 다음과 같습니다.

  1. 다른 데이터 소스에서 데이터를 가져와 결과를 테이블 A로 스트리밍
  2. (1)이 완료되면 (작업 ID 폴링 및 "DONE"상태 가져 오기) 테이블 A의 결과를 사용하여 테이블 B를 생성하기 위해 조인하는 다른 쿼리를 제출합니다.
  3. 테이블 A의 데이터는 아직 사용할 수 없으므로 (2)의 쿼리 결과 빈 테이블이 생성됩니다.

첫 번째 쿼리에 스트리밍을 사용할 때 데이터가 실제로 표시되고 BigQuery에서 사용할 수있게되는 데 약 5 ~ 10 초가 걸린다는 사실을 확인했습니다.

우리는 매우 추한 해결 방법을 사용했습니다. 첫 번째 쿼리 후 몇 초 후에 다음 쿼리를 실행하기 만하면됩니다. 우아하지는 않지만 작동합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관