해당 문서는 Deploy StarRocks with Docker | StarRocks 를 기준으로 번역을 진행하여 작성한 문서입니다. 일부표현이 부자연스러울수 있으며 의견을 주신다면 반영하도록 하겠습니다.
- 사전 요구사항
- Docker
- SQL 클라이언트
- curl
- 용어
- FE
- BE
- StarRocks 실행
- SQL 클라이언트
- 클라이언트 구성
- mysql CLI
- DBeaver
- MySQL Workbench
- 데이터 다운로드
- New York City 충돌 데이터
- 날씨 데이터
- StarRocks에 SQL 클라이언트로 연결
- 테이블 생성
- 데이터베이스 생성
- 두 개의 테이블 생성
- Crashdata
- Weatherdata
- 두 개의 데이터셋 로드
- New York City 충돌 데이터 - Crashes
- 날씨 데이터
- 몇 가지 질문에 답하기
- NYC에서 시간당 충돌 건수는 얼마나 됩니까?
- NYC의 평균 기온은 얼마입니까?
- 가시거리가 나쁠 때 NYC에서 운전하는 것이 안전합니까?
- 빙판길 에서 운전은 어떻습니까?
- 정리
- curl 명령에 대한 참고사항
- 추가 정보
이 문서에서 다루는 내용:
- 단일 Docker 컨테이너에서 StarRocks 실행
- 데이터의 기본 변환을 포함한 두 개의 공개 데이터셋 로드
- SELECT 및 JOIN으로 데이터 분석
- 기본 데이터 변환 (ETL의 T)
사용되는 데이터는 NYC OpenData와 National Centers for Environmental Information에서 제공합니다.
이 두 데이터셋은 매우 크며, 이 튜토리얼은 StarRocks 작업을 경험할 수 있도록 돕기 위한 것이므로 지난 120년간의 데이터를 모두 로드하지는 않습니다. Docker에 4GB RAM이 할당된 머신에서 Docker 이미지를 실행하고 이 데이터를 로드할 수 있습니다. 더 크고 내결함성이 있으며 확장 가능한 배포를 위해서는 별도의 문서가 있으며 추후 제공될 예정입니다.
이 문서에는 많은 정보가 포함되어 있으며, 처음에는 단계별 내용을, 끝에는 기술적 세부사항을 제시합니다. 이는 다음 목적을 순서대로 달성하기 위함입니다:
- 사용자가 StarRocks에 데이터를 로드하고 해당 데이터를 분석할 수 있도록 함
- 로딩 중 데이터 변환의 기본 사항 설명
사전 요구사항
Docker
- Docker에 할당된 4GB RAM
- Docker에 할당된 10GB 여유 디스크 공간
SQL 클라이언트
Docker 환경에서 제공되는 SQL 클라이언트를 사용하거나 시스템에 있는 것을 사용할 수 있습니다. 많은 MySQL 호환 클라이언트가 작동하며, 이 가이드에서는 DBeaver와 MySQL Workbench의 구성을 다룹니다.
curl
curl은 StarRocks에 데이터 로드 작업을 실행하고 데이터셋을 다운로드하는 데 사용됩니다. OS 프롬프트에서 curl 또는 curl.exe를 실행하여 설치되어 있는지 확인하세요. curl이 설치되어 있지 않다면 여기서 curl을 다운로드하세요.
용어
FE
Frontend 노드는 메타데이터 관리, 클라이언트 연결 관리, 쿼리 계획 및 쿼리 스케줄링을 담당합니다. 각 FE는 메모리에 메타데이터의 완전한 사본을 저장하고 유지하여 FE 간에 무차별적인 서비스를 보장합니다.
BE
Backend 노드는 데이터 저장과 쿼리 계획 실행을 모두 담당합니다.
StarRocks 실행
docker run -p 9030:9030 -p 8030:8030 -p 8040:8040 -itd \
--name quickstart starrocks/allin1-ubuntu
SQL 클라이언트
다음 세 가지 클라이언트가 이 튜토리얼에서 테스트되었으며, 하나만 필요합니다:
- mysql CLI: Docker 환경이나 머신에서 실행할 수 있습니다.
- DBeaver는 커뮤니티 버전과 Pro 버전으로 제공됩니다.
- MySQL Workbench
클라이언트 구성
mysql CLI
mysql CLI를 사용하는 가장 쉬운 방법은 StarRocks 컨테이너 starrocks-fe에서 실행하는 것입니다:
docker exec -it quickstart \
mysql -P 9030 -h 127.0.0.1 -u root --prompt="StarRocks > "
mysql 클라이언트를 설치하려면:
- Mac:
brew install mysql로 CLI 설치 - Linux: 배포판의 패키지 관리자를 사용하여
mysql클라이언트 설치. 예:yum install mariadb - Windows: MySQL Community Server를 다운로드하고 제공된 클라이언트를 실행하거나 WSL에서
mysql실행
DBeaver
- DBeaver를 설치하고 연결 추가
- 포트, IP, 사용자 이름을 구성. 연결을 테스트하고 테스트가 성공하면 Finish 클릭
MySQL Workbench
- MySQL Workbench를 설치하고 연결 추가
- 포트, IP, 사용자 이름을 구성한 다음 연결 테스트
- Workbench가 특정 MySQL 버전을 확인하므로 경고가 표시됩니다. 경고를 무시하고 프롬프트가 표시되면 Workbench가 경고 표시를 중지하도록 구성할 수 있습니다.
데이터 다운로드
이 두 데이터셋을 머신에 다운로드하세요. Docker를 실행하는 호스트 머신에 다운로드할 수 있으며, 컨테이너 내부에 다운로드할 필요는 없습니다.
New York City 충돌 데이터
curl -O https://raw.githubusercontent.com/StarRocks/demo/master/documentation-samples/quickstart/datasets/NYPD_Crash_Data.csv
날씨 데이터
curl -O https://raw.githubusercontent.com/StarRocks/demo/master/documentation-samples/quickstart/datasets/72505394728.csv
StarRocks에 SQL 클라이언트로 연결
mysql CLI 이외의 클라이언트를 사용하는 경우 지금 열어주세요.
이 명령은 Docker 컨테이너에서 mysql 명령을 실행합니다:
docker exec -it quickstart \
mysql -P 9030 -h 127.0.0.1 -u root --prompt="StarRocks > "
테이블 생성
데이터베이스 생성
StarRocks > 프롬프트에서 다음 두 줄을 입력하고 각각 Enter를 누르세요:
CREATE DATABASE IF NOT EXISTS quickstart;
USE quickstart;
두 개의 테이블 생성
Crashdata
충돌 데이터셋에는 이보다 훨씬 많은 필드가 포함되어 있지만, 스키마는 날씨가 운전 조건에 미치는 영향에 대한 질문에 답하는 데 유용할 수 있는 필드만 포함하도록 축소되었습니다.
CREATE TABLE IF NOT EXISTS crashdata (
CRASH_DATE DATETIME,
BOROUGH STRING,
ZIP_CODE STRING,
LATITUDE INT,
LONGITUDE INT,
LOCATION STRING,
ON_STREET_NAME STRING,
CROSS_STREET_NAME STRING,
OFF_STREET_NAME STRING,
CONTRIBUTING_FACTOR_VEHICLE_1 STRING,
CONTRIBUTING_FACTOR_VEHICLE_2 STRING,
COLLISION_ID INT,
VEHICLE_TYPE_CODE_1 STRING,
VEHICLE_TYPE_CODE_2 STRING
);
Weatherdata
충돌 데이터와 마찬가지로 날씨 데이터셋에는 더 많은 열(총 125개 열)이 있으며 질문에 답할 것으로 예상되는 열만 데이터베이스에 포함됩니다.
두 개의 데이터셋 로드
StarRocks에 데이터를 로드하는 방법은 여러 가지가 있습니다. 이 튜토리얼에서 가장 간단한 방법은 curl과 StarRocks Stream Load를 사용하는 것입니다.
새 셸을 열어주세요. 이 curl 명령은 mysql 클라이언트가 아닌 운영 체제 프롬프트에서 실행됩니다. 명령은 다운로드한 데이터셋을 참조하므로 파일을 다운로드한 디렉토리에서 실행하세요.
비밀번호를 입력하라는 메시지가 표시됩니다. MySQL root 사용자에게 비밀번호를 할당하지 않았다면 Enter 키만 누르세요.
curl 명령은 복잡해 보이지만 튜토리얼 끝에 자세히 설명되어 있습니다. 지금은 명령을 실행하고 SQL을 실행하여 데이터를 분석한 다음 끝에서 데이터 로딩 세부사항을 읽는 것을 권장합니다.
New York City 충돌 데이터 - Crashes
다음은 위 명령의 출력입니다. 첫 번째 강조 표시된 섹션은 예상되는 결과(OK 및 한 행을 제외한 모든 행 삽입)를 보여줍니다. 한 행은 올바른 열 수를 포함하지 않아 필터링되었습니다.
오류가 있는 경우 출력에서 오류 메시지를 볼 수 있는 URL을 제공합니다. 브라우저에서 이를 열어 무엇이 일어났는지 확인하세요. 오류 메시지를 보려면 세부사항을 확장하세요.
날씨 데이터
충돌 데이터를 로드한 것과 같은 방식으로 날씨 데이터셋을 로드합니다.
몇 가지 질문에 답하기
이러한 쿼리는 SQL 클라이언트에서 실행할 수 있습니다. 모든 쿼리는 quickstart 데이터베이스를 사용합니다.
USE quickstart;
NYC에서 시간당 충돌 건수는 얼마나 됩니까?
SELECT COUNT(*),
date_trunc("hour", crashdata.CRASH_DATE) AS Time
FROM crashdata
GROUP BY Time
ORDER BY Time ASC
LIMIT 200;
출력의 일부입니다. 1월 6일과 7일(비휴일 주의 월요일과 화요일)을 자세히 살펴보고 있습니다. 새해 첫날을 보는 것은 아마도 평소 러시아워 교통의 아침을 나타내지 않을 것입니다.
월요일이나 화요일 아침 러시아워 교통 시간에 약 40건의 사고가 발생하고, 17:00시에도 비슷한 수준으로 보입니다.
NYC의 평균 기온은 얼마입니까?
SELECT avg(HourlyDryBulbTemperature),
date_trunc("hour", weatherdata.DATE) AS Time
FROM weatherdata
GROUP BY Time
ORDER BY Time ASC
LIMIT 100;
출력:
참고로 이것은 2014년 데이터이며, NYC는 최근에 이렇게 춥지 않았습니다.
가시거리가 나쁠 때 NYC에서 운전하는 것이 안전합니까?
가시거리가 나쁠 때(0~1.0마일 사이) 충돌 수를 살펴보겠습니다. 이 질문에 답하려면 DATETIME 열에서 두 테이블 간 JOIN을 사용합니다.
짦은 가시거리에서 한 시간 동안 가장 많은 충돌 수는 129건입니다. 고려해야 할 여러 가지 사항이 있습니다:
- 2014년 2월 3일은 월요일이었습니다
- 오전 8시는 러시아워입니다
- 비가 오고 있었습니다 (그 시간에 0.12인치의 강수량)
- 온도는 32도 F (물의 어는점)입니다
- 가시거리는 0.25마일로 나쁘며, NYC의 정상 가시거리는 10마일입니다
빙판길 에서 운전은 어떻습니까?
수증기는 40도 F에서 얼음으로 승화할 수 있습니다. 이 쿼리는 0도에서 40도 F 사이의 온도를 살펴봅니다.
어는 온도에 대한 결과는 약간 놀라웠습니다. 추운 1월 일요일 아침에 도시에서 그렇게 많은 교통량을 예상하지 못했습니다. weather.com을 빠르게 확인한 결과 그날 많은 충돌과 함께 큰 폭풍이 있었음을 보여주었습니다. 데이터에서 볼 수 있는 것과 정확히 일치합니다.
!
정리
이 문서에서 수행한 작업:
- Docker에서 StarRocks 배포
- New York City에서 제공한 충돌 데이터와 NOAA에서 제공한 날씨 데이터 로드
- SQL JOIN을 사용하여 데이터를 분석하여 낮은 가시거리나 빙판 도로에서 운전하는 것이 나쁜 생각임을 발견
더 배울 것이 있습니다. Stream Load 중에 수행된 데이터 변환을 의도적으로 간략하게 다뤘습니다. 이에 대한 자세한 내용은 아래 curl 명령에 대한 참고사항에 있습니다.
curl 명령에 대한 참고사항
StarRocks Stream Load와 curl은 많은 인수를 사용합니다. 이 튜토리얼에서 사용된 것만 여기에 설명되며, 나머지는 추가 정보 섹션에 링크됩니다.
- -location-trusted
- u root
- T filename
- label:name-num
- column_separator:,
- skip_header:1
- enclose:"
- max_filter_ratio:1
- columns:
- columns 줄
- CSV 파일의 첫 번째 열 내용을
tmp_CRASH_DATE에 할당 - CSV 파일의 두 번째 열 내용을
tmp_CRASH_TIME에 할당 concat_ws()는tmp_CRASH_DATE와tmp_CRASH_TIME을 공백과 함께 연결str_to_date()는 연결된 문자열에서 DATETIME을 생성- 결과 DATETIME을
CRASH_DATE열에 저장
curl이 리디렉션된 URL에 자격 증명을 전달하도록 구성합니다.
StarRocks에 로그인하는 데 사용되는 사용자 이름
T는 전송(transfer)을 의미하며, 전송할 파일 이름입니다.
이 Stream Load 작업과 연결할 레이블입니다. 레이블은 고유해야 하므로 작업을 여러 번 실행하는 경우 숫자를 추가하고 계속 증가시킬 수 있습니다.
단일 ,를 사용하는 파일을 로드하는 경우 위와 같이 설정하고, 다른 구분 기호를 사용하는 경우 여기에 해당 구분 기호를 설정합니다. 일반적인 선택은 \t, ,, |입니다.
일부 CSV 파일에는 모든 열 이름이 나열된 단일 헤더 행이 있고, 일부는 데이터 유형이 포함된 두 번째 줄을 추가합니다. 하나 또는 두 개의 헤더 줄이 있는 경우 skip_header를 1 또는 2로 설정하고, 없는 경우 0으로 설정합니다.
내장된 쉼표가 포함된 문자열을 큰따옴표로 묶는 것이 일반적입니다. 이 튜토리얼에서 사용된 샘플 데이터셋에는 쉼표가 포함된 지리적 위치가 있으므로 enclose 설정이 \"로 설정됩니다. "를 \로 이스케이프하는 것을 잊지 마세요.
데이터에 일부 오류를 허용합니다. 이상적으로는 이것을 0으로 설정하고 오류가 있으면 작업이 실패해야 합니다. 디버깅 중에 모든 행이 실패할 수 있도록 1로 설정됩니다.
CSV 파일 열을 StarRocks 테이블 열에 매핑합니다. CSV 파일에는 테이블의 열보다 훨씬 많은 열이 있음을 알 수 있습니다. 테이블에 포함되지 않은 열은 건너뜁니다.
충돌 데이터셋의 columns: 줄에 데이터 변환이 포함되어 있음도 알 수 있습니다. CSV 파일에서 표준을 준수하지 않는 날짜와 시간을 찾는 것은 매우 일반적입니다. 이것은 충돌의 시간과 날짜에 대한 CSV 데이터를 DATETIME 유형으로 변환하는 논리입니다:
이것은 하나의 데이터 레코드의 시작입니다. 날짜는 MM/DD/YYYY 형식이고 시간은 HH:MI입니다. DATETIME은 일반적으로 YYYY-MM-DD HH:MI:SS이므로 이 데이터를 변환해야 합니다.
08/05/2014,9:10,BRONX,10469,40.8733019,-73.8536375,"(40.8733019, -73.8536375)",
이것은 columns: 파라미터의 시작입니다:
-H "columns:tmp_CRASH_DATE, tmp_CRASH_TIME, CRASH_DATE=str_to_date(concat_ws(' ', tmp_CRASH_DATE, tmp_CRASH_TIME), '%m/%d/%Y %H:%i')
이것은 StarRocks에게 아래와 결과를 도출합니다.
추가 정보
Motor Vehicle Collisions - Crashes 데이터셋은 New York City에서 이 이용 약관 및 개인정보 보호정책에 따라 제공됩니다.
Local Climatological Data(LCD)는 NOAA에서 이 면책 조항 및 이 개인정보 보호정책과 함께 제공됩니다.