항공편 센서의 메타데이터와 관측값 분리
Pipeline Builder에서 센서 측정 데이터로 두 출력을 만듭니다. 하나는 센서 객체를 뒷받침하는 데이터셋이며 센서당 한 행을 가집니다. 다른 하나는 각 센서의 모든 관측을 담는 시계열 동기화입니다.
입력 데이터
센서 데이터셋을 파이프라인에 추가한 상태에서 시작합니다. 한 행에는 특정 항공편의 한 시각에 측정한 여러 값이 들어 있습니다.
| 열 | 자료형 | 용도 |
|---|---|---|
| timestamp | Timestamp | 측정 시각 |
| flight_id | String | Flight의 기본 키와 일치하는 항공편 ID |
| heading | Double | 방향 |
| altitude | Double | 고도 |
| speed | Double | 속도 |
| latitude | Double | 위도 |
| longitude | Double | 경도 |
| vertical_speed | Double | 수직 속도 |
| flight_title | String | 사람이 읽을 항공편 제목 |
변환을 설명할 때 사용하는 가상 항공편은 flight_id가 flight-a, flight_title이 Example flight A입니다. 다음 두 시각의 측정값을 사용합니다.
| timestamp | heading | altitude | speed | latitude | longitude | vertical_speed |
|---|---|---|---|---|---|---|
| 2023-01-11T23:00:00Z | 211.0 | 134.0 | 114.0 | 40.78354 | -73.87231 | -320.0 |
| 2023-01-11T23:00:01Z | 211.0 | 155.0 | 135.0 | 40.78354 | -73.87231 | -320.0 |
관측값과 센서 메타데이터 준비
Unpivot
시계열 동기화는 다음 필드를 필요로 합니다.
| 필드 | 자료형과 조건 |
|---|---|
| Series ID | String. TSP가 참조하는 ID와 일치해야 함 |
| Time | Timestamp 또는 Long. Long이면 시간 단위를 설정 |
| Value | Integer, Float, Double 또는 String. String은 범주형이며 시계열마다 고유 값이 최대 10,000개 |
Unpivot에서 heading, altitude, speed, latitude, longitude와 vertical_speed를 선택합니다. 열 이름의 출력은 series_name, 값의 출력은 series_value로 지정합니다. 여섯 입력 열은 모두 Double이므로 출력도 같은 숫자형으로 구성할 수 있습니다.
timestamp, flight_id와 flight_title은 각 관측에 남습니다. 예를 들어 첫 시각의 altitude와 speed는 다음 두 행으로 바뀝니다. 나머지 네 측정값도 각각 한 행이 됩니다.
| series_name | series_value | timestamp | flight_id | flight_title |
|---|---|---|---|---|
| altitude | 134.0 | 2023-01-11T23:00:00Z | flight-a | Example flight A |
| speed | 114.0 | 2023-01-11T23:00:00Z | flight-a | Example flight A |
시계열 ID
Concatenate strings로 series_name, 밑줄 구분자와 flight_id를 결합합니다. 출력 열은 flight_sensor_series_id입니다.
고도 관측에는 altitude_flight-a, 속도 관측에는 speed_flight-a가 들어갑니다. 같은 항공편의 같은 측정 항목은 관측 시각이 달라도 같은 ID를 사용합니다.
Filter에서 series_value가 null이 아닌 행을 남깁니다. timestamp와 flight_id는 유효한 입력이어야 합니다.
단위 메타데이터
입력에 단위가 있으면 그 열을 사용합니다. 단위가 없는 경우 Add data에서 Enter data manually를 선택하여 다음 두 String 열을 가진 데이터셋을 만듭니다. units는 표시할 문자열입니다.
| series_name | units |
|---|---|
| altitude | ft |
| speed | mph |
| latitude | lat |
| longitude | lon |
| vertical_speed | ft/min |
| heading | deg |
관측 데이터가 왼쪽 입력이 되도록 Left join을 만들고 series_name으로 연결합니다. 왼쪽 열은 모두 선택하고 오른쪽에서는 units만 추가합니다. 단위 표는 측정 이름마다 한 행을 가집니다.
예를 들어 altitude의 두 관측에는 ft, speed의 두 관측에는 mph가 붙습니다. 이 조인은 값을 다른 단위로 환산하지 않습니다.
센서마다 내부 보간 방식을 정해야 한다면 같은 방식으로 메타데이터 열을 추가할 수 있습니다. 내부 보간은 인접한 관측 사이의 값을 추정하는 방식이며 Quiver 같은 앱이 센서 속성에서 이 설정을 읽습니다. 이 예제에는 별도 보간 열이 필요하지 않습니다. 허용 값은 보간 설정에서 확인할 수 있습니다.
센서 객체의 기반 데이터셋
단위를 붙인 관측 데이터에서 새 분기를 만듭니다. 이 분기만 센서당 한 행으로 줄입니다.
센서마다 한 행 유지
Drop duplicates에서 flight_sensor_series_id를 기준으로 중복을 제거합니다. altitude_flight-a와 speed_flight-a는 서로 다른 센서입니다. 같은 센서의 flight_id, series_name, units와 flight_title은 일관되어 있어야 합니다. 선택된 행의 timestamp와 series_value는 뒤에서 제거하므로 센서 객체의 대표 측정값으로 사용하지 않습니다.
기본 키와 제목
Hash sha256 변환으로 flight_sensor_series_id를 해시하여 unique_sensor_flight_id 열을 만듭니다. 이 일반 String 속성을 기본 키로 사용하고 TSP 참조 속성과 분리합니다.
Concatenate strings에서 series_name에 Title case를 적용한 값, 공백을 포함한 sensor for 문자열과 flight_title을 결합하여 title을 만듭니다. 가상 예제의 제목은 Altitude sensor for Example flight A와 Speed sensor for Example flight A가 됩니다.
객체 행에 필요한 열만 유지
series_value, timestamp와 flight_title을 제거합니다. flight_id는 Flight와 연결하는 외래 키이므로 남깁니다. TSP는 flight_sensor_series_id를 통해 별도 동기화의 관측값을 찾습니다.
완성된 기반 데이터의 고도 센서 행은 다음과 같습니다.
{
"title": "Altitude sensor for Example flight A",
"unique_sensor_flight_id": "5de61466302fc36383291768c20740c4d55f1c621097ee48c73b3588afdcb65b",
"flight_sensor_series_id": "altitude_flight-a",
"series_name": "altitude",
"flight_id": "flight-a",
"units": "ft"
}
Add output에서 Add dataset을 선택해 이 결과를 저장합니다. 예제 데이터셋 이름은 [Example] Sensors입니다. 이후 변환 스키마를 바꾸면 출력 데이터셋 스키마에도 변경 내용을 반영합니다.
관측값의 시계열 동기화
이 분기는 중복 제거와 열 삭제 이전의 관측 데이터에서 시작합니다. 센서 객체용 분기에서 시작하면 여러 관측과 timestamp, series_value를 이미 잃었으므로 시계열을 만들 수 없습니다.
Select columns로 flight_sensor_series_id, timestamp와 series_value를 남깁니다. altitude와 speed를 포함하여 여섯 측정 항목의 관측이 같은 출력에 들어갑니다.
가상 예제 중 고도와 속도의 관측은 다음과 같습니다.
| flight_sensor_series_id | series_value | timestamp |
|---|---|---|
| altitude_flight-a | 134.0 | 2023-01-11T23:00:00Z |
| altitude_flight-a | 155.0 | 2023-01-11T23:00:01Z |
| speed_flight-a | 114.0 | 2023-01-11T23:00:00Z |
| speed_flight-a | 135.0 | 2023-01-11T23:00:01Z |
오른쪽 출력 패널의 Add에서 Time series sync를 선택합니다.
| 동기화 설정 | 입력 열 |
|---|---|
| Series ID | flight_sensor_series_id |
| Time | timestamp |
| Value | series_value |
동기화 이름을 정하고 파이프라인을 저장 및 빌드합니다. 두 출력은 파이프라인과 같은 폴더에 만들어집니다. 이어서 Flight Sensor 객체 유형에 기반 데이터셋과 동기화를 연결합니다.