StarRocks 개요 및 구축 방법

StarRocks 개요

StarRocks는 고속, 실시간, 전반적인 MPP(Massively Parallel Processing) 분석 데이터베이스 시스템으로, 현대 데이터 분석 환경에 특화되어 있으며, 밀리초 단위 쿼리 성능과 고병렬 처리 능력을 강조합니다. MySQL 프로토콜을 호환하여 기존 MySQL 클라이언트 도구 및 BI 도구를 활용하여 쿼리와 데이터 분석을 수행할 수 있습니다. StarRocks는 MPP 아키텍처를 기반으로, 전체 벡터 실행 엔진, 열 기반 저장 기술, 지능형 최적화기 등 첨단 기술을 사용하여 데이터의 빠른 로드, 실시간 업데이트 및 복잡한 쿼리의 효율적 처리를 실현합니다.

기업 사용자의 다양한 분석 요구 사항을 충족하며, 실시간 데이터 웨어하우스, OLAP 보고서, 데이터 레크 분석 등 다양한 시나리오에 적용됩니다.

MPP(Massively Parallel Processing)는 작업을 여러 서버와 노드에 병렬로 분산하여 처리하고, 각 노드에서 계산이 완료된 후 결과를 종합하여 최종 결과를 생성하는 기술입니다(Hadoop과 유사).

1. 사용 사례

OLAP 다차원 분석

StarRocks의 MPP 프레임워크와 벡터 실행 엔진을 활용하여 스노우플레이크 모델, 스타 모델, 넓은 테이블 모델 또는 사전 집계 모델을 선택할 수 있습니다. 유연하게 구성 가능한 다차원 분석 보고서에 적합하며, 다음과 같은 비즈니스 시나리오에 사용됩니다:

  • 사용자 행동 분석
  • 사용자 프로파일, 태그 분석, 그룹화
  • 다주제 비즈니스 분석
  • 재무 보고서
  • 시스템 모니터링 분석

실시간 데이터 웨어하우스

Primary-Key 모델을 설계하고 구현하여 실시간 데이터 업데이트와 초단위 쿼리를 가능하게 하며, TP(트랜잭션 처리) 데이터베이스의 변화를 초단위로 동기화하여 실시간 데이터 웨어하우스를 구축할 수 있습니다. 비즈니스 시나리오에는 다음과 같은 사례가 포함됩니다:

  • 이커머스 대규모 프로모션 데이터 분석
  • 물류 산업 운송 분석
  • 금융 산업 성과 분석, 지표 계산, 라이브 품질 분석
  • 광고 투자 분석
  • 관리 드라이브 셀

고병렬 쿼리

StarRocks는 우수한 데이터 분포 특성, 유연한 인덱스 및 물리적 시각화를 통해 사용자 측 분석 시나리오를 해결할 수 있습니다. 비즈니스 시나리오는 다음과 같습니다:

  • 광고주 보고서 분석
  • 소매업 채널 직원 분석
  • SaaS 산업 사용자 분석 보고서
  • 대시보드 다중 페이지 분석

통합 분석

  • 하나의 시스템을 사용하여 다차원 분석, 고병렬 쿼리, 사전 계산, 실시간 분석 쿼리 등 다양한 시나리오를 처리하여 시스템 복잡도와 다중 기술 스택 개발 및 유지보수 비용을 낮춥니다.
  • 데이터 레크와 데이터 웨어하우스를 통합 관리하여, 고병렬성과 실시간성이 높은 비즈니스를 StarRocks에서 분석할 수 있으며, External Catalog 및 외부 테이블을 사용하여 데이터 레크 상의 분석도 가능합니다.

2. StarRocks와 MySQL 비교

StarRocks와 MySQL의 유사점:
  1. 호환성: StarRocks는 MySQL 프로토콜을 지원하여 MySQL 클라이언트를 직접 사용하여 쿼리를 수행할 수 있어 이전 및 사용 장벽을 낮춥니다.
  2. SQL 문법: 기본적으로 MySQL의 SQL 문법을 따르므로 MySQL에 익숙한 사용자는 빠르게 적응할 수 있습니다.

참조 매뉴얼 | StarRocks

StarRocks와 MySQL의 차이점:
  1. 사용 사례: MySQL은 주로 OLTP(온라인 거래 처리) 시나리오에 초점을 맞추고 있으며, StarRocks는 OLAP(온라인 분석 처리) 분야에 특화되어 있으며, 대량의 데이터를 처리하고 실시간 분석에 적합합니다.
  2. 아키텍처 설계: StarRocks는 MPP 아키텍처를 사용하여 분산 컴퓨팅 자원을 최대한 활용하여 대규모 데이터의 병렬 처리를 가능하게 하며, MySQL의 단일 기계 또는 마스터-슬레이브 아키텍처에 비해 대규모 데이터 분석에 더 적합합니다.
  3. 저장 및 최적화: StarRocks는 열 기반 저장과 벡터 실행 엔진을 사용하여 데이터 압축률과 쿼리 속도를 크게 향상시키며, 특히 대량의 데이터 및 저지연 복잡한 쿼리 시나리오에서 우수한 성능을 보입니다.
  4. 데이터 입력 및 업데이트: StarRocks는 실시간 데이터 입력을 지원하여 대량의 데이터를 빠르게 로드하고 기존 데이터를 실시간으로 업데이트할 수 있으며, MySQL은 대량 데이터 배치 처리 및 실시간 분석에서 효율성이 상대적으로 낮습니다.
StarRocks의 장점:
  1. 고성능: 최고의 쿼리 성능과 병렬 처리 능력으로 실시간 비즈니스 보고서, 실시간 데이터 분석 등에 적합합니다.
  2. 사용 편의성: MySQL 프로토콜과 풍부한 생태계를 지원하여 기존 도구와 환경에 쉽게 통합할 수 있습니다.
  3. 확장성: 수평 확장을 지원하여 비즈니스 요구에 따라 계산 및 저장 자원을 동적으로 증감할 수 있습니다.
  4. 실시간성: 실시간 데이터 수집 및 업데이트를 지원하여 실시간 데이터 분석 요구를 충족합니다.
StarRocks의 단점(또는 도전 과제):
  1. 적용 범위: 비록 고도로 최적화되었지만, 강력한 트랜잭션 일관성 보장을 필요로 하는 OLTP 시나리오에서는 전통적인 관계형 데이터베이스에 비해 우월하지 않을 수 있습니다.
  2. 완성도: MySQL과 같은 오랜 시장 경험을 가진 제품에 비해, 신생 분석 데이터베이스인 StarRocks는 커뮤니티 및 기술 지원의 완성도가 계속해서 향상되고 있습니다.
  3. 생태계 구축: MySQL의 방대한 생태계에 비해 특정 플러그인, 제3자 도구 지원 측면에서 여전히 차이가 있을 수 있습니다.

3. 시스템 아키텍처

  1. 프론트엔드(Frontend, FE) 노드
  • 기능: FE 노드는 클라이언트의 모든 상호작용을 처리하며, SQL 분석, 쿼리 최적화, 메타데이터 관리 및 클러스터 조정을 담당합니다.
  • 구성: 여러 FE 노드로 구성되며, 이 중에는 follower 및 observer 역할이 포함되며, 리더 선출 메커니즘을 통해 고가용성을 보장합니다.
  • 기능
  • SQL 쿼리 요청을 수신 및 분석합니다.
  • 효율적인 쿼리 실행 계획을 생성합니다.
  • 전역 메타데이터 정보(테이블 구조, 분할 정보, 노드 상태 등)를 유지 관리합니다.
  • 전체 시스템의 자원 조정 및 작업 배분을 담당합니다.
  1. 백엔드(Backend, BE) 노드
  • 기능: BE 노드는 실제 데이터 저장 및 계산 작업을 담당하며, 쿼리 실행의 핵심 부분입니다.
  • 구성: 여러 BE 노드로 구성된 데이터 저장 및 처리 클러스터이며, 각 노드에는 자체 계산 및 저장 자원이 있습니다.
  • 기능
  • 사용자 데이터를 저장하고 관리하며, 열 기반 저장 및 다단계 인덱스 최적화를 사용합니다.
  • FE 노드에서 내려온 쿼리 작업을 실행하고, 로컬 노드에서 데이터를 병렬로 처리합니다.
  • 데이터의 분산 저장 및 병렬 계산을 지원하여 빠른 데이터 검색 및 집계를 실현합니다.
  1. 브로커

StarRocks에서 외부 HDFS/객체 저장소 등 외부 데이터와의 연결을 위한 중간 서비스로, 임포트 및 익스포트 기능을 보조합니다.

데이터 분포 및 복제
  • StarRocks의 데이터 테이블은 여러 tablet(데이터 분할)로 나뉘며, 이 tablet들은 BE 노드에 균등하게 분포되어 분산된 데이터 저장을 형성합니다.
  • 고가용성 및 내결함성을 위해 StarRocks는 데이터의 다중 복제를 지원하며, 각 tablet은 다른 BE 노드에 여러 사본을 가지고 있습니다.
쿼리 처리 프로세스
  • 클라이언트가 어떤 FE 노드에도 SQL 쿼리를 제출합니다.
  • FE 노드는 SQL 문장을 분석하고 최적의 쿼리 계획을 생성한 후, 실행 계획을 하위 작업으로 분해하여 해당 BE 노드에 전달합니다.
  • 각 BE 노드는 하위 작업을 병렬로 실행하고 결과를 FE 노드에 반환합니다.
  • FE 노드는 각 BE 노드의 결과를 수집하고 필요 시 병합 및 정렬을 수행한 후, 최종 쿼리 결과를 클라이언트에 반환합니다.
클러스터 확장 및 안정성
  • StarRocks는 FE 및 BE 노드 수를 증가시켜 처리 능력과 저장 용량을 선형적으로 확장합니다.
  • 노드 건강 상태를 심장 박동 메커니즘으로 모니터링하고, 자동으로 로드 밸런싱 및 장애 전환을 조정하여 시스템의 안정성과 가용성을 보장합니다.

4. StarRocks 설치

공식 웹사이트 방문: Download StarRocks Free | StarRocks

StarRocks 버전 3.0.9 다운로드:

가상 머신에 업로드: 해제:

tar -xzf starrock_v3.0.9.tar.gz -d /opt

디렉토리로 이동하여 conf/fe.confJVM 크기를 수정하고, 메타데이터 디렉토리를 생성합니다:

cd /opt/starrock_v3.0.9/fe
mkdir metadata

해제된 디렉토리의 be로 이동하여 데이터 저장 디렉토리를 생성합니다:

mkdir storage

FE 배포:

내가 오류가 발생했으며, StarRocksFE 프로세스가 중지되었습니다. 8030 포트가 JAVA 프로세스에 의해 사용되고 있음을 확인했습니다.

# 포트 확인:
netstat -tulpn | grep :9050

StarRocks FE의 8030 포트가 사용 중이므로, fe 파일의 conf/fe.conf 파일에서 8050으로 수정합니다:

metadata_path = /opt/starrock_v3.0.9/fe/metadata
JAVA_HOME = /usr/java/jdk1.8.0_291-amd64
http_port = 8050

수정한 StarRocks 패키지를 다른 두 서버에 배포합니다:

scp -r starrock_v3.0.9 root@xy2:/opt/
scp -r starrock_v3.0.9 root@xy3:/opt/

디렉토리로 이동하여 FE 노드를 시작하고, jps 명령을 사용하여 프로세스를 확인합니다:

cd /opt/starrock_v3.0.9/fe
bin/start_fe.sh --daemon

ip:8050을 사용하여 웹 뷰어를 확인할 수 있습니다.

MySQL로 FE에 연결합니다:

mysql -h xy1 -u root -P 9030

FE 상태를 확인하는 명령어를 사용합니다:

SHOW PROC '/frontends'\G

다른 노드에서 FE를 시작합니다:

bin/start_fe.sh --helper xy1:9010 --daemon

xy1 노드의 MySQL에서 FE 노드를 추가합니다(역할은 FOLLOWER, OBSERVER로 나뉩니다):

추가:
ALTER SYSTEM ADD FOLLOWER "xy2:9010";
ALTER SYSTEM ADD FOLLOWER "xy3:9010";

제거:
alter system drop follower "xy2:9010";
alter system drop observer "xy2:9010";
 
확인:
SHOW PROC '/frontends'\G

BE 배포:

BE로 이동하여 storage(이전에 이미 생성)를 생성합니다:

cd /opt/starrock_v3.0.9/be
mkdir storage

conf/be.conf을 수정합니다(각 노드 모두 필요):

JAVA_HOME = /usr/java/jdk1.8.0_291-amd64
storage_root_path=/opt/starrock_v3.0.9/be/storage
be_http_port = 8070
priority_networks = 192.168.56.101/24

BE를 시작합니다:

# 시작:
cd /opt/starrock_v3.0.9/be
./bin/start_be.sh --daemon
# 중지:
./bin/stop_be.sh --daemon

MySQL 클라이언트를 통해 BE 노드를 추가합니다:

ALTER SYSTEM ADD BACKEND "xy1:9050";
ALTER SYSTEM ADD BACKEND "xy2:9050";
ALTER SYSTEM ADD BACKEND "xy3:9050";

# 실수로 잘못 입력한 경우, 다음 명령어로 삭제할 수 있습니다:
alter system decommission backend "192.168.56.101:9050";

MySQL로 확인합니다:

SHOW PROC '/backends'\G

웹 페이지로 확인합니다:

브로커 배포:

# 브로커 시작 명령어:(구성 완료 후 사용, 각 노드 모두 필요)

cd /opt/starrock_v3.0.9

./apache_hdfs_broker/bin/start_broker.sh --daemon

구성 파일은 /opt/starrock_v3.0.9/apache_hdfs_broker/conf/apache_hdfs_broker.conf에 위치합니다(설치 경로에 따라 다름).

HDFS 클러스터의 구성 파일 hdfs-site.xml을 복사하여 conf 경로에 붙여넣습니다.

StarRocks 브로커 서비스를 시작하려고 할 때 "JAVA_HOME is not set"이라는 오류 메시지가 표시되며, 이는 start_broker.sh 스크립트 실행 시 환경 변수 JAVA_HOME이 Java 설치 디렉토리로 지정되지 않았음을 의미합니다.

해결 방법:

내 Java 설치 경로는 /usr/java/jdk1.8.0_291-amd64이며, .bashrc 파일에 다음 두 줄을 추가하여 JAVA_HOME 환경 변수를 설정할 수 있습니다:

입력:

vim ~/.bashrc

환경 추가:

export JAVA_HOME=/usr/java/jdk1.8.0_291-amd64
export PATH=$JAVA_HOME/bin:$PATH

파일을 저장한 후, 새 설정을 즉시 적용하려면 다음 명령을 실행합니다:

source ~/.bashrc

이제 JAVA_HOME 환경 변수가 설정되었으며, StarRocks 브로커 서비스를 다시 시작할 수 있습니다:

./apache_hdfs_broker/bin/start_broker.sh --daemon

MySQL에 브로커 노드를 클러스터에 추가합니다:

mysql -h xy1 -u root -P 9030

# 브로커1은 설정(후에 브로커를 통해 데이터를 가져올 때 필요), 8000은 apache_hdfs_broker.conf의 포트입니다.

ALTER SYSTEM ADD BROKER broker1 "192.168.56.101:8000";
ALTER SYSTEM ADD BROKER broker1 "192.168.56.102:8000";
ALTER SYSTEM ADD BROKER broker1 "192.168.56.103:8000";

브로커 노드 정보를 확인합니다:

SHOW PROC "/brokers"\G

FE, BE, 브로커 시작 및 확인 명령어:

시작 명령어:

참고: 각 노드 모두 시작 필요

# FE 시작
cd /opt/starrock_v3.0.9/fe
bin/start_fe.sh --daemon

# BE 시작:
cd /opt/starrock_v3.0.9/be
./bin/start_be.sh --daemon

# 브로커 시작 명령어:
cd /opt/starrock_v3.0.9
./apache_hdfs_broker/bin/start_broker.sh --daemon


# 중지:
./bin/stop_be.sh --daemon

# 진입
mysql -h xy1 -u root -P 9030

상태 확인 명령어:
# FE 상태 확인:
SHOW PROC '/frontends'\G

# BE 상태 확인:
SHOW PROC '/backends'\G

# 브로커 상태 확인:
SHOW PROC "/brokers"\G

、사례 공유

Hive에서 StarRocks로 데이터 가져오기:
StarRocks에서 테이블 생성:
CREATE DATABASE IF NOT EXISTS db_df_lawsuits_v;

USE db_df_lawsuits_v;

CREATE TABLE db_df_lawsuits_v.t_lawsuits_rolerelations (
    eid STRING,
    obj_id STRING,
    ename STRING,
    md5 STRING,
    title STRING,
    case_no STRING,
    cause_action STRING,
    type STRING,
    role STRING,
    court STRING,
    trial_result STRING,
    url STRING,
    judgeresult STRING,
    sub_amount DOUBLE,
    related_companies STRING,
    related_relation STRING,
    freezing_info STRING,
    u_tags STRING,
    `date` DATETIME,
    pub_date DATETIME,
    year_date STRING,
    year_pubdate STRING,
    row_update_time DATETIME,
    case_type STRING,
    case_cause STRING,
    case_causes STRING,
    doc_type STRING,
    case_status STRING,
    doc_id STRING,
    relation_details STRING,
    case_relation BIGINT,
    clean_role STRING,
    verdict_type STRING,
    related_case_no STRING,
    initial_court_code STRING,
    court_area_code STRING,
    source STRING,
    create_time DATETIME,
    local_update_time DATETIME,
    local_row_update_time DATETIME
)
DISTRIBUTED BY HASH(eid) BUCKETS 4;

hive-site.xml에서 hive.metastore.uris 매개변수 설정:

<name>hive.metastore.uris</name>
    <value>thrift://xy1:9083</value>

StarRocks에 로그인:

mysql -h xy1 -u root -P 9030

Hive 카탈로그 쿼리 및 임포트:

StarRocks에서 Hive 메타스토어 서비스를 가리키는 외부 카탈로그를 생성하기 위해 다음 SQL 문을 실행합니다.

(카탈로그 기능, 한 시스템 내에서 내부 및 외부 데이터를 동시에 관리하고, 데이터를 임포트하지 않고도 다양한 외부 소스의 데이터를 쉽게 접근 및 쿼리할 수 있습니다.)

CREATE EXTERNAL CATALOG my_hive_catalog
PROPERTIES (
    "type" = "hive",
    "hive.metastore.uris" = "thrift://xy1:9083"
);

  1. 카탈로그 목록 보기: SHOW CATALOGS; 명령을 실행하여 사용 가능한 모든 카탈로그를 확인합니다.
  2. Hive 카탈로그 사용: SET CATALOG 'my_hive_catalog'; 명령을 실행하여 생성한 Hive 카탈로그로 전환합니다.
  3. 데이터베이스 목록 보기: SHOW DATABASES; 명령을 실행하여 Hive 카탈로그의 데이터베이스 목록을 확인합니다.
  4. 테이블 목록 보기: 데이터베이스를 선택한 후 SHOW TABLES; 명령을 실행하여 해당 데이터베이스의 테이블 목록을 확인합니다.
  5. 테이블 구조 보기: DESCRIBE <table_name>; 명령을 사용하여 테이블의 구조 및 분할 정보를 확인합니다.
  6. 엄격 모드 비활성화: 데이터를 삽입하기 전에 세션 변수를 설정하여 엄격 모드를 비활성화합니다.这样, StarRocks는 조건에 맞지 않는 필드 값을 NULL로 변환하고, 정확한 데이터 행과 함께 오류 데이터 행을 가져옵니다. 다음 명령을 실행합니다:
SET enable_insert_strict = false;

  • 엄격 모드를 활성화하면, StarRocks는 오류 데이터 행을 필터링하고, 올바른 데이터 행만 가져오고 오류 데이터 세부 정보를 반환합니다.
  • 엄격 모드를 비활성화하면, StarRocks는 변환 실패한 오류 필드를 NULL 값으로 변환하고, NULL 값을 포함한 오류 데이터 행을 올바른 데이터 행과 함께 가져옵니다.
  1. 데이터 임포트
INSERT INTO db_df_lawsuits_v.t_lawsuits_rolerelations
SELECT * FROM my_hive_catalog.db_df_lawsuits_v.t_lawsuits_rolerelations;

이 명령어는 25600개의 데이터를 영향을 미치고, 1.27초 만에 완료되어 실행 속도가 빠릅니다.

8.임포트 상태 모니터링: 임포트 작업을 제출한 후, 데이터베이스를 선택한 후 SHOW LOAD 명령을 통해 임포트 작업의 상태를 모니터링할 수 있습니다.

브로커를 통한 데이터 임포트:

BROKER LOAD | StarRocks

기본 원리:

임포트 작업을 제출한 후, FE는 해당 쿼리 계획을 생성하고 현재 사용 가능한 BE 수와 소스 데이터 파일 크기에 따라 쿼리 계획을 여러 BE에 배분합니다. 각 BE는 일부 임포트 작업을 처리합니다. BE는 데이터를 HDFS 또는 클라우드 저장소 시스템에서 가져오고, 데이터를 사전 처리한 후 StarRocks에 데이터를 임포트합니다. 모든 BE가 임포트를 완료하면 FE가 임포트 작업이 성공인지 여부를 최종적으로 판단합니다.

지원 형식:

CSV, ORCFile, Parquet 등

StarRocks에서 테이블 생성:
USE db_df_lawsuits_v;

CREATE TABLE db_df_lawsuits_v.test_brok (
    eid STRING,
    obj_id STRING,
    ename STRING,
    md5 STRING,
    title STRING,
    case_no STRING,
    cause_action STRING,
    `type` STRING,
    `role` STRING,
    court STRING,
    trial_result STRING,
    url STRING,
    judgeresult STRING,
    sub_amount DOUBLE,
    related_companies STRING,
    related_relation STRING,
    freezing_info STRING,
    u_tags STRING,
    `date` DATETIME,
    pub_date DATETIME,
    year_date STRING,
    year_pubdate STRING,
    row_update_time DATETIME,
    case_type STRING,
    case_cause STRING,
    case_causes STRING,
    doc_type STRING,
    case_status STRING,
    doc_id STRING,
    relation_details STRING,
    case_relation BIGINT,
    clean_role STRING,
    verdict_type STRING,
    related_case_no STRING,
    initial_court_code STRING,
    court_area_code STRING,
    source STRING,
    create_time DATETIME,
    local_update_time DATETIME,
    local_row_update_time DATETIME
)
DISTRIBUTED BY HASH(eid) BUCKETS 4;

브로커를 통한 임포트 문:
-- `db_df_lawsuits_v.test_brok2`라는 로드 라벨을 생성합니다. 이 라벨은 HDFS에서 데이터를 StarRocks 데이터베이스의 임포트 작업으로 로드하는 것을 나타냅니다.
LOAD LABEL db_df_lawsuits_v.test_brok2
(
    -- 데이터 원본을 지정합니다. 이는 HDFS 상의 ORC 형식 데이터 파일 집합입니다.
    DATA INFILE("hdfs://192.168.56.101:9870/user/hive/warehouse/db_df_lawsuits_v.db/t_lawsuits_rolerelations/*")
    -- 임포트 데이터의 대상 테이블은 `test_brok1`이라는 테이블입니다.
    INTO TABLE test_brok1
    -- 데이터 파일의 형식을 ORC 형식으로 지정합니다.
    FORMAT AS "orc"
)
-- `broker1`이라는 HDFS 브로커 컴포넌트를 사용하여 데이터를 운반합니다.
WITH BROKER
(
    'name' = 'broker1',
    'type' = 'hdfs',
    -- HDFS 브로커가 HDFS에 연결하기 위한 인증 정보를 구성합니다.
    'properties' = '{"username": "root", "password": "cqie"}'
)
-- 임포트 작업의 시간 초과를 36000초(10시간)로 설정합니다.
PROPERTIES
(
    'timeout' = '36000'
);

-- 모든 LOAD LABEL 작업 보기 
SHOW TABLES;

-- 특정 라벨 작업 보기 
SHOW TABLES FROM db_df_lawsuits_v;

-- 임포트 작업 목록 및 상태 보기
SHOW LOAD;

삭제:

테이블의 데이터를 삭제하려면 DELETE 문을 사용할 수 있습니다. 이 문은 조건에 따라 테이블의 데이터를 삭제할 수 있습니다. 예를 들어:

DELETE FROM table_name WHERE condition;

테이블(라벨) 전체를 삭제하려면 DROP TABLE 문을 사용해야 합니다. 이는 테이블과 모든 데이터를 삭제하고, 이 작업은 되돌릴 수 없습니다. 예를 들어:

DROP TABLE table_name;

DROP TABLE 작업을 수행하기 전에 중요한 데이터를 백업했는지 확인하십시오. 이 작업은 테이블과 테이블의 모든 데이터를 영구히 삭제합니다.

테이블의 데이터를 지우고 테이블 구조를 유지하려면 TRUNCATE TABLE 문을 사용할 수 있습니다. 이 명령어는 테이블의 모든 데이터를 삭제하지만, 테이블 구조는 유지됩니다. 예를 들어:

TRUNCATE TABLE table_name;

제3자 플랫폼을 통해 데이터를 StarRocks로 가져오기

Python을 통한 데이터 가져오기

테이블 생성 SQL

 CREATE TABLE `table1` ( `id` int(11) NOT NULL COMMENT "사용자 ID", `name` varchar(65533) NULL COMMENT "사용자 이름", `score` int(11) NOT NULL COMMENT "사용자 점수" ) ENGINE=OLAP PRIMARY KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 10; CREATE TABLE `table2` ( `id` int(11) NOT NULL COMMENT "도시 ID", `city` varchar(65533) NULL COMMENT "도시 이름" ) ENGINE=OLAP PRIMARY KEY(`id`) DISTRIBUTED BY HASH(`id`) BUCKETS 10; 

Python 코드

import requests,json
# 비밀번호 확인
Session=requests.Session()
Session.auth=('root','')
#csv 가져오기
table='table1'
headers_csv={
'label':'123',
#구분자
'column_separator':',',
#필드
'columns': 'id, name, score'
}
'''
1,Lily,23
2,Rose,23
3,Alice,24
4,Julia,25
'''
data=open('score.csv','r').read()
r=Session.put(f'http://10.8.16.200:8040/api/testdb/{table}/_stream_load',headers=
headers_csv,data=data)
r.json()
#json 가져오기
table='table2'
#요청 헤더
headers_json={
'Content-type': 'application/json',
"Expect": "100-continue",
'strict_mode': 'true',
'format': 'json',
#jsonpaths https://www.cnblogs.com/youring2/p/10942728.html
'jsonpaths': '[\"$.name\", \"$.code\"]',
'columns': 'city,tmp_id, id = tmp_id * 100'
}
for i in [{"name": "상해", "code": 1},{"name": "충칭", "code": 3}]:
data=json.dumps(i)
r=Session.put(f'http://10.8.16.200:8040/api/testdb/{table}/_stream_load',headers
=headers_json,data=data)
print(r.json())

태그: StarRocks MPP 아키텍처 실시간 분석 데이터 웨어하우스 브로커 로드

5월 26일 08:30에 게시됨