내보내는 데이터
계정의 어떤 키로 보낸 태스크든, Playground와 모니터가 만든 태스크까지 모두 들어갑니다. 한 구간에는
시각이
[windowStart, windowEnd)에 속하는 행만 정확히 담깁니다.
전달 시점. 구간은 닫히고 10분 뒤에 전달 대상이 되므로, 경계 시각에 정산된 과금도 그 구간에
들어갑니다. 전달 대상 구간은 15분마다 도는 작업이 가져가므로, 보통 구간이 닫히고 10–25분 뒤에 전달이
시작됩니다.
내보내기 설정
1
내보내기 ID 확인
accountKey는 고객 폴더와 테이블의 이름입니다. 우리가 쓰는 모든 경로와 테이블에 이 값이 들어가므로,
querying.ai 계정 여러 개가 버킷이나 데이터셋 하나를 함께 써도 각자 자기 파일만 씁니다. 위의 예시
값이 아니라 응답에 나온 ID에 권한을 주세요.2
권한 부여
대상 저장소에 이 ID의 권한을 줍니다. S3, Cloud Storage, BigQuery별 방법은
권한 부여를 참고하세요.
3
내보내기 만들기
POST /v1/exports가 권한을 확인하고 내보내기를 저장합니다.
내보내기 만들기를 참고하세요.4
첫 전송 확인
GET /v1/exports/{id}/runs가 구간별 상태를 나열합니다. 전송 이력을 참고하세요.권한 부여
Amazon S3
우리 Google ID가 맡을 수 있는 IAM role을 AWS 계정에 만듭니다. ID 응답의trustPolicy를 role의 신뢰
정책으로 쓰세요. 이 정책은 우리 내보내기 ID가 고객 계정의 세션 이름으로 요청할 때만 받아들입니다.
kms:GenerateDataKey도 허용합니다.
Google Cloud Storage
버킷에 내보내기 서비스 계정의 Storage Object User(roles/storage.objectUser) 권한을 줍니다. 이
권한으로 파일을 만들고, 구간을 다시 보낼 때 파일을 교체합니다.
resource.name.startsWith("projects/_/buckets/acme-geo/objects/querying/acct_3f9a1c2b7d4e/") IAM
조건을 붙입니다.
BigQuery
데이터셋에 내보내기 서비스 계정의 BigQuery Data Editor(roles/bigquery.dataEditor) 권한을 줍니다.
적재 job은 우리 프로젝트에서 실행되므로 적재 비용은 들지 않고, 저장 비용과 고객이 실행하는 쿼리 비용만
냅니다.
내보내기 만들기
엔진 범위가 없는 API 키를 쓰세요. 내보내기는 계정의 모든 결과를 담으므로, 일부 엔진으로 제한된 키는403 KEY_SCOPE를 받습니다.
저장하기 전에 권한을 확인합니다. S3와 Cloud Storage는
<prefix><accountKey>/_querying/connection-check.json을
쓰고, BigQuery는 데이터셋을 읽어 위치를 기록합니다. 확인에 실패하면 아무것도 저장하지 않습니다. 계정당
내보내기는 10개까지 만들 수 있습니다.
응답은 201과 내보내기입니다.
destination에 버킷 설정을 그대로 돌려주고, 파일이 들어가는 폴더 path를
더합니다. 예: s3://acme-geo/querying/acct_3f9a1c2b7d4e/, gs://acme-geo/querying/acct_3f9a1c2b7d4e/.
nextWindowStart는 다음에 계획될 구간의 시작입니다.
오류
파일과 테이블
S3와 Cloud Storage의 파일
- 디렉터리는 Hive 파티션 규칙(
dt=, 시간별 내보내기는hour=도)을 따르므로 Athena, BigQuery 외부 테이블, Spark가 열로 읽습니다. v1은 스키마 버전(내보내기의schemaVersion)입니다. 열을 깨는 변경은v2로 나란히 냅니다.- 한 구간은 시간 순서대로 최대 100,000행씩 part 파일로 나뉩니다.
_manifest.json은 마지막에 씁니다. manifest가 생긴 구간을 적재하고, part 목록은 manifest에서 읽으세요.
rows는 part 파일의 줄 수와 같고, 전송 이력에 나오는 run의 rows와도 같습니다. 파일
이름은 구간에만 달려 있으므로, 다시 보낸 구간은 같은 객체를 교체합니다.
BigQuery 테이블
BigQuery 내보내기는querying_tasks_v1_<accountKey>와 querying_monitor_results_v1_<accountKey>에
적재합니다. 테이블은 첫 적재 때 만들어지고 completedAt 또는 ranAt으로 파티션됩니다(일별, 시간별
내보내기는 시간별). 구간마다 자기 파티션을 교체하므로 다시 보낸 구간이 두 번 쌓이지 않습니다.
payload, response, sources, scoringContext는 JSON 열입니다.
행 스키마 (v1)
tasks
monitor_results
전송 이력
데이터 세트별 구간 하나가 run 하나입니다. 최신순으로 나열합니다.status, data(tasks 또는 monitor_results), limit(1–200, 기본 50)으로 거릅니다. 다음 페이지는
nextCursor를 cursor로 다시 보내 받습니다.
- 자동 재시도. 실패한 시도는 15분 뒤에 다시 시도하고, 이후 간격을 두 배씩 늘려 최대 12시간까지,
모두 8번 시도합니다.
error에 저장소가 알려 준 이유가 들어가므로 권한이 빠지면 여기서 먼저 보입니다. - 구간 다시 보내기.
POST /v1/exports/{id}/runs/{runId}/retry는 구간을 지금 보냅니다. 권한을 고친 뒤 실패한 구간을 보내거나, 이미 전달된 구간을 다시 쓸 때 씁니다.attempts를 초기화하고 run을pending으로 돌려줍니다. 전송 중인 run은409 EXPORT_RUN_RUNNING을 반환합니다. - 내보내기 상태.
GET /v1/exports와GET /v1/exports/{id}는deliveredThrough(마지막으로 전달된 구간의 끝),failedRuns,retryingRuns(한 번 이상 실패하고 대기 중인 run)를 더해 보여 줍니다.
일시 중지, 재개, 삭제
PATCH /v1/exports/{id}에{"enabled": false}를 보내면 내보내기를 일시 중지합니다.{"enabled": true}는 재개하며, 최근 30일 안에 빠진 구간을 이어서 보냅니다.DELETE /v1/exports/{id}는 내보내기를 중지합니다. 이미 전달된 파일과 파티션은 고객 저장소에 남습니다.- 대상 저장소, 주기, 데이터 세트는 바꿀 수 없습니다. 새 내보내기를 만들고 이전 것을 삭제하세요.
엔드포인트
소유하지 않은 내보내기는
404 NOT_FOUND를 반환합니다.