Foursquare는 OS Places 액세스 방식을 변경했습니다. 이 가이드의 이전 버전에서는 공개 S3 버킷에 있는 날짜별 고정 파일을 쿼리했지만, 이제는 Places Portal과 인증된 Iceberg 카탈로그를 통해 액세스합니다.
자세한 내용은 Foursquare의 OS Places 액세스 문서를 참조하십시오.
시작하기 전에
- Foursquare Places Portal 계정
- OS Places 데이터셋의 Access Data 탭에서 생성한 액세스 토큰
Foursquare 카탈로그에 연결
<YOUR_ACCESS_TOKEN>을 액세스 토큰으로 대체하십시오:
Query
places_os 테이블은 날짜가 고정된 Parquet 릴리스가 아니라 Foursquare’s 현재
게시 릴리스를 반영하므로, 행과 스키마가 시간이 지남에 따라
변경될 수 있습니다. 따라서 ORDER BY 절이 없는 쿼리는 이 가이드에 표시된 응답과 다른
샘플 행을 반환할 수 있습니다.
연결 확인
places_os Iceberg 테이블에서 행 1개를 쿼리합니다:
Query
Response
데이터 탐색
Query
Response
DESCRIBE를 사용하여 테이블 스키마를 확인하세요:
Query
Response
ClickHouse에 데이터 로드
clickhouse-server 또는 ClickHouse Cloud에 테이블을 생성합니다.
딕셔너리로 인코딩된 컬럼과 구체화된 Web Mercator 좌표가 포함된 MergeTree 테이블을 생성합니다:
Query
LowCardinality 데이터 타입을
사용합니다. 이러한 표현 방식은 SELECT 쿼리 성능을 크게
향상시킬 수 있습니다.
두 UInt32 MATERIALIZED 컬럼인 mercator_x와 mercator_y는 위도와
경도를 Web Mercator projection으로 매핑하여,
지도를 타일로 더 쉽게 분할할 수 있도록 합니다:
longitude + 180은 경도 범위를 [-180, 180]에서 [0, 360]으로 이동합니다.- 360으로 나누면 값이 0과 1 사이 범위로 정규화됩니다.
- 최대 32비트 부호 없는 정수인
0xFFFFFFFF를 곱하면 정규화된 값이 32비트 정수의 전체 범위로 스케일링됩니다.
latitude + 90은 위도 범위를 [-90, 90]에서 [0, 180]으로 이동합니다.- 360으로 나눈 뒤
pi를 곱하면 값이 삼각 함수에 사용할 라디안으로 변환됩니다. log(tan(...))은 메르카토르 투영법의 핵심 공식을 적용합니다.0xFFFFFFFF를 곱하면 결과가 32비트 정수의 전체 범위로 스케일링됩니다.
MATERIALIZED를 지정하면 원본 데이터에 컬럼이 없어도
데이터 삽입 시 ClickHouse가 이러한 값을 계산합니다.
테이블은 Z-순서 공간 충전 곡선을 생성하고 공간적 근접성에 따라 데이터를 구성하는 mortonEncode(mercator_x, mercator_y)를 기준으로
정렬됩니다.
minmax 인덱스는 공간 필터링을 더욱 가속합니다:
Query
unresolved_flags를 제외하고,
좌표가 없는 행은 지도에 표시할 수 없으므로 필터링합니다. 널 허용 소스 값은 로컬 테이블에서도 null로 유지됩니다.
데이터 시각화
이 시각화가 생성된 이후 Foursquare의 접근 모델이 변경되었습니다.
기존 대화형 Places 보기는
현재 접근 모델이 도입되기 전에 만들어졌으며, 역사적 참고용으로 연결되어 있지만 더 이상
Places 데이터를 표시하지 않을 수 있습니다. 아래 이미지는 역사적 예시로 유지됩니다.