Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
Tags
- Redshift
- 제로샷
- 프롬프트 튜닝
- GPT
- 파이썬
- 모험
- FOR
- UDF
- Azure
- 동화책
- Compute
- 검색
- 도커
- Python
- 인자 힌트
- Ai
- 컨텍스트 매니져
- 퓨샷
- 파라미터 힌트
- 반복문
- 인컨텍스트 러닝
- Docker
- 대스크
- 아기동화
- Cognitive Service
- 토끼
- 조건문
- Cognitive Search
- dask
- AI 동화
Archives
- Today
- Total
호랭이 분석가
[Redshift] 위도와 경도를 이용한 거리 계산 사용자 정의 함수 (UDF) 본문
반응형
Amazon Redshift는 PostgreSQL 기반의 클라우드 데이터 웨어하우스 서비스로, 사용자 정의 함수(UDF)를 지원합니다.
이번 포스트에서는 Redshiftdml PL/Python UDF를 이용하여 두 지점의 위도와 경도를 입력받아
그 거리를 계산하는 함수를 소개하려 합니다.
CREATE OR REPLACE FUNCTION my_schema.f_distance_km(latitude1 float8,
longitude1 float8,
latitude2 float8,
longitude2 float8)
RETURNS float8
LANGUAGE plpythonu
IMMUTABLE
AS $$
import math
r = 6365
sin_lat1 = math.sin(latitude1/57.29577951)
sin_lat2 = math.sin(latitude2/57.29577951)
cos_lat1 = math.cos(latitude1/57.29577951)
cos_lat2 = math.cos(latitude2/57.29577951)
cos_lngs = math.cos((longitude1/57.29577951) - (longitude2/57.29577951))
dist_km = r * math.acos((sin_lat1 * sin_lat2) + (cos_lat1 * cos_lat2 * cos_lngs)
return dist_km
$$
;
위 코드의 f_distance_km 함수는 4개의 파라미터를 입력받습니다.
각각 첫 번째 지점의 위도와 경도 그리고 두 번째 지점의 위도와 경도입니다.
함수는 이들을 이용하여 두 지점 사이의 거리를 킬로미터(km) 단위로 계산합니다.
이 함수는 지구를 완벽한 구로 가정하고 위도와 경도를 이용하여
두 지점의 거리를 계산하는 공식을 사용합니다.
r은 지구의 반경을 의미하며, 위도와 경도는 라디안 단위로 변환이 필요합니다.
그래서 57.29577951로 나누어주는데,
180 / pi의 값으로 각도를 라디안으로 변환하는 공식입니다.
다만 이 함수는 지구의 형태를 완벽한 구로 가정하기 때문에
실제와 약간의 차이가 있을 수 있습니다.
이를 보완하기 위한 더 정밀한 계산 방법들도 있지만
대부분의 경우 이 함수로도 충분히 유용한 결과를 얻을 수 있을 것입니다.
SELECT my_schema.f_distance_km(37.7749, -122.4194, 34.0522, -118.2437);
위 예제는 샌프란시스코와 로스앤젤레스 사이의 거리의 계산입니다.
이 함수를 통해 지리적 위치에 따른 데이터 분석에 큰 도움이 될 수 있습니다.
'AWS > Redshift' 카테고리의 다른 글
[Redshift] 사용자 정의 함수 (UDF)로 정규표현식 함수 만들기 (0) | 2022.09.08 |
---|---|
[Redshift] 테이블, 컬럼 상세(Comment) 조회 쿼리 (0) | 2022.09.08 |
SQL Error [42804] : Union types character type and type cannot be matched (0) | 2022.08.01 |
Comments