문서 메뉴
문서 홈
/
MongoDB 아틀라스
/ / /

S3 데이터에 대해 경로를 정의합니다.

이 페이지의 내용

  • 개요
  • 지원되는 구문 분석 함수
  • 파일 이름에서 Null 값 구문 분석
  • 파일 이름에서 패딩된 숫자 구문 분석
  • 지원되지 않는 구문 분석 함수
  • 예제
  • 파일 이름에서 단일 필드 구문 분석
  • 파일 이름에서 여러 필드 구문 분석
  • 정규 표현식을 사용하여 파일 이름에서 필드 구문 분석
  • 파일 이름에서 쿼리 가능 데이터 범위 식별
  • 파일 이름에서 중첩 필드 식별
  • ObjectId에서 파티션 만들기
  • 파일 경로에서 파티션 만들기
  • ISODate에서 파티션 만들기
  • 파일 경로에서 동적 컬렉션 이름 생성

3 버킷에 있는 문서를 쿼리할 때, Atlas Data Federation path 값을 사용하면 Data Federation이 문서 내부의 데이터를 문서의 파일 이름에 매핑할 수 있습니다.

pathS3 버킷의 파일 이름을 계산된 필드로 구문 분석할 수 있도록 지원합니다. 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/to/files/{<fieldA> <data-type>}
파일 이름에 여러 구문 분석 함수를 지정할 수 있습니다.
/path/to/files/{<fieldA> <data-type>}-{<fieldB> <data-type>}
파일 이름의 정적 문자열과 함께 구문 분석 함수를 지정할 수 있습니다.
/path/to/files/prefix-{<fieldA> <data-type>}-suffix
파일 이름 경로를 따라 점(예: .)을 지정할 수 있습니다.
/path/to/files/{<fieldA>.<fieldB> <data-type>}
파일 경로에 ObjectIds 를 지정하여 파티션을 만들 수 있습니다.
/path/to/files/{objid objectid}
파일 경로에 ObjectIds 범위를 지정하여 파티션을 만들 수 있습니다.
/path/to/files/{min(obj) objectid}-{max(obj) objectid}
파일 이름 경로를 따라 구문 분석 함수를 지정할 수 있습니다.
/path/{<fieldA> <data-type>}/{<fieldB> <data-type>}/{<fieldC> <data-type>}/*
파일 이름 경로를 따라 ISODate 에 대한 정규식을 지정할 수 있습니다.
/path/to/files/{<field-name> isodate("<date-format>"):\\<regex>}

참고

path를 지정할 때:

  • 파티션 속성에 대한 데이터 유형을 지정합니다.

  • 파티션 속성 유형이 구문 분석할 데이터 유형과 일치하는지 확인합니다.

  • delimiter에 지정된 구분자를 사용합니다.

동일한 유형의 속성을 지정하는 경우 다음 중 하나를 수행하세요.

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_millisepoch_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}/

파일 이름 하위 문자열의 어느 부분이 firstsecond 문자열 속성과 일치해야 하는지 확인할 수 있는 방법이 없습니다. 따라서 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 객체가 생성됩니다.

  • 파일 이름의 첫 번째 세그먼트를 문자열로 구문 분석하여 필드 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")

invoiceNumberinvoiceDate 필드를 모두 포함하는 쿼리는 지정된 값과 일치하는 파일만 대상으로 지정할 수 있습니다.

파일 이름이 청구서 번호와 청구서 날짜를 설명하는 파일이 포함된 연합 데이터베이스 인스턴스 저장소 accountingArchive 를 가정해 보겠습니다. 예를 들어, 파일 이름 /invoices/MONGODB12345-20190102.json 에는 날짜 20190102 에 대한 청구서 MONGODB12345 가 포함되어 있습니다.

다음 databases 객체가 생성됩니다.

  • 파일 이름의 첫 번째 세그먼트를 문자열로 구문 분석하여 필드 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 들어, 정규식 문자열에 큰따옴표가 포함된 경우 해당 값을 이스케이프 처리해야 합니다. 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 필드에 대한 쿼리는 minmax 날짜를 포함하여 범위가 지정된 값을 캡처하는 파일만 대상으로 지정할 수 있습니다.

중요

예기치 않거나 원치 않는 동작을 방지하려면 최소 및 최대 범위에 지정된 필드가 파일에 포함된 모든 문서에 있어야 합니다. 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 가 포함된 파일의 경우, 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, monthday 파티션을 생성합니다.

"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 가 포함된 파일의 경우, 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 보기에서 컬렉션 수가 정확하게 보고되지 않습니다.

돌아가기

collection을 생성합니다.