첫 테이블과 스키마
첫 테이블과 스키마 (First Table + Schema)
Pinot의 첫 번째 스키마와 테이블을 만들어 데이터 수집을 받을 준비를 하는 페이지예요. 실제 CSV 샘플 데이터를 바탕으로 스키마와 테이블 설정을 작성하고 클러스터에 등록하는 과정을 처음부터 따라 해 볼 수 있어요.
본문
이 페이지를 마치면 알게 되는 것 (Outcome)
이 페이지를 끝까지 읽으면 transcript라는 오프라인 테이블과 Pinot 스키마가 클러스터에 등록되어 데이터를 받을 준비가 돼요.
사전 요구 사항 (Prerequisites)
- 실행 중인 Pinot 클러스터. 로컬 또는 Docker 설치 가이드 참조.
- Docker 사용자: 클러스터가
pinot-demo네트워크에 있어야 해요. - Pinot 버전 확인. 버전 레퍼런스 페이지를 보고
PINOT_VERSION환경 변수를 설정하세요:
export PINOT_VERSION=<your-pinot-version>
단계 (Steps)
1. 스키마 이해하기
Pinot 스키마는 테이블의 모든 칼럼을 정의하고 각 칼럼에 칼럼 타입을 부여해요. 칼럼 타입은 세 가지가 있어요:
| 칼럼 타입 | 설명 |
|---|---|
| Dimension | 데이터를 자르고(slicing) 쪼개는 데(dicing) 필터와 GROUP BY 절에서 사용 |
| Metric | 집계에서 사용됨; 정량적 측정값을 나타냄 |
| DateTime | 각 행과 연관된 타임스탬프를 나타냄 |
모든 테이블은 데이터를 받기 전에 스키마가 있어야 해요. 스키마는 Pinot에게 각 필드를 어떻게 해석하고 인덱싱하고 저장할지 알려줘요.
2. 데이터 디렉터리 생성
mkdir -p /tmp/pinot-quick-start/rawdata
3. 샘플 CSV 데이터 저장
/tmp/pinot-quick-start/rawdata/transcript.csv 파일을 다음 내용으로 만드세요:
studentID,firstName,lastName,gender,subject,score,timestampInEpoch
200,Lucy,Smith,Female,Maths,3.8,1570863600000
200,Lucy,Smith,Female,English,3.5,1571036400000
201,Bob,King,Male,Maths,3.2,1571900400000
202,Nick,Young,Male,Physics,3.6,1572418800000
이 데이터셋에서 studentID, firstName, lastName, gender, subject는 dimension, score는 metric, timestampInEpoch는 datetime 칼럼이에요.
4. 스키마 저장
/tmp/pinot-quick-start/transcript-schema.json 파일을 만드세요:
{
"schemaName": "transcript",
"dimensionFieldSpecs": [
{ "name": "studentID", "dataType": "INT" },
{ "name": "firstName", "dataType": "STRING" },
{ "name": "lastName", "dataType": "STRING" },
{ "name": "gender", "dataType": "STRING" },
{ "name": "subject", "dataType": "STRING" }
],
"metricFieldSpecs": [
{ "name": "score", "dataType": "FLOAT" }
],
"dateTimeFieldSpecs": [{
"name": "timestampInEpoch",
"dataType": "LONG",
"format": "1:MILLISECONDS:EPOCH",
"granularity": "1:MILLISECONDS"
}]
}
5. 테이블 설정 이해하기
테이블 설정(config)은 Pinot에게 런타임에서 테이블을 어떻게 관리할지 알려줘요. 어떤 칼럼을 인덱싱할지, 복제본을 몇 개 유지할지, 어떤 테넌트에 할당할지, 테이블이 OFFLINE(배치)인지 REALTIME(스트리밍)인지 같은 것들이죠. 테이블 설정 하나와 스키마 하나를 짝지어 사용해요.
6. 오프라인 테이블 설정 저장
/tmp/pinot-quick-start/transcript-table-offline.json 파일을 만드세요:
{
"tableName": "transcript",
"segmentsConfig": {
"timeColumnName": "timestampInEpoch",
"timeType": "MILLISECONDS",
"replication": "1",
"schemaName": "transcript"
},
"tableIndexConfig": {
"invertedIndexColumns": [],
"loadMode": "MMAP"
},
"tenants": {
"broker": "DefaultTenant",
"server": "DefaultTenant"
},
"tableType": "OFFLINE",
"metadata": {}
}
7. 스키마와 테이블 설정 업로드
로컬:
bin/pinot-admin.sh AddTable \
-tableConfigFile /tmp/pinot-quick-start/transcript-table-offline.json \
-schemaFile /tmp/pinot-quick-start/transcript-schema.json \
-exec
Docker:
docker run --rm -ti \
--network=pinot-demo \
-v /tmp/pinot-quick-start:/tmp/pinot-quick-start \
--name pinot-table-creation \
apachepinot/pinot:${PINOT_VERSION} AddTable \
-schemaFile /tmp/pinot-quick-start/transcript-schema.json \
-tableConfigFile /tmp/pinot-quick-start/transcript-table-offline.json \
-controllerHost pinot-controller \
-controllerPort 9000 \
-exec
💡 설정 중 다른 이름을 사용했다면
pinot-controller를 실제 Pinot controller 컨테이너 이름으로 바꾸세요.
확인 (Verify)
- http://localhost:9000에서 Pinot Data Explorer를 엽니다.
- Tables 탭으로 이동합니다.
transcript_OFFLINE이 나열된 것을 확인합니다.
테이블이 나타나면 스키마와 테이블 설정이 성공적으로 등록된 거예요.
다음 단계 (Next step)
이제 빈 테이블이 생겼어요. CSV 데이터를 transcript 테이블로 가져오려면 첫 배치 수집으로 계속 진행하세요.