$out
$out은 집계 파이프라인에서 반환된 문서를 가져와서 지정된 컬렉션에 씁니다. $out 연산자는 집계 파이프라인의 마지막 단계여야 합니다. Atlas Data Federation에서는 연합 쿼리를 사용하여 지원되는 여러 연합 데이터베이스 인스턴스 저장소 또는 단일 지원되는 연합 데이터베이스 인스턴스 저장소 중 하나에서 데이터를 쓸 때 $out을 사용할 수 있습니다. 이 기능은 연합 쿼리를 사용하여 다양한 대상으로 데이터를 저장할 수 있도록 지원합니다.
Atlas 클러스터 네임스페이스
AWS 읽기 및 쓰기 권한이 있는 S3 버킷
읽기 및 쓰기 권한이 있는 Azure Blob Storage 컨테이너
$out 을 사용하려면 연합 데이터베이스 인스턴스에 연결 해야 합니다.
필요한 권한
다음이 있어야 합니다.
읽기 및 쓰기 권한 또는 s3:PutObject 권한이 있는 S3 버킷용으로 구성된 연합 데이터베이스 인스턴스입니다.
atlasAdmin 역할 또는
outToS3
권한이 있는 사용자 정의 역할을 가진 MongoDB 사용자.
다음이 있어야 합니다.
Azure 역할이 있는 Azure Blob Storage에 대해 구성된 연합 데이터베이스 인스턴스 읽기 및 쓰기 권한이 있습니다.
atlasAdmin 역할 또는
outToAzure
권한이 있는 사용자 정의 역할을 가진 MongoDB 사용자.
다음이 있어야 합니다.
GCP서비스 계정 에 액세스 수 있는 Google Cloud Storage 버킷에 대해 구성된 연합 데이터베이스 인스턴스 입니다.
atlasAdmin 역할 또는
outToGCP
권한이 있는 사용자 정의 역할을 가진 MongoDB 사용자.
참고
$out 을 사용하여 동일한 Atlas cluster의 다른 데이터베이스에 있는 컬렉션에 쓰려면 Atlas cluster가 MongoDB 버전 5.0 이상이어야 합니다.
다음 역할 중 하나를 가진 데이터베이스 사용자여야 합니다.
다음 권한이 있는 사용자 지정 역할:
구문
1 { 2 "$out": { 3 "s3": { 4 "bucket": "<bucket-name>", 5 "region": "<aws-region>", 6 "filename": "<file-name>", 7 "format": { 8 "name": "<file-format>", 9 "maxFileSize": "<file-size>", 10 "maxRowGroupSize": "<row-group-size>", 11 "columnCompression": "<compression-type>" 12 }, 13 "errorMode": "stop"|"continue" 14 } 15 } 16 }
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "<storage-account-url>", 5 "containerName": "<container-name>", 6 "region": "<azure-region>", 7 "filename": "<file-name>", 8 "format": { 9 "name": "<file-format>", 10 "maxFileSize": "<file-size>", 11 "maxRowGroupSize": "<row-group-size>", 12 "columnCompression": "<compression-type>" 13 }, 14 "errorMode": "stop"|"continue" 15 } 16 } 17 }
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "<bucket-name>", 5 "region": "<aws-region>", 6 "filename": "<file-name>", 7 "format": { 8 "name": "<file-format>", 9 "maxFileSize": "<file-size>", 10 "maxRowGroupSize": "<row-group-size>", 11 "columnCompression": "<compression-type>" 12 }, 13 "errorMode": "stop"|"continue" 14 } 15 } 16 }
1 { 2 "$out": { 3 "atlas": { 4 "projectId": "<atlas-project-ID>", 5 "clusterName": "<atlas-cluster-name>", 6 "db": "<atlas-database-name>", 7 "coll": "<atlas-collection-name>" 8 } 9 } 10 }
필드
필드 | 유형 | 설명 | 필요성 | ||||
---|---|---|---|---|---|---|---|
s3 | 객체 | 집계 파이프라인에서 문서를 작성할 위치입니다. | 필수 사항 | ||||
s3.bucket | 문자열 | 집계 파이프라인에서 문서를 작성할 S3 버킷의 이름입니다. S3에 생성된 호출은 예를 들어
| 필수 사항 | ||||
s3.region | 문자열 | 옵션 | |||||
s3.filename | 문자열 | 집계 파이프라인에서 문서를 쓸 파일의 이름입니다. 파일 이름은 상수일 수도 있고, $out 단계에 도달한 문서의 필드에서 동적으로 생성될 수도 있습니다. 제공하는 모든 파일 이름 표현식은 중요: S3에 새로 생성된 파일과 이름 및 경로가 같은 파일이 있는 경우 $out은 기존 파일을 새로 생성된 파일로 덮어씁니다. S3에 생성된 호출은 예를 들어
| 필수 사항 | ||||
s3.format | 객체 | S3 파일의 세부 정보. | 필수 사항 | ||||
s3 .format .name | 열거형 | S3 파일의 형식입니다. 값은 다음 중 하나일 수 있습니다.
1 이 형식의 경우 $out 은 MongoDB 확장 JSON 형식으로 데이터를 씁니다. 자세한 내용은 제한 사항을 참조하세요. | 필수 사항 | ||||
s3 .format .maxFileSize | 바이트 | S3 파일의 최대 크기입니다. 현재 파일의 파일 크기 제한에 도달하면 S3에 새 파일이 생성됩니다. 첫 번째 파일은 파일명 확장자 앞에 예를 들어 문서가
생략하는 경우 기본값은 | 옵션 | ||||
s3 .format .maxRowGroupSize | 문자열 | Parquet 파일 형식만 지원됩니다. Parquet 파일에 쓸 때 사용할 최대 행 그룹 크기입니다. 생략하면 기본값은 | 옵션 | ||||
s3 .format .columnCompression | 문자열 | Parquet 파일 형식만 지원됩니다. Parquet 파일을 포맷할 때 Parquet 파일 내의 데이터를 압축하기 위해 적용할 압축 유형입니다. 유효한 값은 다음과 같습니다.
생략하는 경우 기본값은 자세한 내용은 지원되는 데이터 형식을 참조하세요. | 옵션 | ||||
errorMode | 열거형 | 문서를 처리할 때 오류가 발생할 경우 Atlas Data Federation을 진행하는 방법을 지정합니다. 예를 들어 Atlas Data Federation 이 CSV 파일에 쓸 때 Atlas Data Federation이 문서에서 배열을 발견하면 Atlas Data Federation이 이 값을 사용하여 문서를 건너뛰고 다른 문서를 처리할지 여부를 결정합니다. 유효한 값은 다음과 같습니다.
생략하는 경우 기본값은 | 옵션 |
필드 | 유형 | 설명 | 필요성 | ||||
---|---|---|---|---|---|---|---|
azure | 객체 | 집계 파이프라인에서 문서를 작성할 위치입니다. | 필수 사항 | ||||
azure.serviceURL | 문자열 | 집계 파이프라인에서 문서를 작성할 Azure Storage 계정의 URL입니다. | 필수 사항 | ||||
azure.containerName | 문자열 | 집계 파이프라인에서 문서를 작성할 Azure Blob Storage 컨테이너의 이름. | 필수 사항 | ||||
azure.region | 문자열 | Blob 스토리지 컨테이너를 호스팅하는 Azure 리전의 이름입니다. | 필수 사항 | ||||
azure.filename | 문자열 | 필수 사항 | |||||
azure.format | 객체 | Azure Blob Storage에 있는 파일의 세부 정보. | 필수 사항 | ||||
azure .format .name | 열거형 | Azure Blob Storage의 파일 형식입니다. 값은 다음 중 하나일 수 있습니다.
1 이 형식의 경우 $out 은 MongoDB 확장 JSON 형식으로 데이터를 씁니다. 자세한 내용은 제한 사항을 참조하세요. | 필수 사항 | ||||
azure .format .maxFileSize | 바이트 | Azure Blob 스토리지에 있는 파일의 최대 크기입니다. 현재 파일의 크기 제한에 도달하면 $out은 자동으로 새 파일을 생성합니다. 첫 번째 파일은 이름 뒤에 예를 들어 문서가
생략하는 경우 기본값은 | 옵션 | ||||
azure .format .maxRowGroupSize | 문자열 | Parquet 파일 형식만 지원됩니다. Parquet 파일에 쓸 때 사용할 최대 행 그룹 크기입니다. 생략하면 기본값은 | 옵션 | ||||
azure .format .columnCompression | 문자열 | Parquet 파일 형식만 지원됩니다. Parquet 파일을 포맷할 때 Parquet 파일 내의 데이터를 압축하기 위해 적용할 압축 유형입니다. 유효한 값은 다음과 같습니다.
생략하는 경우 기본값은 자세한 내용은 지원되는 데이터 형식을 참조하세요. | 옵션 | ||||
errorMode | 열거형 | 문서를 처리하는 동안 오류가 발생했을 때 Atlas Data Federation이 어떻게 진행해야 하는지 지정합니다. 유효한 값은 다음과 같습니다.
생략하는 경우 기본값은 자세한 내용은 오류를 참조하세요. | 옵션 |
필드 | 유형 | 설명 | 필요성 | |
---|---|---|---|---|
gcs | 객체 | 집계 파이프라인에서 문서를 작성할 위치입니다. | 필수 사항 | |
gcs.bucket | 문자열 | 집계 파이프라인 에서 문서를 쓰기 (write) Google Cloud Storage 버킷의 이름입니다. 중요생성된 Google Cloud 호출은 예를 들어
| 필수 사항 | |
gcs.region | 문자열 | 옵션 | ||
gcs.filename | 문자열 | 집계 파이프라인 에서 문서를 쓰기 (write) 파일 의 이름입니다. 파일 이름은 상수이거나 $out 단계에 도달하는 문서의 필드에서 동적으로 생성 될 수 있습니다. 제공하는 모든 파일 이름 표현식 은 중요생성된 Google Cloud Storage 호출은 예를 들어
| 필수 사항 | |
gcs.format | 객체 | Google Cloud Storage에 있는 파일 의 세부 정보입니다. | 필수 사항 | |
gcs .format .name | 열거형 | Google Cloud Storage에 있는 파일 의 형식입니다. 값은 다음 중 하나일 수 있습니다.
1 이 형식의 경우 $out 은 MongoDB 확장 JSON 형식으로 데이터를 씁니다. 자세한 내용은 제한 사항을 참조하세요. | 필수 사항 |
필드 | 유형 | 설명 | 필요성 |
---|---|---|---|
atlas | 객체 | 집계 파이프라인에서 문서를 작성할 위치입니다. | 필수 사항 |
clusterName | 문자열 | Atlas 클러스터의 이름. | 필수 사항 |
coll | 문자열 | Atlas 클러스터에 있는 컬렉션의 이름입니다. | 필수 사항 |
db | 문자열 | 컬렉션이 포함된 Atlas 클러스터의 데이터베이스 이름입니다. | 필수 사항 |
projectId | 문자열 | Atlas 클러스터가 포함된 프로젝트의 고유 식별자입니다. 프로젝트 ID는 연합 데이터베이스 인스턴스가 포함된 프로젝트의 ID여야 합니다. 생략하면 연합 데이터베이스 인스턴스가 포함된 프로젝트의 ID가 기본값이 됩니다. | 옵션 |
옵션
옵션 | 유형 | 설명 | 필요성 | |
---|---|---|---|---|
background | 부울 | 백그라운드에서 집계 작업을 실행하도록 플래그를 지정합니다. 생략하면 기본값은
쿼리가 백그라운드에서 계속 실행되는 동안 현재 실행 중인 쿼리가 완료되거나 연합 데이터베이스 인스턴스 연결이 끊길 때까지 기다리지 않고 다른 새 쿼리를 제출하려는 경우 이 옵션을 사용하십시오. | 옵션 |
예시
파일 이름 만들기
다음 예는 $out 단계에 도달한 문서의 동일하거나 다른 데이터 유형의 필드 또는 상수 문자열에서 파일명을 동적으로 생성하는 $out 구문을 보여줍니다.
간단한 문자열 예시
예시
S3 버킷 my-s3-bucket
에 압축된 BSON 파일로 1 GiB의 데이터를 작성하려고 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "filename": "big_box_store/", 6 "format": { 7 "name": "bson.gz" 8 } 9 } 10 } 11 }
s3.region
이 생략되었으므로 Atlas Data Federation은 스토리지 구성에서 이름이 my-s3-bucket
인 버킷이 호스팅되는 리전을 결정합니다. $out은 압축된 BSON 파일 5개를 작성합니다.
$out 이
big_box_store/1.bson.gz
라는 이름을 지정하는 파일에 대한 데이터의 처음 200 MiB입니다.s3.filename
의 값은 각 파일 이름에서 상수 역할을 합니다. 이 값은 문서 필드 또는 값에 종속되지 않습니다.s3.filename
은(는) 구분 기호로 끝나므로 Atlas Data Federation은 상수 뒤에 카운터를 추가합니다.구분 기호로 끝나지 않았다면 Atlas Data Federation은 상수와 카운터 사이에
big_box_store.1.bson.gz
처럼.
을(를) 추가했을 것입니다.s3.format.maxFileSize
를 사용하여 최대 파일 크기를 변경하지 않았으므로 Atlas Data Federation은 기본값인 200MiB를 사용합니다.
두 번째 200 MiB의 데이터를 $out 이
big_box_store/2.bson.gz
라는 이름의 새 파일에 추가합니다.$out 이
big_box_store/3.bson.gz
부터big_box_store/5.bson.gz
까지 이름을 지정하는 파일이 세 개 더 있습니다.
문서의 단일 필드
예시
S3 버킷 my-s3-bucket
에 압축된 JSON 파일로 90 GiB의 데이터를 작성하려고 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "region": "us-east-1", 6 "filename": {"$toString": "$saleDate"}, 7 "format": { 8 "name": "json", 9 "maxFileSize": "100MiB" 10 } 11 } 12 } 13 }
$out은 90MB의 데이터를 버킷의 루트에 있는 JSON 파일에 씁니다. 각 JSON 파일에는 동일한 saleDate
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 saleDate
값을 문자열로 변환하여 각 파일에 이름을 지정합니다.
문서의 여러 필드
예시
S3 버킷 my-s3-bucket
에 압축된 BSON 파일로 176 GiB의 데이터를 작성하려고 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "region": "us-east-1", 6 "filename": { 7 "$concat": [ 8 "persons/", 9 "$name", "/", 10 "$uniqueId", "/" 11 ] 12 }, 13 "format": { 14 "name": "bson", 15 "maxFileSize": "200MiB" 16 } 17 } 18 } 19 }
$out은 176MiB의 데이터를 BSON 파일에 씁니다. 각 파일의 이름을 지정하기 위해 $out은 다음을 결합합니다.
상수 문자열
persons/
및 문서에서:name
필드의 문자열 값,빗금(
/
),uniqueId
필드의 문자열 값 및빗금(
/
).
각 BSON 파일에는 동일한 name
및 uniqueId
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 name
및 uniqueId
값을 사용하여 각 파일의 이름을 지정합니다.
문서의 여러 유형의 필드
예시
S3 버킷 my-s3-bucket
에 압축된 JSON 파일로 154 MiB의 데이터를 작성하려고 합니다.
다음 $out 구문을 가정해 보겠습니다.
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "region": "us-east-1", 6 "filename": { 7 "$concat": [ 8 "big-box-store/", 9 { 10 "$toString": "$storeNumber" 11 }, "/", 12 { 13 "$toString": "$saleDate" 14 }, "/", 15 "$partId", "/" 16 ] 17 }, 18 "format": { 19 "name": "json.gz", 20 "maxFileSize": "200MiB" 21 } 22 } 23 } 24 }
$out은 154 MiB의 데이터를 압축된 JSON 파일로 작성하며, 각 파일에는 동일한 storeNumber
, saleDate
, partId
값을 가진 모든 문서가 포함됩니다. 각 파일의 이름을 지정하기 위해$out 은 다음을 결합합니다.
상수 문자열 값
big-box-store/
,storeNumber
필드에 있는 고유한 스토어 번호의 문자열 값,빗금(
/
),saleDate
필드에 있는 날짜의 문자열 값,빗금(
/
),partId
필드에 있는 부품 ID의 문자열 값,빗금(
/
).
파일 이름 만들기
다음 예는 $out 단계에 도달한 문서의 동일하거나 다른 데이터 유형의 필드 또는 상수 문자열에서 파일명을 동적으로 생성하는 $out 구문을 보여줍니다.
간단한 문자열 예시
예시
Azure Storage 계정 mystorageaccount
및 컨테이너 my-container
에 압축된 BSON 파일로 1 GiB의 데이터를 작성하려고 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "filename": "big_box_store/", 7 "format": { 8 "name": "bson.gz" 9 } 10 } 11 } 12 }
azure.region
는 생략되므로 Atlas Data Federation은 스토리지 구성에서 my-container
라는 컨테이너가 호스팅되는 리전을 결정합니다. $out은 압축된 BSON 파일 5개를 작성합니다.
$out 이
big_box_store/1.bson.gz
라는 이름을 지정하는 파일에 대한 데이터의 처음 200 MiB입니다.azure.filename
의 값은 각 파일 이름에서 상수 역할을 합니다. 이 값은 문서 필드 또는 값에 종속되지 않습니다.azure.filename
은(는) 구분 기호로 끝나므로 Atlas Data Federation은 상수 뒤에 카운터를 추가합니다.구분 기호로 끝나지 않았다면 Atlas Data Federation은 상수와 카운터 사이에
big_box_store.1.bson.gz
처럼.
을(를) 추가했을 것입니다.azure.format.maxFileSize
를 사용하여 최대 파일 크기를 변경하지 않았으므로 Atlas Data Federation은 기본값인 200MiB를 사용합니다.
두 번째 200 MiB의 데이터를 $out 이
big_box_store/2.bson.gz
라는 이름의 새 파일에 추가합니다.$out 이
big_box_store/3.bson.gz
부터big_box_store/5.bson.gz
까지 이름을 지정하는 파일이 세 개 더 있습니다.
문서의 단일 필드
예시
90MiB의 데이터를 my-container
라는 Azure Blob 스토리지 컨테이너의 JSON 파일에 쓰려고 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "region": "eastus2", 7 "filename": {"$toString": "$saleDate"}, 8 "format": { 9 "name": "json", 10 "maxFileSize": "100MiB" 11 } 12 } 13 } 14 }
$out은 90 MiB의 데이터를 컨테이너의 루트에 JSON 파일로 작성합니다. 각 JSON 파일에는 동일한 saleDate
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 saleDate
값을 문자열로 변환하여 각 파일에 이름을 지정합니다.
문서의 여러 필드
예시
Azure Blob Storage 컨테이너 my-container
에 BSON 파일로 176 MiB의 데이터를 작성하려고 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "region": "eastus2", 7 "filename": { 8 "$concat": [ 9 "persons/", 10 "$name", "/", 11 "$uniqueId", "/" 12 ] 13 }, 14 "format": { 15 "name": "bson", 16 "maxFileSize": "200MiB" 17 } 18 } 19 } 20 }
$out은 176MiB의 데이터를 BSON 파일에 씁니다. 각 파일의 이름을 지정하기 위해 $out은 다음을 결합합니다.
상수 문자열
persons/
및 문서에서:name
필드의 문자열 값,빗금(
/
),uniqueId
필드의 문자열 값 및빗금(
/
).
각 BSON 파일에는 동일한 name
및 uniqueId
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 name
및 uniqueId
값을 사용하여 각 파일의 이름을 지정합니다.
문서의 여러 유형의 필드
예시
Azure Blob Storage 컨테이너 my-container
에 압축된 JSON 파일로 154 MiB의 데이터를 작성하려고 합니다.
다음 $out 구문을 가정해 보겠습니다.
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "region": "eastus2", 7 "filename": { 8 "$concat": [ 9 "big-box-store/", 10 { 11 "$toString": "$storeNumber" 12 }, "/", 13 { 14 "$toString": "$saleDate" 15 }, "/", 16 "$partId", "/" 17 ] 18 }, 19 "format": { 20 "name": "json.gz", 21 "maxFileSize": "200MiB" 22 } 23 } 24 } 25 }
$out은 154 MiB의 데이터를 압축된 JSON 파일로 작성하며, 각 파일에는 동일한 storeNumber
, saleDate
, partId
값을 가진 모든 문서가 포함됩니다. 각 파일의 이름을 지정하기 위해$out 은 다음을 결합합니다.
상수 문자열 값
big-box-store/
,storeNumber
필드에 있는 고유한 스토어 번호의 문자열 값,빗금(
/
),saleDate
필드에 있는 날짜의 문자열 값,빗금(
/
),partId
필드에 있는 부품 ID의 문자열 값,빗금(
/
).
파일 이름 만들기
다음 예는 $out 단계에 도달한 문서의 동일하거나 다른 데이터 유형의 필드 또는 상수 문자열에서 파일명을 동적으로 생성하는 $out 구문을 보여줍니다.
간단한 문자열 예시
예시
my-gcs-bucket
이라는 Google Cloud Storage 버킷에 1 GiB의 데이터를 압축 BSON 파일로 쓰기 (write) 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "filename": "big_box_store/", 6 "format": { 7 "name": "bson.gz" 8 } 9 } 10 } 11 }
gcs.region
이 생략되었으므로 Atlas Data Federation은 스토리지 구성에서 이름이 my-gcs-bucket
인 버킷이 호스팅되는 리전을 결정합니다. $out은 압축된 BSON 파일 5개를 작성합니다.
$out 이
big_box_store/1.bson.gz
라는 이름을 지정하는 파일에 대한 데이터의 처음 200 MiB입니다.gcs.filename
의 값은 각 파일 이름에서 상수 역할을 합니다. 이 값은 문서 필드 또는 값에 종속되지 않습니다.gcs.filename
은(는) 구분 기호로 끝나므로 Atlas Data Federation은 상수 뒤에 카운터를 추가합니다.구분 기호로 끝나지 않았다면 Atlas Data Federation은 상수와 카운터 사이에
big_box_store.1.bson.gz
처럼.
을(를) 추가했을 것입니다.gcs.format.maxFileSize
를 사용하여 최대 파일 크기를 변경하지 않았으므로 Atlas Data Federation은 기본값인 200MiB를 사용합니다.
두 번째 200 MiB의 데이터를 $out 이
big_box_store/2.bson.gz
라는 이름의 새 파일에 추가합니다.$out 이
big_box_store/3.bson.gz
부터big_box_store/5.bson.gz
까지 이름을 지정하는 파일이 세 개 더 있습니다.
문서의 단일 필드
예시
JSON 파일에 90 MiB의 데이터를 my-gcs-bucket
이라는 Google Cloud Storage 버킷에 쓰기 (write) 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "region": "us-central1", 6 "filename": {"$toString": "$saleDate"}, 7 "format": { 8 "name": "json", 9 "maxFileSize": "100MiB" 10 } 11 } 12 } 13 }
$out은 90MB의 데이터를 버킷의 루트에 있는 JSON 파일에 씁니다. 각 JSON 파일에는 동일한 saleDate
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 saleDate
값을 문자열로 변환하여 각 파일에 이름을 지정합니다.
문서의 여러 필드
예시
이름이 my-gcs-bucket
인 Google Cloud Storage 버킷에 176 MiB의 데이터를 BSON 파일로 쓰기 (write) 합니다.
다음 $out 구문을 사용합니다:
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "region": "us-central1", 6 "filename": { 7 "$concat": [ 8 "persons/", 9 "$name", "/", 10 "$uniqueId", "/" 11 ] 12 }, 13 "format": { 14 "name": "bson", 15 "maxFileSize": "200MiB" 16 } 17 } 18 } 19 }
$out은 176MiB의 데이터를 BSON 파일에 씁니다. 각 파일의 이름을 지정하기 위해 $out은 다음을 결합합니다.
상수 문자열
persons/
및 문서에서:name
필드의 문자열 값,빗금(
/
),uniqueId
필드의 문자열 값 및빗금(
/
).
각 BSON 파일에는 동일한 name
및 uniqueId
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 name
및 uniqueId
값을 사용하여 각 파일의 이름을 지정합니다.
문서의 여러 유형의 필드
예시
이름이 my-gcs-bucket
인 Google Cloud Storage 버킷에 154 MiB의 데이터를 압축된 JSON 파일로 쓰기 (write) 합니다.
다음 $out 구문을 가정해 보겠습니다.
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "region": "us-central1", 6 "filename": { 7 "$concat": [ 8 "big-box-store/", 9 { 10 "$toString": "$storeNumber" 11 }, "/", 12 { 13 "$toString": "$saleDate" 14 }, "/", 15 "$partId", "/" 16 ] 17 }, 18 "format": { 19 "name": "json.gz", 20 "maxFileSize": "200MiB" 21 } 22 } 23 } 24 }
$out은 154 MiB의 데이터를 압축된 JSON 파일로 작성하며, 각 파일에는 동일한 storeNumber
, saleDate
, partId
값을 가진 모든 문서가 포함됩니다. 각 파일의 이름을 지정하기 위해$out 은 다음을 결합합니다.
상수 문자열 값
big-box-store/
,storeNumber
필드에 있는 고유한 스토어 번호의 문자열 값,빗금(
/
),saleDate
필드에 있는 날짜의 문자열 값,빗금(
/
),partId
필드에 있는 부품 ID의 문자열 값,빗금(
/
).
백그라운드에서 쿼리 실행
다음 예제는 백그라운드에서 $out 단계로 끝나는 집계 파이프라인을 실행하기 위한 $out 구문을 보여줍니다.
예시
db.mySampleData.aggregate( [ { "$out": { "s3": { "bucket": "my-s3-bucket", "filename": { "$toString": "$saleDate" } "format": { "name": "json" } } } } ], { "background" : true } )
$out은 백그라운드에서 버킷의 루트에 있는 JSON 파일에 씁니다. 각 JSON 파일에는 동일한 saleDate
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 saleDate
값을 문자열로 변환하여 각 파일에 이름을 지정합니다.
예시
db.mySampleData.aggregate( [ { "$out": { "azure": { "serviceURL": "http://mystorageaccount.blob.core.windows.net/", "container": "my-container", "filename": {"$toString": "$saleDate"}, "format": { "name": "json" } } } } ], { "background" : true } )
$out은 백그라운드에서 Azure Blob 스토리지 컨테이너의 루트에 있는 JSON 파일에 씁니다. 각 JSON 파일에는 동일한 saleDate
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 saleDate
값을 문자열로 변환하여 각 파일에 이름을 지정합니다.
예시
db.mySampleData.aggregate( [ { "$out": { "gcs": { "bucket": "my-gcs-bucket", "filename": { "$toString": "$saleDate" } "format": { "name": "json" } } } } ], { "background" : true } )
$out은 백그라운드에서 버킷의 루트에 있는 JSON 파일에 씁니다. 각 JSON 파일에는 동일한 saleDate
값을 가진 모든 문서가 포함되어 있습니다. $out은 문서의 saleDate
값을 문자열로 변환하여 각 파일에 이름을 지정합니다.
예시
db.mySampleData.aggregate( [ { "$out": { "atlas": { "clusterName": "myTestCluster", "db": "sampleDB", "coll": "mySampleData" } } } ], { background: true } )
$out은 백그라운드에서 Atlas 클러스터 myTestCluster
에 있는 sampleDB.mySampleData
컬렉션에 작성합니다.
제한 사항
문자열 데이터 유형
Atlas Data Federation은 파일 이름을 구문 분석할 때 빈 문자열(""
)을 null
값으로 해석합니다. Atlas Data Federation 에서 구문 분석 가능한 파일 이름을 생성하려면 빈 null
값으로 $convert 를 사용하여 값을 가질 수 있는 필드 string onNull
참조를 래핑합니다.
예시
이 예시에서는 필드 값에서 파일 이름을 만들 때 year
필드에서 null 값을 처리하는 방법을 보여줍니다.
1 { 2 "$out": { 3 "s3": { 4 "bucket": "my-s3-bucket", 5 "region": "us-east-1", 6 "filename": { 7 "$concat": [ 8 "big-box-store/", 9 { 10 "$convert": { 11 "input": "$year", 12 "to": "string", 13 "onNull": "" 14 } 15 }, "/" 16 ] 17 }, 18 "format": { 19 "name": "json.gz", 20 "maxFileSize": "200MiB" 21 } 22 } 23 } 24 }
고유 필드 수
CSV, TSV 또는 Parquet 파일 형식에 쓰는 경우, Atlas Data Federation은 32,000개 이상의 고유 필드를 지원하지 않습니다.
CSV 및 TSV 파일 형식
CSV 또는 TSV 형식으로 작성하는 경우, Atlas Data Federation은 문서에서 다음 데이터 유형을 지원하지 않습니다:
배열
DB 포인터
JavaScript
범위가 있는 자바스크립트 코드
최소 또는 최대 키 데이터 유형
CSV 파일에서 Atlas Data Federation은 점(.
) 표기법을 사용하여 중첩된 문서를 나타냅니다. 예를 들어 Atlas Data Federation은 CSV 파일에 { x: { a: 1, b: 2 } }
을(를) 다음과 같이 씁니다.
x.a,x.b 1,2
Atlas Data Federation은(는) 모든 다른 데이터 유형을 문자열로 표현합니다. 따라서 CSV 파일에서 다시 읽는 MongoDB의 데이터 유형은 데이터 유형이 작성된 원본 BSON 문서의 데이터 유형과 동일하지 않을 수 있습니다.
Parquet 파일 형식
Parquet의 경우, Parquet은 null 또는 정의되지 않은 값과 누락된 값을 구분하지 않기 때문에, Atlas Data Federation은 null 또는 정의되지 않은 값이 있는 필드를 누락된 것으로 다시 읽습니다. Atlas Data Federation은 모든 데이터 유형을 지원하지만, JavaScript, 정규식 등과 같이 Parquet에 직접적으로 대응하는 데이터 유형이 없는 BSON 데이터 유형에 대해서는 다음과 같이 대응합니다:
MongoDB가 아닌 도구를 사용하여 결과 Parquet 파일을 다시 읽을 수 있는 표현을 선택합니다.
Parquet 파일의 키/값 메타데이터에 MongoDB 스키마를 저장하여, Atlas Data Federation이 Parquet 파일을 다시 읽을 때 올바른 데이터 유형으로 원본 BSON 문서를 재구성할 수 있도록 합니다.
예시
다음 BSON 문서를 가정해 보겠습니다.
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers" ["345-6789"] "clientInfo": { "name": "Jordan" } }
앞선 BSON 문서를 $out을 사용하여 S3에 Parquet 형식으로 작성하면 BSON 문서의 Parquet 파일 스키마는 다음과 유사하게 보일 것입니다.
message root { optional group clientId { optional int32 int; optional binary string; (STRING) } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
S3의 Parquet 데이터는 다음과 유사합니다.
1 clientId: 2 .int = 102 3 phoneNumbers: 4 .list: 5 ..element = "123-4567" 6 .list: 7 ..element = "234-5678" 8 clientInfo: 9 .name = "Taylor" 10 .occupation = "teacher" 11 12 clientId: 13 .string = "237" 14 phoneNumbers: 15 .list: 16 ..element = "345-6789" 17 clientInfo: 18 .name = "Jordan"
앞의 예는 Atlas Data Federation이 복잡한 데이터 유형을 처리하는 방법을 보여줍니다:
Atlas Data Federation은 모든 수준의 문서를 Parquet 그룹에 매핑합니다.
Atlas Data Federation은
LIST
논리적 유형과 필수 3단계 목록 또는 요소 구조를 사용하여 배열을 인코딩합니다. 자세히 알아보려면 목록을 참조하세요.Atlas Data Federation은 Parquet이 폴리모픽 열을 지원하지 않기 때문에 폴리모픽 BSON 필드를 여러 단일 타입의 열 그룹으로 매핑합니다. Atlas Data Federation은 해당 BSON 필드의 이름을 그룹 이름으로 사용합니다. 앞의 예시에서는 Atlas Data Federation이
clientId
라는 폴리모픽 필드를 위해clientId
라는 이름의 Parquet 그룹을 생성하며, 두 자식은 BSON 타입인int
와string
의 이름을 따릅니다.
문자열 데이터 유형
Atlas Data Federation은 파일 이름을 구문 분석할 때 빈 문자열(""
)을 null
값으로 해석합니다. Atlas Data Federation 에서 구문 분석 가능한 파일 이름을 생성하려면 빈 null
값으로 $convert 를 사용하여 값을 가질 수 있는 필드 string onNull
참조를 래핑합니다.
예시
이 예시에서는 필드 값에서 파일 이름을 만들 때 year
필드에서 null 값을 처리하는 방법을 보여줍니다.
1 { 2 "$out": { 3 "azure": { 4 "serviceURL": "http://mystorageaccount.blob.core.windows.net/", 5 "container": "my-container", 6 "region": "eastus2", 7 "filename": { 8 "$concat": [ 9 "big-box-store/", 10 { 11 "$convert": { 12 "input": "$year", 13 "to": "string", 14 "onNull": "" 15 } 16 }, "/" 17 ] 18 }, 19 "format": { 20 "name": "json.gz", 21 "maxFileSize": "200MiB" 22 } 23 } 24 } 25 }
고유 필드 수
CSV, TSV 또는 Parquet 파일 형식에 쓰는 경우, Atlas Data Federation은 32,000개 이상의 고유 필드를 지원하지 않습니다.
CSV 및 TSV 파일 형식
CSV 또는 TSV 형식으로 작성하는 경우, Atlas Data Federation은 문서에서 다음 데이터 유형을 지원하지 않습니다:
배열
DB 포인터
JavaScript
범위가 있는 자바스크립트 코드
최소 또는 최대 키 데이터 유형
CSV 파일에서 Atlas Data Federation은 점(.
) 표기법을 사용하여 중첩된 문서를 나타냅니다. 예를 들어 Atlas Data Federation은 CSV 파일에 { x: { a: 1, b: 2 } }
을(를) 다음과 같이 씁니다.
x.a,x.b 1,2
Atlas Data Federation은(는) 모든 다른 데이터 유형을 문자열로 표현합니다. 따라서 CSV 파일에서 다시 읽는 MongoDB의 데이터 유형은 데이터 유형이 작성된 원본 BSON 문서의 데이터 유형과 동일하지 않을 수 있습니다.
Parquet 파일 형식
Parquet의 경우, Parquet은 null 또는 정의되지 않은 값과 누락된 값을 구분하지 않기 때문에, Atlas Data Federation은 null 또는 정의되지 않은 값이 있는 필드를 누락된 것으로 다시 읽습니다. Atlas Data Federation은 모든 데이터 유형을 지원하지만, JavaScript, 정규식 등과 같이 Parquet에 직접적으로 대응하는 데이터 유형이 없는 BSON 데이터 유형에 대해서는 다음과 같이 대응합니다:
MongoDB가 아닌 도구를 사용하여 결과 Parquet 파일을 다시 읽을 수 있는 표현을 선택합니다.
Parquet 파일의 키/값 메타데이터에 MongoDB 스키마를 저장하여, Atlas Data Federation이 Parquet 파일을 다시 읽을 때 올바른 데이터 유형으로 원본 BSON 문서를 재구성할 수 있도록 합니다.
예시
다음 BSON 문서를 가정해 보겠습니다.
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers" ["345-6789"] "clientInfo": { "name": "Jordan" } }
앞선 BSON 문서를 $out을 사용하여 Azure에 Parquet 형식으로 작성하면 BSON 문서의 Parquet 파일 스키마는 다음과 유사하게 보일 것입니다.
message root { optional group clientId { optional int32 int; optional binary string (STRING); } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
Azure Blob 스토리지의 Parquet 데이터는 다음과 유사합니다.
1 clientId: 2 .int = 102 3 phoneNumbers: 4 .list: 5 ..element = "123-4567" 6 .list: 7 ..element = "234-5678" 8 clientInfo: 9 .name = "Taylor" 10 .occupation = "teacher" 11 12 clientId: 13 .string = "237" 14 phoneNumbers: 15 .list: 16 ..element = "345-6789" 17 clientInfo: 18 .name = "Jordan"
앞의 예는 Atlas Data Federation이 복잡한 데이터 유형을 처리하는 방법을 보여줍니다:
Atlas Data Federation은 모든 수준의 문서를 Parquet 그룹에 매핑합니다.
Atlas Data Federation은
LIST
논리적 유형과 필수 3단계 목록 또는 요소 구조를 사용하여 배열을 인코딩합니다. 자세히 알아보려면 목록을 참조하세요.Atlas Data Federation은 Parquet이 폴리모픽 열을 지원하지 않기 때문에 폴리모픽 BSON 필드를 여러 단일 타입의 열 그룹으로 매핑합니다. Atlas Data Federation은 해당 BSON 필드의 이름을 그룹 이름으로 사용합니다. 앞의 예시에서는 Atlas Data Federation이
clientId
라는 폴리모픽 필드를 위해clientId
라는 이름의 Parquet 그룹을 생성하며, 두 자식은 BSON 타입인int
와string
의 이름을 따릅니다.
문자열 데이터 유형
Atlas Data Federation은 파일 이름을 구문 분석할 때 빈 문자열(""
)을 null
값으로 해석합니다. Atlas Data Federation 에서 구문 분석 가능한 파일 이름을 생성하려면 빈 null
값으로 $convert 를 사용하여 값을 가질 수 있는 필드 string onNull
참조를 래핑합니다.
예시
이 예시에서는 필드 값에서 파일 이름을 만들 때 year
필드에서 null 값을 처리하는 방법을 보여줍니다.
1 { 2 "$out": { 3 "gcs": { 4 "bucket": "my-gcs-bucket", 5 "region": "us-central1", 6 "filename": { 7 "$concat": [ 8 "big-box-store/", 9 { 10 "$convert": { 11 "input": "$year", 12 "to": "string", 13 "onNull": "" 14 } 15 }, "/" 16 ] 17 }, 18 "format": { 19 "name": "json.gz", 20 "maxFileSize": "200MiB" 21 } 22 } 23 } 24 }
고유 필드 수
CSV, TSV 또는 Parquet 파일 형식에 쓰는 경우, Atlas Data Federation은 32,000개 이상의 고유 필드를 지원하지 않습니다.
CSV 및 TSV 파일 형식
CSV 또는 TSV 형식으로 작성하는 경우, Atlas Data Federation은 문서에서 다음 데이터 유형을 지원하지 않습니다:
배열
DB 포인터
JavaScript
범위가 있는 자바스크립트 코드
최소 또는 최대 키 데이터 유형
CSV 파일에서 Atlas Data Federation은 점(.
) 표기법을 사용하여 중첩된 문서를 나타냅니다. 예를 들어 Atlas Data Federation은 CSV 파일에 { x: { a: 1, b: 2 } }
을(를) 다음과 같이 씁니다.
x.a,x.b 1,2
Atlas Data Federation은(는) 모든 다른 데이터 유형을 문자열로 표현합니다. 따라서 CSV 파일에서 다시 읽는 MongoDB의 데이터 유형은 데이터 유형이 작성된 원본 BSON 문서의 데이터 유형과 동일하지 않을 수 있습니다.
Parquet 파일 형식
Parquet의 경우, Parquet은 null 또는 정의되지 않은 값과 누락된 값을 구분하지 않기 때문에, Atlas Data Federation은 null 또는 정의되지 않은 값이 있는 필드를 누락된 것으로 다시 읽습니다. Atlas Data Federation은 모든 데이터 유형을 지원하지만, JavaScript, 정규식 등과 같이 Parquet에 직접적으로 대응하는 데이터 유형이 없는 BSON 데이터 유형에 대해서는 다음과 같이 대응합니다:
MongoDB가 아닌 도구를 사용하여 결과 Parquet 파일을 다시 읽을 수 있는 표현을 선택합니다.
Parquet 파일의 키/값 메타데이터에 MongoDB 스키마를 저장하여, Atlas Data Federation이 Parquet 파일을 다시 읽을 때 올바른 데이터 유형으로 원본 BSON 문서를 재구성할 수 있도록 합니다.
예시
다음 BSON 문서를 가정해 보겠습니다.
{ "clientId": 102, "phoneNumbers": ["123-4567", "234-5678"], "clientInfo": { "name": "Taylor", "occupation": "teacher" } } { "clientId": "237", "phoneNumbers" ["345-6789"] "clientInfo": { "name": "Jordan" } }
$out to GCP 를 사용하여 앞의 BSON문서를 Parquet 형식으로 쓰기 (write) 하는 경우 BSON 문서의 Parquet 파일 스키마 는 다음과 유사하게 보입니다.
message root { optional group clientId { optional int32 int; optional binary string; (STRING) } optional group phoneNumbers (LIST) { repeated group list { optional binary element (STRING); } } optional group clientInfo { optional binary name (STRING); optional binary occupation (STRING); } }
Google Cloud Storage의 Parquet 데이터는 다음과 유사하게 표시됩니다.
1 clientId: 2 .int = 102 3 phoneNumbers: 4 .list: 5 ..element = "123-4567" 6 .list: 7 ..element = "234-5678" 8 clientInfo: 9 .name = "Taylor" 10 .occupation = "teacher" 11 12 clientId: 13 .string = "237" 14 phoneNumbers: 15 .list: 16 ..element = "345-6789" 17 clientInfo: 18 .name = "Jordan"
앞의 예는 Atlas Data Federation이 복잡한 데이터 유형을 처리하는 방법을 보여줍니다:
Atlas Data Federation은 모든 수준의 문서를 Parquet 그룹에 매핑합니다.
Atlas Data Federation은
LIST
논리적 유형과 필수 3단계 목록 또는 요소 구조를 사용하여 배열을 인코딩합니다. 자세히 알아보려면 목록을 참조하세요.Atlas Data Federation은 Parquet이 폴리모픽 열을 지원하지 않기 때문에 폴리모픽 BSON 필드를 여러 단일 타입의 열 그룹으로 매핑합니다. Atlas Data Federation은 해당 BSON 필드의 이름을 그룹 이름으로 사용합니다. 앞의 예시에서는 Atlas Data Federation이
clientId
라는 폴리모픽 필드를 위해clientId
라는 이름의 Parquet 그룹을 생성하며, 두 자식은 BSON 타입인int
와string
의 이름을 따릅니다.
이 섹션은 cloud 서비스 제공자 저장 제품에만 적용됩니다.
오류 출력
Atlas Data Federation은 $out
단계에 들어가고 다음 이유 중 하나로 인해 기록할 수 없는 문서에 대해 아래에 설명된 오류 처리 메커니즘을 사용합니다.
s3.filename
이(가) 문자열 값으로 평가되지 않습니다.s3.filename
은(는) 쓸 수 없는 파일에 대해 평가합니다.s3.format.name
이csv
,tsv
,csv.gz
또는tsv.gz
로 설정되어 있고$out
에 전달된 문서에 지정된 파일 형식에서 지원되지 않는 데이터 유형이 포함되어 있습니다. 지원되지 않는 데이터 유형의 전체 목록은 CSV 및 TSV 파일 형식을 참조하세요.
$out
에서 문서를 처리하는 동안 위의 오류 중 하나가 발생하면 Atlas Data Federation은 s3://<bucket-name>/atlas-data-lake-<correlation-id>/
경로에 있는 다음 세 개의 특수 오류 파일에 기록합니다.
오류 파일 이름 | 설명 |
---|---|
out-error-docs/<i>.json | Atlas Data Federation은 오류가 발생한 문서를 이 파일에 기록합니다. i 은(는) 1 (으)로 시작하여 기록 중인 파일이 maxFileSize 에 도달할 때마다 증가합니다. 이후 모든 추가 문서는 새 파일 out-error-docs/<i+1>.json 에 기록됩니다. |
out-error-index/<i>.json | Atlas Data Federation이 이 파일에 오류 메시지를 씁니다. 각 오류 메시지에는 오류에 대한 설명과 0 으로 시작하고 파일에 오류 메시지가 추가될 때마다 증가하는 인덱스 값 n 이 들어 있습니다. i 는 1 로 시작하고 기록 중인 파일이 maxFileSize 에 도달할 때마다 증가합니다. 그런 다음 추가 오류 메시지가 새 파일 out-error-docs/<i+1>.json 에 기록됩니다. |
out-error-summary.json | Atlas Data Federation은 집계 작업 중에 발생한 각 오류 유형에 대한 단일 요약 문서를 이 파일에 기록합니다. 각 요약 문서에는 오류 유형에 대한 설명과 해당 유형의 오류가 발생한 문서 수가 포함되어 있습니다. |
예시
이 예에서는 연합 데이터베이스 인스턴스에서 $out
를 사용하여 오류 파일을 생성하는 방법을 보여 줍니다.
다음 집계 파이프라인은 analytics.customers
샘플 데이터 세트 컬렉션의 문서에서 고객 생년월일을 내림차순으로 정렬하고 가장 어린 세 고객의 _id
, name
, accounts
필드를 이름이 customer-data
인 S3 버킷의 이름이 youngest-customers.csv
인 파일에 쓰려고 시도합니다.
db.customers.aggregate([ { $sort: { "birthdate" : -1 } }, { $unset: [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { $limit: 3 }, { $out: { "s3": { "bucket": "customer-data", "filename": "youngest-customers", "region":"us-east-2", "format": { "name": "csv" } } } ])
accounts
은 배열 필드이므로 $out
에서 s3.format.name
csv
에 문서를 쓰려고 할 때 오류가 발생합니다. 이러한 오류를 처리하기 위해 Atlas Data Federation은 다음 세 가지 오류 파일에 기록합니다.
다음 출력은
out-error-docs/1.json
파일에 기록된 3개의 문서 중 첫 번째 문서를 보여줍니다.s3://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-docs/1.json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}], } 다음 출력은
out-error-index/1.json
파일에 기록된 세 가지 오류 메시지 중 첫 번째를 보여줍니다.n
필드는 0에서 시작하여 파일에 오류가 기록될 때마다 증가합니다.s3://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-index/1.json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } 다음 출력은
out-error-summary
파일에 기록된 오류 요약 문서를 보여줍니다.count
필드는accounts
배열 필드로 인해$out
에 전달된 문서 중 오류가 발생한 문서 수를 나타냅니다.s3://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
Atlas Data Federation은 $out
단계에 들어가고 다음 이유 중 하나로 인해 기록할 수 없는 문서에 대해 아래에 설명된 오류 처리 메커니즘을 사용합니다.
azure.filename
이(가) 문자열 값으로 평가되지 않습니다.azure.filename
은(는) 쓸 수 없는 파일에 대해 평가합니다.azure.format.name
이csv
,tsv
,csv.gz
또는tsv.gz
로 설정되어 있고$out
에 전달된 문서에 지정된 파일 형식에서 지원되지 않는 데이터 유형이 포함되어 있습니다. 지원되지 않는 데이터 유형의 전체 목록은 CSV 및 TSV 파일 형식을 참조하세요.
$out
에서 문서를 처리하는 동안 위의 오류 중 하나가 발생하면 Atlas Data Federation은 http://<storage-account>.blob.core.windows.net/<container-name>/atlas-data-lake-<correlation-id>/
경로에 있는 다음 세 개의 특수 오류 파일에 기록합니다.
오류 파일 이름 | 설명 |
---|---|
out-error-docs/<i>.json | Atlas Data Federation은 오류가 발생한 문서를 이 파일에 기록합니다.
|
out-error-index/<i>.json | Atlas Data Federation이 이 파일에 오류 메시지를 씁니다. 각 오류 메시지에는 오류에 대한 설명과
|
out-error-summary.json | Atlas Data Federation은 집계 작업 중에 발생한 각 오류 유형에 대한 단일 요약 문서를 이 파일에 기록합니다. 각 요약 문서에는 오류 유형에 대한 설명과 해당 유형의 오류가 발생한 문서 수가 포함되어 있습니다. |
예시
이 예에서는 연합 데이터베이스 인스턴스에서 $out
를 사용하여 오류 파일을 생성하는 방법을 보여 줍니다.
다음 집계 파이프라인은 analytics.customers
샘플 데이터 세트 컬렉션의 문서를 고객 생년월일 내림차순으로 정렬하고 가장 어린 고객 3명의 _id
, name
, accounts
필드를 이름이 customer-data
인 Azure Blob 스토리지 컨테이너의 이름이 youngest-customers.csv
인 파일에 쓰려고 시도합니다.
db.customers.aggregate([ { $sort: { "birthdate" : -1 } }, { $unset: [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { $limit: 3 }, { $out: { "azure": { "serviceURL": "https://myserviceaccount.blob.core.windows.net" "container": "customer-data", "filename": "youngest-customers", "region":"eastus2", "format": { "name": "csv" } } } ])
accounts
은 배열 필드이므로 $out
에서 azure.format.name
csv
에 문서를 쓰려고 할 때 오류가 발생합니다. 이러한 오류를 처리하기 위해 Atlas Data Federation은 다음 세 가지 오류 파일에 기록합니다.
다음 출력은
out-error-docs/1.json
파일에 기록된 3개의 문서 중 첫 번째 문서를 보여줍니다.http://mystorageaccount.blob.core.windows.net/customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-docs/1.json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}], } 다음 출력은
out-error-index/1.json
파일에 기록된 세 가지 오류 메시지 중 첫 번째를 보여줍니다.n
필드는 0에서 시작하여 파일에 오류가 기록될 때마다 증가합니다.http://mystorageaccount.blob.core.windows.net/customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-index/1.json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } 다음 출력은
out-error-summary
파일에 기록된 오류 요약 문서를 보여줍니다.count
필드는accounts
배열 필드로 인해$out
에 전달된 문서 중 오류가 발생한 문서 수를 나타냅니다.http://mystorageaccount.blob.core.windows.net/customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
Atlas Data Federation은 $out
단계에 들어가고 다음 이유 중 하나로 인해 기록할 수 없는 문서에 대해 아래에 설명된 오류 처리 메커니즘을 사용합니다.
gcs.filename
이(가) 문자열 값으로 평가되지 않습니다.gcs.filename
은(는) 쓸 수 없는 파일에 대해 평가합니다.gcs.format.name
이csv
,tsv
,csv.gz
또는tsv.gz
로 설정되어 있고$out
에 전달된 문서에 지정된 파일 형식에서 지원되지 않는 데이터 유형이 포함되어 있습니다. 지원되지 않는 데이터 유형의 전체 목록은 CSV 및 TSV 파일 형식을 참조하세요.
$out
에서 문서를 처리하는 동안 위의 오류 중 하나가 발생하면 Atlas Data Federation은 gcs://<bucket-name>/atlas-data-lake-<correlation-id>/
경로에 있는 다음 세 개의 특수 오류 파일에 기록합니다.
오류 파일 이름 | 설명 |
---|---|
out-error-docs/<i>.json | Atlas Data Federation은 오류가 발생한 문서를 이 파일에 기록합니다. i 은(는) 1 (으)로 시작하여 기록 중인 파일이 maxFileSize 에 도달할 때마다 증가합니다. 이후 모든 추가 문서는 새 파일 out-error-docs/<i+1>.json 에 기록됩니다. |
out-error-index/<i>.json | Atlas Data Federation이 이 파일에 오류 메시지를 씁니다. 각 오류 메시지에는 오류에 대한 설명과 0 으로 시작하고 파일에 오류 메시지가 추가될 때마다 증가하는 인덱스 값 n 이 들어 있습니다. i 는 1 로 시작하고 기록 중인 파일이 maxFileSize 에 도달할 때마다 증가합니다. 그런 다음 추가 오류 메시지가 새 파일 out-error-docs/<i+1>.json 에 기록됩니다. |
out-error-summary.json | Atlas Data Federation은 집계 작업 중에 발생한 각 오류 유형에 대한 단일 요약 문서를 이 파일에 기록합니다. 각 요약 문서에는 오류 유형에 대한 설명과 해당 유형의 오류가 발생한 문서 수가 포함되어 있습니다. |
예시
이 예에서는 연합 데이터베이스 인스턴스에서 $out
를 사용하여 오류 파일을 생성하는 방법을 보여 줍니다.
다음 집계 파이프라인 은 analytics.customers
샘플 데이터 세트 컬렉션 의 문서를 고객 생년월일을 내림차순으로 정렬하고 가장 어린 세 고객의 _id
, name
및 accounts
필드를 Google 파일의 youngest-customers.csv
파일 에 쓰기 (write) 시도합니다. 이름이 customer-data
인 Cloud Storage 버킷입니다.
db.customers.aggregate([ { $sort: { "birthdate" : -1 } }, { $unset: [ "username", "address", "email", "tier_and_details", "birthdate" ] }, { $limit: 3 }, { $out: { "gcs": { "bucket": "customer-data", "filename": "youngest-customers", "region":"us-central1", "format": { "name": "csv" } } } ])
accounts
은 배열 필드이므로 $out
에서 gcs.format.name
csv
에 문서를 쓰려고 할 때 오류가 발생합니다. 이러한 오류를 처리하기 위해 Atlas Data Federation은 다음 세 가지 오류 파일에 기록합니다.
다음 출력은
out-error-docs/1.json
파일에 기록된 3개의 문서 중 첫 번째 문서를 보여줍니다.gcs://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-docs/1.json{ "_id" : {"$oid":"5ca4bbcea2dd94ee58162ba7"}, "name": "Marc Cain", "accounts": [{"$numberInt":"980440"}, {"$numberInt":"626807"}, {"$numberInt":"313907"}, {"$numberInt":"218101"}, {"$numberInt":"157495"}, {"$numberInt":"736396"}], } 다음 출력은
out-error-index/1.json
파일에 기록된 세 가지 오류 메시지 중 첫 번째를 보여줍니다.n
필드는 0에서 시작하여 파일에 오류가 기록될 때마다 증가합니다.gcs://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-index/1.json{ "n" : {"$numberInt": "0"}, "error" : "field accounts is of unsupported type array" } 다음 출력은
out-error-summary
파일에 기록된 오류 요약 문서를 보여줍니다.count
필드는accounts
배열 필드로 인해$out
에 전달된 문서 중 오류가 발생한 문서 수를 나타냅니다.gcs://customer-data/atlas-data-lake-1773b3d5e2a7f3858530daf5/out-error-summary.json{ "errorType": "field accounts is of unsupported type array", "count": {"$numberInt":"3"} }
이 섹션은 cloud 서비스 제공자 저장 에만 적용됩니다.