Docs Menu
Docs Home
/
MongoDB 매뉴얼
/ /

Time Series 컬렉션으로 데이터 마이그레이션

이 페이지의 내용

  • 이 작업에 대하여
  • 시작하기 전에
  • 단계
  • 선택 사항. 메타데이터 필드를 만듭니다.
  • Time Series 컬렉션을 생성하고 데이터를 삽입합니다.
  • 다음 단계

이 페이지에서는 집계 파이프라인을 사용하여 Time Series 컬렉션으로 데이터를 마이그레이션하는 방법을 설명합니다. 또는 MongoDB Relational Migrator를 사용하여 Time Series 컬렉션으로 데이터를 마이그레이션 하는 방법을 알아보려면 MongoDB Relational Migrator를 사용한 Time Series 컬렉션 구성을 참조하세요.

MongoDB 버전 7.0부터는 $out 집계 단계를 사용하여 기존 컬렉션 의 데이터를 Time Series 컬렉션으로 마이그레이션 할 수 있습니다. 컬렉션에 시간 간격에 따라 비교하려는 데이터를 저장하는 경우 성능 및 저장 효율성을 개선하기 위해 Time Series 컬렉션을 사용하는 것이 좋습니다. Time Series 컬렉션의 이점에 대한 자세한 내용은 Time Series 컬렉션을 참조하세요.

시간 및 메타데이터 정보를 포함하는 weatherdata 컬렉션을 고려해 보세요.

db.weatherdata.insertOne(
{
_id: ObjectId("5553a998e4b02cf7151190b8"),
st: "x+47600-047900",
ts: ISODate("1984-03-05T13:00:00Z"),
position: {
type: "Point",
coordinates: [ -47.9, 47.6 ]
},
elevation: 9999,
callLetters: "VCSZ",
qualityControlProcess: "V020",
dataSource: "4",
type: "FM-13",
airTemperature: { value: -3.1, quality: "1" },
dewPoint: { value: 999.9, quality : "9" },
pressure: { value: 1015.3, quality: "1" },
wind: {
direction: { angle: 999, quality: "9" },
type: "9",
speed: { rate: 999.9, quality: "9" }
},
visibility: {
distance: { value: 999999, quality : "9" },
variability: { value: "N", quality: "9" }
},
skyCondition: {
ceilingHeight: { value: 99999, quality: "9", determination: "9" },
cavok: "N"
},
sections: [ "AG1" ],
precipitationEstimatedObservation: {
discrepancy: "2",
estimatedWaterDepth: 999
}
}
)
1

컬렉션에 모든 메타데이터가 포함된 특정 필드가 없는 경우 데이터를 변환하여 해당 필드를 정의합니다.

다음 파이프라인 단계에서는 metaData 필드를 추가하고 $project를 사용하여 문서에서 나머지 필드를 포함하거나 제외합니다. 이 예제에서 metaData 필드는 사용자가 만든 Time Series 컬렉션의 metaField가 됩니다.

참고

올바른 필드를 Time Series metaField로 선택하면 스토리지와 쿼리 성능이 모두 최적화됩니다. metaField 선택 및 모범 사례에 대한 자세한 내용은 metaFields를 참조하세요.

{ $addFields: {
metaData: {
st: "$st",
position: "$position",
elevation: "$elevation",
callLetters: "$callLetters",
qualityControlProcess: "$qualityControlProcess",
type: "$type"
}
},
},
{ $project: {
_id: 1,
ts: 1,
metaData: 1,
dataSource: 1,
airTemperature: 1,
dewPoint: 1,
pressure: 1,
wind: 1,
visibility: 1,
skyCondition: 1,
sections: 1,
precipitationEstimatedObservation: 1
}
}
2

아래 예제에서는 다음 작업을 수행합니다.

  • $addFields 집계 단계를 사용하여 weather_data 컬렉션에 metaData 필드를 추가합니다.

  • $out 집계 단계를 timeseries 옵션과 함께 사용하여 mydatabase 데이터베이스에 weathernew Time Series 컬렉션을 생성합니다.

  • weathernew 컬렉션의 metaFieldmetaData 필드로 정의합니다.

  • weathernew 컬렉션의 timeFieldts 필드로 정의합니다.

참고

Time Series 컬렉션의 timeField날짜 유형이어야 합니다.

db.weather_data.aggregate( [
{
$addFields: {
metaData: {
st: "$st",
position: "$position",
elevation: "$elevation",
callLetters: "$callLetters",
qualityControlProcess: "$qualityControlProcess",
type: "$type"
}
},
}, {
$project: {
_id: 1,
ts: 1,
metaData: 1,
dataSource: 1,
airTemperature: 1,
dewPoint: 1,
pressure: 1,
wind: 1,
visibility: 1,
skyCondition: 1,
sections: 1,
precipitationEstimatedObservation: 1
}
}, {
$out: {
db: "mydatabase",
coll: "weathernew",
timeseries: {
timeField: "ts",
metaField: "metaData"
}
}
}
] )

집계 단계 구문은 $out을 참조하세요. time series 옵션에 대한 전체 설명은 time series 필드 참조를 참조하세요.

이 집계 파이프라인을 실행한 후 findOne()을 사용하여 weathernew Time Series 컬렉션의 문서를 볼 수 있습니다.

db.weathernew.findOne()

연산은 다음 문서를 반환합니다.

{
_id: ObjectId("5553a998e4b02cf7151190b8"),
ts: ISODate("1984-03-05T13:00:00Z"),
metaData: {
st: "x+47600-047900",
position: {
type: "Point",
coordinates: [ -47.9, 47.6 ]
},
elevation: 9999,
callLetters: "VCSZ",
qualityControlProcess: "V020",
type: "FM-13"
},
dataSource: "4",
airTemperature: { value: -3.1, quality: "1" },
dewPoint: { value: 999.9, quality: "9" },
pressure: { value: 1015.3, quality: "1" },
wind: {
direction: { angle: 999, quality: "9" },
type: "9",
speed: { rate: 999.9, quality: "9" }
},
visibility: {
distance: { value: 999999, quality: "9" },
variability: { value: "N", quality: "9" }
},
skyCondition: {
ceilingHeight: { value: 99999, quality: "9", determination: "9" },
cavok: "N"
},
sections: [ "AG1" ],
precipitationEstimatedObservation: { discrepancy: "2", estimatedWaterDepth: 999 }
}

원래 컬렉션에 세컨더리 인덱스가 있는 경우 지금 수동으로 다시 생성합니다.

Time Series 컬렉션에 1970-01-01T00:00:00.000Z 이전 또는 2038-01-19T03:14:07.000Z 이후의 timeField 값이 포함되어 있는 경우 MongoDB는 경고를 기록하고 내부 클러스터형 인덱스를 활용하는 일부 쿼리 최적화를 비활성화합니다. 쿼리 성능을 회복하고 로그 경고를 해결하려면 timeField보조 인덱스를 생성하세요.

다음도 참조하세요.

돌아가기

세분성 설정