개요
ClickHouse 시작하기
테이블 생성하기
데이터 세트 추가
pg_clickhouse 설치
pg_clickhouse 연결
password 옵션도 지정할 수 있습니다.
이제 taxi 테이블(table)을 추가합니다. 원격 ClickHouse 데이터베이스의 모든 테이블을 Postgres 스키마로 가져오면 됩니다:
\det+를 사용해 확인하십시오:
\d를 사용하세요:
COUNT() 집계를 포함한 전체
쿼리를 푸시다운하므로, 쿼리는 ClickHouse에서 실행되고 결과로 단일
행만 Postgres에 반환됩니다. 이를 확인하려면 EXPLAIN을 사용하십시오:
데이터 분석
-
평균 팁 금액을 계산해 보겠습니다:
-
승객 수에 따라 평균 비용을 계산합니다:
-
동네별 하루 픽업 건수를 계산합니다:
-
각 이동의 소요 시간을 분 단위로 계산한 다음, 소요 시간별로 결과를 그룹화합니다:
-
각 동네별 픽업 건수를 시간대별로 표시합니다:
-
표시용 time zone을 뉴욕으로 설정한 뒤 LaGuardia 또는 JFK
공항행 이동 기록을 조회합니다:
딕셔너리 생성
LocationID 컬럼은 trips 테이블의 pickup_nyct2010_gid 및
dropoff_nyct2010_gid 컬럼에 매핑됩니다:
| LocationID | Borough | Zone | service_zone |
|---|---|---|---|
| 1 | EWR | Newark Airport | EWR |
| 2 | Queens | Jamaica Bay | Boro Zone |
| 3 | Bronx | Allerton/Pelham Gardens | Boro Zone |
| 4 | Manhattan | Alphabet City | Yellow Zone |
| 5 | Staten Island | Arden Heights | Boro Zone |
-
계속해서 Postgres에서
clickhouse_raw_query함수를 사용해 ClickHouse [딕셔너리]taxi_zone_dictionary를 생성하고, S3의 CSV 파일로부터 딕셔너리를 채우십시오:
LIFETIME을 0으로 설정하면 불필요한
S3 버킷 트래픽을 방지하기 위해 자동 업데이트가 비활성화됩니다.
다른 경우에는 다르게 구성할 수도 있습니다. 자세한 내용은 LIFETIME을 사용한 딕셔너리 데이터
갱신을 참조하십시오.- 이제 이를 가져오십시오:
- 쿼리가 가능한지 확인합니다:
- 좋습니다. 이제
dictGet함수를 사용해 쿼리에서 자치구 이름을 가져오십시오. 이 쿼리는 LaGuardia 또는 JFK 공항에서 끝나는 자치구별 택시 운행 횟수의 합계를 계산합니다:
조인 수행
taxi_zone_dictionary를 trips 테이블과 조인하는 몇 가지 쿼리를 작성해 보겠습니다.
-
먼저 앞의 공항 쿼리와 비슷하게 동작하는 간단한
JOIN부터 시작합니다.
위
JOIN 쿼리의 출력은 앞서 본 dictGet
쿼리와 동일합니다(Unknown 값이 포함되지 않는다는 점만 제외). 내부적으로는
ClickHouse가 실제로 taxi_zone_dictionary 딕셔너리에 대해 dictGet 함수를 호출하지만,
JOIN 구문이 SQL 개발자에게는 더 익숙합니다.-
이 쿼리는 팁 금액이 가장 높은 1000건의 운행에 해당하는 행을 반환한 다음,
각 행을 딕셔너리와 내부 조인합니다:
일반적으로 PostgreSQL과 ClickHouse에서는
SELECT * 사용을 피합니다. 실제로
필요한 컬럼만 조회해야 합니다.