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