S3 데이터에 대해 경로를 정의합니다.
이 페이지의 내용
개요
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 : 2019
month: 01
day: 02
중요
path
에 지정된 정규식 string 을 이스케이프 처리해야 합니다. 예를 예시 정규식 string 에 double 따옴표가 포함된 경우 해당 값을 이스케이프 처리해야 합니다. 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/" } ] } ] } ]
예시 파일 이름에 적용하면 경로는 다음과 같은 컬렉션을 생성합니다.
invoices
purchaseOrders
참고
파일 이름에서 컬렉션을 동적으로 생성하면 Data Federation 보기에서 컬렉션 수가 정확하게 보고되지 않습니다.