개요
3 버킷에 있는 문서를 쿼리 할 때 Atlas Data Federation path 값을 사용하면 Data Federation 이 문서 내부의 데이터를 문서 의 파일 이름에 매핑할 수 문서.
path 는 S3 버킷의 파일 이름을 계산된 필드로 구문 분석할 수 있도록 지원합니다. Data Federation 은 구문 분석된 파일 에서 생성된 각 문서 에 계산된 필드를 추가할 수 있습니다. Data Federation 은 계산된 필드 값에 대한 쿼리를 파일 이름이 일치하는 파일로만 대상으로 지정할 수 있습니다. 자세한 내용은 지원되는 구문 분석 함수 및 예제 를 참조하세요.
path
파일 경로의 파티션 속성을 사용하여 파티션 생성도 지원합니다. Data Federation 은 파티션 속성에 정의된 매개 변수에 대한 쿼리를 파일 이름 또는 파티션 접두사에 쿼리 가 포함된 파일로만 지정할 수 있습니다.
예시
S3 버킷에 있는 다음 파일을 고려합니다.
/users/26/1234.json /users/26/5678.json
JSON 문서 1234.json 에는 다음이 포함되어 있습니다.
{ "name": "jane doe", "age": 26, "userID": "1234" }
S3 버킷의 파일에 대한 연합 데이터베이스 인스턴스 구성은 다음 path 을(를) 정의합니다.
"path": "/users/{age int}/{userID string}"
다음은 Data Federation 이 path 정의에서 생성된 파티션에 쿼리 를 매핑하는 방법을 보여줍니다.
db.users.findOne( /users { /40 "age": 26 -----------------> /26 "userID": "1234" ----------> /1234.json } /5678.json )
파티션 속성에 대한 계산된 필드가 문서에 이미 있는 경우 Data Federation은 쿼리를 적절한 파일에 매핑합니다. 계산된 필드가 존재하지 않는 경우 Data Federation은 계산된 필드를 문서에 추가합니다. 예를 들어 age 필드가 1234.json 에 존재하지 않는 경우 Data Federation은 age 필드와 값을 1234.json 에 추가합니다.
지원되는 구문 분석 함수
파일 이름에 단일 구문 분석 함수를 지정할 수 있습니다. | | |
파일 이름에 여러 구문 분석 함수를 지정할 수 있습니다. | | |
파일 이름의 정적 문자열과 함께 구문 분석 함수를 지정할 수 있습니다. | | |
점(예: | | |
파일 경로에 | | |
파일 경로에 | | |
파일 이름 경로를 따라 구문 분석 함수를 지정할 수 있습니다. | | |
파일 이름 경로를 따라 | |
참고
path를 지정할 때:
파티션 속성에 대한 데이터 유형을 지정합니다.
파티션 속성 유형이 구문 분석할 데이터 유형과 일치하는지 확인합니다.
delimiter에 지정된 구분자를 사용합니다.
동일한 유형의 속성을 지정하는 경우 다음 중 하나를 수행하세요.
속성 사이에 상수 구분 기호를 추가합니다.
정규 표현식을 사용하여 검색 패턴 을 설명합니다. 학습 내용은 지원되지 않는 구문 분석 함수를 참조하세요.
파일 이름에서 Null 값 구문 분석
Data Federation은 string 를 제외한 모든 Atlas Data Federation 속성 유형에 대해 파일 경로의 속성 대신 빈 문자열("")을 BSON null 값으로 자동 구문 분석합니다. string 를 사용하면 빈 문자열은 BSON null 값 또는 BSON 빈 문자열 값을 나타낼 수 있습니다. Atlas Data Federation은 string 속성 유형에 대한 BSON 값을 구문 분석하지 않습니다. 이렇게 하면 S3 에서 읽은 문서에 충돌하는 유형의 BSON 값이 추가되는 것을 방지할 수 있습니다.
예시
다음 S3 연합 데이터베이스 인스턴스 저장소를 가정해 보겠습니다.
/records/january/1.json /records/february/1.json /records//1.json For the path ``/records/{month string}/*``, Data Federation does not add any computed fields for the ``month`` attribute to documents generated from the third record in the above store.
참고
S3 에 파일을 쓸 때 모든 Atlas Data Federation 속성 유형에 대한 파일 이름에 BSON null 값을 빈 문자열로 작성합니다.
파일 이름에서 패딩된 숫자 구문 분석
파일 경로에는 선행 0으로 채워진 숫자 값이 포함될 수 있습니다. Data Federation이 int, epoch_millis 및 epoch_secs 와 같은 속성 유형에 대해 패딩된 숫자 값을 올바르게 구문 분석하려면 정규 표현식을 사용하여 값의 자릿수를 지정합니다.
예시
다음 파일이 있는 S3 스토어를 가정해 보겠습니다.
|--users |--001.json |--002.json ...
다음 path 구문은 정규 표현식 을 사용하여 파일 이름의 자릿수를 지정합니다. Data Federation 은 파티션 속성에 해당하는 경로 부분을 식별한 다음 해당 파티션 속성을 int 유형에 매핑합니다.
/users/{user_id int:\\d{3}}
지원되지 않는 구문 분석 함수
동일한 파일 이름에 연속적인 구문 분석 함수를 구분하지 않고 지정하면 일관성 없는 결과가 나올 수 있습니다.
예시
다음 파일이 있는 S3 스토어를 가정해 보겠습니다.
|--food |--icecream |--peanutbutter
이제 food 디렉토리에 있는 파일의 다음 경로를 살펴보겠습니다.
/food/{first string}{second string}/
파일 이름 하위 문자열의 어느 부분이 first 및 second string 속성과 일치해야 하는지 확인할 수 있는 방법이 없습니다. 따라서 Atlas Data Federation 은 모든 항목을 first 와 일치시킵니다.
대신 다음과 유사한 정규식과 함께 속성을 사용하는 것이 좋습니다.
/food/{first string:\\D{3}}{second string:\\D{5}} 앞의 경로는
first가 숫자가 아닌 3 문자와 일치하고second가 다음 5 개의 숫자가 아닌 문자와 일치하도록 지정합니다./food/{first string:[A-Z]{3}}{second string:[a-z]{5}} 앞의 경로는
first에서 대문자로 3 ,second에서 5 소문자로 일치시킵니다.
예시
다음 예제에서는 파일 이름을 계산된 필드로 구문 분석하는 방법을 보여 줍니다.
파일 이름에서 단일 필드 구문 분석
청구서 날짜를 설명하는 파일이 포함된 연합 데이터베이스 인스턴스 저장소 accountingArchive 를 생각해 보세요. 예를 들어, 파일 이름 /invoices/1564671291998.json 에는 UNIX 타임스탬프 1564671291998 에 대한 청구서가 포함되어 있습니다.
다음 databases 객체 는 파일 이름을 UNIX 타임스탬프로 구문 분석하여 invoiceDate 필드 를 생성합니다.
"databases" : [ { "name" : "accounting", "collections" : [ { "name" : "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{invoiceDate epoch_millis}" } ] } ] } ]
Data Federation 은 파일 이름에서 생성된 각 문서 에 계산된 필드 와 값을 추가합니다. 예시 파일 이름에서 생성된 문서에는 invoiceDate: ISODate("2019-08-01T14:54:51Z") 필드 가 포함됩니다. invoiceDate 필드 에 대한 쿼리는 지정된 값과 일치하는 파일만 대상으로 지정할 수 있습니다.
파일 이름에서 여러 필드 구문 분석
파일 이름이 청구서 번호와 청구서 날짜를 설명하는 파일이 포함된 연합 데이터베이스 인스턴스 저장소 accountingArchive 를 가정해 보겠습니다. 예를 들어, 파일 이름 /invoices/MONGO12345-1564671291998.json 에는 UNIX 타임스탬프 1564671291998 에 대한 청구서 MONGODB12345 가 포함되어 있습니다.
다음 databases 객체가 생성됩니다.
파일 이름의 첫 번째 세그먼트를 string 로 구문 분석하여
invoiceNumber필드 를 생성합니다.파일 이름의 두 번째 세그먼트를 UNIX 타임스탬프로 구문 분석하여
invoiceDate필드 입니다.
"databases" : [ { "name": "accounting", "collections" : [ { "name" : "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{invoiceNumber string}-{invoiceDate epoch_millis}" } ] } ] } ]
Data Federation 은 파일 이름에서 생성된 각 문서 에 계산된 필드와 값을 추가합니다. 예시 파일 이름에서 생성된 문서에는 다음 필드가 포함됩니다.
invoiceNumber : "MONGODB12345"invoiceDate : ISODate("2019-08-01T14:54:51Z")
invoiceNumber 및 invoiceDate 필드를 모두 포함하는 쿼리는 지정된 값과 일치하는 파일만 대상으로 지정할 수 있습니다.
정규 표현식을 사용하여 파일 이름에서 필드 구문 분석
파일 이름이 청구서 번호와 청구서 날짜를 설명하는 파일이 포함된 연합 데이터베이스 인스턴스 저장 accountingArchive 를 가정해 보겠습니다. 예를 예시, 파일 이름 /invoices/MONGODB12345-20190102.json 에는 날짜 20190102 에 대한 청구서 MONGODB12345 가 포함되어 있습니다.
다음 databases 객체가 생성됩니다.
파일 이름의 첫 번째 세그먼트를 string로 구문 분석하여 필드
invoiceNumber정규 표현식 을 사용하여 파일 이름 두 번째 세그먼트의 처음 4 자리만 int로 구문 분석하는 필드
year입니다.정규 표현식 을 사용하여 파일 이름 두 번째 세그먼트의 다음 2 자리만 int로 구문 분석하는 필드
month입니다.정규 표현식 을 사용하여 파일 이름 두 번째 세그먼트의 다음 2 자리만 int로 구문 분석하는 필드
day입니다.
"databases" : [ { "name" : "accounting", "collections" : [ { "name" : "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{invoiceNumber string}-{year int:\\d{4}}{month int:\\d{2}}{day int:\\d{2}}" } ] } ] } ]
Data Federation 은 파일 이름에서 생성된 각 문서 에 계산된 필드와 값을 추가합니다. 예시 파일 이름에서 생성된 문서에는 다음 필드가 포함됩니다.
invoiceNumber : "MONGODB12345"year : 2019month: 01day: 02
중요
path에 지정된 정규식 문자열을 이스케이프 처리해야 합니다. 예시 를 들어 정규식 문자열에 큰따옴표가 포함된 경우 해당 값을 이스케이프 처리해야 합니다. Data Federation은 저장 구성의 정규 표현식에 대한 패키지 구문 을 지원합니다.
생성된 모든 필드를 포함하는 쿼리는 지정된 값과 일치하는 파일만 대상으로 지정할 수 있습니다.
파일 이름에서 쿼리 가능 데이터 범위 식별
파일 이름이 파일에 포함된 데이터의 범위를 설명하는 파일이 포함된 연합 데이터베이스 인스턴스 저장소 accountingArchive 를 가정해 보겠습니다. 예를 들어, 파일 이름 /invoices/1546367712000-1549046112000.json 에는 2019-01-01에서 2019-01-02 사이의 기간에 대한 청구서가 포함되어 있으며, 이때 날짜 범위는 유닉스 시간 이후 경과된 시간(밀리초)으로 표시됩니다.
다음 databases 객체 는 최소 시간 범위 를 파일 이름의 첫 번째 세그먼트로 식별하고 최대 시간 범위 를 파일 이름의 두 번째 세그먼트로 식별합니다.
"databases" : [ { "name: "accounting", "collections" : [ { "name: "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{min(invoiceDate) epoch_millis}-{max(invoiceDate) epoch_millis}" } ] } ] } ]
Data Federation 은 "invoiceDate" 필드 에 대한 쿼리 를 받으면 지정된 경로를 사용하여 쿼리 와 일치하는 데이터가 포함된 파일을 식별합니다.
invoiceDate 필드에 대한 쿼리는 min 및 max 날짜를 포함하여 범위가 지정된 값을 캡처하는 파일만 대상으로 지정할 수 있습니다.
중요
예기치 않거나 원치 않는 동작을 방지하려면 최소 및 최대 범위에 지정된 필드 가 파일 에 포함된 모든 문서 에 있어야 합니다. Data Federation 은 기본 데이터가 이 제약 조건을 준수하는지 여부에 대한 유효성 검사 를 수행하지 않습니다 .
파일 이름에서 중첩 필드 식별
Data Federation 은 중첩된 데이터 값이 파일 이름이기도 한 경우 중첩된 데이터 쿼리를 지원합니다. 점 연산자 (예: . path 를 사용하여 저장 구성의 파티션 속성을 문서의 중첩 필드에 매핑합니다.
연합 데이터베이스 인스턴스 저장 accountingArchive 을 고려하세요. 연합 데이터베이스 인스턴스 저장 에는 문서의 중첩 필드 값과 일치하는 이름을 가진 파일이 포함되어 있습니다. 예를 예시 다음과 같습니다.
accountingArchive |--invoices |--January.json |--February.json ...
January.json 파일 에 다음 필드가 있는 문서 가 포함되어 있다고 가정해 보겠습니다.
{ "invoice": { "invoiceNumber" : "MONGODB12345", "year" : 2019, "month": "January", //value matches filename "date": 02 }, "vendor": "MONGODB", ... }
다음 databases 객체 는 month 을 문서 내부의 중첩 필드 로 식별합니다. databases 객체 는 또한 month 값을 문서 가 포함된 파일 의 이름으로 식별합니다.
"databases" : [ { "name" : "accounting", "collections" : [ { "name" : "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{invoice.month string}" } ] } ] } ]
Atlas Data Federation은 January 과 같이 특정 월에 대한 쿼리를 수신하면 지정된 경로를 사용하여 쿼리와 일치하는 데이터가 포함된 파일을 식별합니다.
ObjectId에서 파티션 만들기
파일 경로에 ObjectId 를 지정할 수 있습니다. 파일 이름에 ObjectId 가 포함된 파일의 경우, Atlas Data Federation 은 각 ObjectId 에 대한 파티션을 생성합니다.
다음 연합 데이터베이스 인스턴스 저장소인 accountingArchive 을 고려하세요. 이 데이터 저장소에는 파일 이름에 ObjectId 가 포함된 파일이 포함되어 있습니다.
accountingArchive |--invoices |--507f1f77bcf86cd799439011.json |--507f1f77bcf86cd799439012.json |--507f1f77bcf86cd799439013.json |--507f1f77bcf86cd799439014.json |--507f1f77bcf86cd799439015.json
다음 databases 객체는 ObjectIds에 대한 파티션을 생성합니다.
"databases" : [ { "name" : "accounting", "collections" : [ { "name" : "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{objid objectid}" } ] } ] } ]
또는 연합 데이터베이스 인스턴스 저장 accountingArchive 에 파일 이름에 ObjectIds 범위 가 포함된 파일이 포함되어 있다고 가정합니다. 예를 예시 다음과 같습니다.
accountingArchive |--invoices |--507f1f77bcf86cd799439011-507f1f77bcf86cd799439020.json |--507f1f77bcf86cd799439021-507f1f77bcf86cd799439030.json |--507f1f77bcf86cd799439031-507f1f77bcf86cd799439040.json
다음 databases 객체는 지정된 ObjectIds 범위에 대한 파티션을 생성합니다.
"databases" : [ { "name" : "accounting", "collections" : [ { "name" : "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{min(obj) objectid}-{max(obj) objectid}" } ] } ] } ]
Data Federation 은 ObjectId 에 대한 쿼리 를 받으면 지정된 경로를 사용하여 쿼리 와 일치하는 데이터가 포함된 파일 을 식별합니다.
파일 경로에서 파티션 만들기
파일 이름으로 이어지는 모든 경로에 구문 분석 함수를 지정할 수 있습니다. 각 계산된 필드는 경로에 따른 구문 분석 함수를 기반으로 합니다. Atlas Data Federation은 데이터를 쿼리할 때 각 계산된 필드를 파티션으로 변환합니다. 그런 다음 하위 디렉토리와 동의어인 파티션을 사용하여 파일을 더욱 정확하게 필터링합니다.
다음 디렉토리 구조를 가진 연합 데이터베이스 인스턴스 저장소 accountingArchive를 가정해 보겠습니다.
invoices |--MONGO12345 |--2019 |--01 |--02
다음 databases 객체는 필터링된 파일 몇 개를 사용하여 invoiceNumber, year, month 및 day 파티션을 생성합니다.
"databases" : [ { "name" : "accounting", "collections" : [ { "name" : "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{invoiceNumber string}/{year int}/{month int:\\d{2}}/{day int:\\d{2}}/*" } ] } ] } }
ISODate 에서 파티션 만들기
파일 경로에 ISODate 를 지정할 수 있습니다. 파일 이름에 ISODate 가 포함된 파일의 경우, Atlas Data Federation 은 각 ISODate 에 대한 파티션을 생성합니다.
다음 연합 데이터베이스 인스턴스 저장소인 accountingArchive 을 고려하세요. 이 데이터 저장소에는 파일 이름에 ISODate 가 포함된 파일이 포함되어 있습니다.
accountingArchive |--invoices |--01_02_2022_2301.json |--02_02_2022_2301.json |--03_02_2022_2301.json |--04_02_2022_2301.json |--05_02_2022_2301.json
다음 databases 객체는 ISODate에 대한 파티션을 생성합니다. path 는 날짜가 RFC 3339 형식이 아닌 경우 날짜 형식에 정규식을 사용하는 방법을 보여 줍니다.
"databases" : [ { "name" : "accounting", "collections" : [ { "name" : "invoices", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/creationDate isodate('01_02_2006_1504'):\\d{2}_\\d{2}_\\d{4}_\\d{4}.json" } ] } ] } ]
지원되는 다른 형식에 학습 보려면 파티션 속성 유형 사용을 참조하세요.
파일 경로에서 동적 컬렉션 이름 생성
다음 디렉토리 구조를 가진 연합 데이터베이스 인스턴스 저장소 accountingArchive를 가정해 보겠습니다.
invoices |--SuperSoftware |--UltraSoftware |--MegaSoftware
다음 databases 객체 는 파일 경로에서 동적 컬렉션 이름을 생성합니다.
"databases" : [ { "name" : "invoices", "collections" : [ { "name" : "*", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/invoices/{collectionName()}/" } ] } ] } ]
예제 디렉토리 구조에 적용하면 경로는 다음과 같은 컬렉션을 생성합니다.
슈퍼 소프트웨어
UltraSoftware
메가 소프트웨어
또는 다음 파일이 있는 연합 데이터베이스 인스턴스 저장소 accountingArchive 를 가정해 보겠습니다.
/orders/MONGODB/invoices/January.json /orders/MONGODB/purchaseOrders/January.json /orders/MONGODB/invoices/February.json ...
다음 databases 객체 는 파일 경로에서 동적 컬렉션 이름을 생성합니다.
"databases" : [ { "name" : "invoices", "collections" : [ { "name" : "*", "dataSources" : [ { "storeName" : "accountingArchive", "path" : "/orders/MONGODB/{collectionName()}/{invoiceMonth string}.json/" } ] } ] } ]
예시 파일 이름에 적용하면 경로는 다음과 같은 컬렉션을 생성합니다.
invoicespurchaseOrders
참고
파일 이름에서 컬렉션을 동적으로 생성하면 Data Federation 보기에서 컬렉션 수가 정확하게 보고되지 않습니다.