Pipeline Builder의 지리 공간 자료형과 조인
지리 공간 변환은 좌표, 도형과 공간 관계를 자료형으로 구분하여 처리합니다. Pipeline Builder에 필요한 기능이 없으면 Code Repositories의 지리 공간 처리 경로를 사용할 수 있습니다.
논리 자료형
논리 자료형은 문자열, 숫자나 구조체 같은 기본 자료형에 추가 의미와 제약을 붙인 유형입니다. 예를 들어 Geometry는 GeoJSON을 나타내는 문자열이고 GeoPoint는 위도 및 경도를 가진 구조체입니다.
논리 자료형은 자신의 기본 자료형을 요구하는 표현식에 사용할 수 있습니다. 반대로 일반 문자열을 곧바로 Geometry로 취급할 수는 없습니다. Logical Type Cast로 변환하면 해당 논리 유형의 제약을 검사하고 실패한 값은 null로 처리합니다.
| 유형 | 표현과 조건 |
|---|---|
| GeoPoint | longitude, latitude의 Double 구조체입니다. 경도는 -180~180, 위도는 -90~90을 포함하며 WGS 84/EPSG:4326 좌표를 사용합니다. |
| Geometry | GeoJSON 형식의 문자열입니다. 좌표는 WGS 84/EPSG:4326으로 해석합니다. |
| H3Index | 유효한 H3 셀 인덱스 문자열입니다. |
| LatLonBoundingBox | minLat, minLon, maxLat, maxLon을 가진 경계 구조체입니다. 각 필드는 좌표의 숫자 성분이며, 정상적인 면적 범위는 maxLat > minLat, maxLon > minLon 관계를 가집니다. |
| Ontology GeoPoint | {lat},{lon} 형식의 문자열입니다. 위도 -90~90, 경도 -180~180 범위를 사용합니다. |
| MGRS | 유효한 Military Grid Reference System 좌표 문자열입니다. |
값이 지정된 논리 유형을 가진다는 사실과 임의의 원시 도형이 모든 범위 검사를 통과했다는 사실은 구분합니다. 생성 및 파싱 표현식의 검증 조건도 확인합니다.
좌표와 도형 입력
| 연산 | 동작 |
|---|---|
| Construct GeoPoint column | 위도와 경도 쌍의 범위를 확인하고 GeoPoint를 만듭니다. |
| Create GeoPoint from Coordinate System | x, y와 원천 CRS를 받아 WGS 84로 투영한 뒤 GeoPoint를 만듭니다. EPSG의 여러 좌표계와 모든 UTM 구역 변환을 지원합니다. |
| Parse well-known text | WKT를 Geometry로 바꿉니다. WGS 84가 아니면 원천 CRS 식별자로 변환할 수 있습니다. |
| Normalize Geometry | WGS 84 GeoJSON의 오른손 규칙에 따른 순서, 링 닫힘, 중복 제거와 좌표 차원 일관성을 정리합니다. |
| Extract rows from Shapefile | 원시 shapefile의 각 항목을 geometry와 지정한 속성 열로 파싱합니다. 원천 CRS를 지정할 수 있습니다. |
| Extract rows from GeoJSON | 원시 GeoJSON의 각 항목을 geometry와 지정한 속성 열로 파싱합니다. 원천 CRS를 지정할 수 있습니다. |
GeoPoint와 Geometry 사이의 변환, H3, MGRS, 경계 상자와 Ontology GeoPoint 변환도 사용할 수 있습니다. 실제 실행 방식은 지리 공간 표현식 목록에서 개별 함수별로 확인합니다.
공간 연산
- 도형 비교에는 교집합, 차집합, 대칭 차집합과 열 또는 집계 수준의 합집합이 있습니다.
- 구면 연산에는 두 점 사이의 haversine 또는 대권 거리, 시작점과 거리 및 방위각으로 끝점을 구하는 역연산, 도형의 면적과 중심 및 길이가 있습니다.
- H3 연산은 지정 해상도의 이웃 셀을 구하거나 다각형을 셀로 덮을 수 있습니다.
- 복잡한 모양은 타원, 원, 부채꼴 환형 구간(range fan)과 convex hull 등으로 근사할 수 있습니다.
교차 조인
Geometry intersection join은 양쪽 입력에 Geometry 열이 있어야 합니다. GeoPoint나 Ontology GeoPoint를 그대로 받는 조인은 아닙니다. 도형을 정규화하고 필요하지 않은 null을 명시적으로 제외하는 것이 권장됩니다. 앞선 조인이나 비결정적 계산이 있으면 공간 조인 전에 체크포인트를 두는 방법을 검토합니다.
| 입력 형태 | 지원 규모의 조건 |
|---|---|
| 중간 크기 도형 | 대략 도형당 34개 점까지, 양쪽 각각 최대 100만 행이며 출력 행 수가 약 두 배 늘어나는 정도의 조건입니다. |
| 한쪽이 훨씬 작은 조합 | 한쪽 최대 2억 5천만 행, 다른 쪽 약 1,600행 규모를 지원합니다. |
| 하나의 매우 큰 도형 | 약 4만 점을 가진 도형 하나와 최대 약 50만 행의 조합을 지원합니다. |
도형이 커지거나 출력이 사실상 Cartesian product 수준으로 늘면 안정성이 나빠질 수 있습니다. 그보다 큰 규모에서 간헐적으로 성공하더라도 일반 지원 범위로 사용하지 않습니다.
대안으로 Cross join 후 Geometries have intersection 필터를 적용하면 메모리 사용이 더 안정적일 수 있지만 빌드 시간이 크게 늘 수 있습니다.
교차하지 않는 행 선택
Geometry intersection anti join은 오른쪽 어느 도형과도 교차하지 않는 왼쪽 행을 반환합니다. 배치와 스트리밍에서 지원하며 양쪽에 Geometry 열을 요구합니다. 일반 교차 조인처럼 정규화와 필요한 null 처리 기준을 먼저 적용합니다.
거리 조인
Geometry distance join은 양쪽 Geometry 열, 0보다 큰 거리값과 CRS 문자열을 요구합니다. CRS가 거리 단위를 결정합니다. 예를 들어 epsg:4326을 사용하면 거리는 미터가 아니라 도 단위로 해석합니다.
도형을 정규화하고 필요 없는 null을 제외합니다. 앞선 조인이나 비결정적 연산이 있으면 체크포인트도 검토합니다.
지원 규모의 예시는 도형당 대략 8개 점, 양쪽 각각 최대 100만 행이며 결과가 약 두 배 늘어나는 조건입니다. 결과가 Cross join 수준으로 커지면 안정성이 떨어질 수 있습니다.
거리 버퍼를 만든 뒤 Cross join과 Geometries have intersection 필터를 적용하는 대안은 많은 결과가 생길 때 메모리 면에서 유리할 수 있지만 대부분 빌드 시간이 크게 증가합니다.
KNN 최근접 이웃
Geometry k-nearest neighbors join은 기준 base의 도형마다 neighbors의 점 중 가장 가까운 k개를 찾습니다. k는 정수이며 CRS가 거리 계산과 비교 방식을 정합니다. 결과 행마다 기준 도형과 최근접 GeoPoint의 정보를 결합합니다.
동일 거리의 동률은 임의로 해소하며 결과 행 순서도 정해져 있지 않습니다. 순서가 필요한 소비자는 이를 별도로 구성해야 합니다.
모든 neighbors 점이 실행기와 드라이버 메모리에 들어가야 하는 것이 현재의 필수 조건입니다. 메모리를 제한하기 위해 neighbors 입력에는 GeoPoint 논리 유형만 받습니다. neighbors 분산이나 점이 아닌 도형이 필요하면 Palantir 담당자에게 지원 범위를 확인합니다.
일반적으로 k < 5, neighbors 수십만 행과 base 도형 100만 행 수준을 지원합니다. 양쪽 모두 수십만 행 정도라면 k를 더 크게 하여 수백 개의 최근접 이웃을 구할 수 있습니다. 더 큰 입력이 간헐적으로 성공하는 경우를 일반적인 지원 보장으로 보지 않습니다.
ANN 근사 최근접 이웃
ANN은 정확한 KNN 대신 가까운 후보를 추정하여 속도를 높입니다. 대용량에서 정밀한 최근접 결과보다 처리 시간이 중요하면 검토할 수 있습니다. 정확히 가장 가까운 k개를 요구하는 업무에는 KNN을 사용합니다.
안정성 문제 대응
다음 순서로 처리량과 중간 데이터 크기를 줄이는 방법을 검토합니다.
- 조인 전에 불필요한 열을 제거합니다.
- 필요한 정확도를 유지하는 범위에서 큰 도형을 더 단순하게 표현합니다.
- 드라이버 및 실행기의 메모리가 더 큰 프로필로 수직 확장을 검토합니다.
- 가장 큰 입력을 약 2,500만 행 단위의 묶음으로 나누어 계산한 뒤 별도 빌드에서 Union하는 방식을 검토합니다. 개별 조인의 자료형과 지원 규모 조건은 별도로 충족해야 합니다.
- 양쪽 도형의 교차 관계를 제한하여 결과 행 수를 줄입니다.
지도 미리보기
미리보기 표에서 지원되는 지리 공간 열의 셀들을 선택하고 오른쪽 클릭의 Open Geo Preview를 선택합니다.
새 탭에서 선택한 값이 지도에 표시됩니다.
온톨로지와 지리 시계열 출력
Geometry 열은 온톨로지의 geoshape에 연결할 수 있습니다. 매핑 전에 Normalize geometry를 적용하여 인덱싱의 도형 검증 조건에 맞춥니다.
GeoPoint 구조체는 온톨로지 속성에 그대로 넣지 않고 {lat},{lon} 문자열인 Ontology GeoPoint로 변환합니다. Builder 데이터셋 출력에는 논리 자료형 정보가 유지되므로 하위 Builder 파이프라인에서도 지리 공간 유형을 이어서 사용할 수 있습니다.
지리 시계열 동기화 출력에는 GeoPoint와 Geometry를 매핑하여 Map 같은 하위 애플리케이션에 점과 도형을 표시할 수 있습니다. 모든 지리 시계열 동기화 출력에는 각 행의 관측 위치를 나타내는 GeoPoint 열이 반드시 있어야 합니다.