Sangwon
07/16/2026, 8:45 AMRocky
07/16/2026, 8:46 AMtype = starrocks)를 사용하는 것이며, 대체 방법으로 *JDBC Catalog*를 사용할 수도 있습니다.
1. StarRocks External Catalog 사용 (권장)
이 방식은 StarRocks 간의 전용 커넥터를 사용하여 성능이 가장 좋으며, 클러스터 A의 CN이 클러스터 B의 BE/CN과 직접 통신하여 데이터를 가져올 수 있습니다.
설정 방법 (클러스터 A에서 실행):
sql
CREATE EXTERNAL CATALOG cluster_b_catalog
PROPERTIES (
"type" = "starrocks",
"starrocks.host" = "<클러스터_B_FE_Leader_IP>",
"starrocks.port" = "9030", -- 클러스터 B의 MySQL 포트
"starrocks.user" = "<사용자_ID>",
"starrocks.password" = "<비밀번호>"
);
데이터 조회:
sql
SELECT * FROM cluster_b_catalog.db_name.table_name;
* 참고: 이 기능을 사용하려면 두 클러스터 간에 FE의 MySQL 포트(9030)뿐만 아니라 FE의 RPC 포트(9020) 및 *BE/CN의 bRPC 포트(8060)*가 서로 통신 가능해야 합니다.
2. JDBC Catalog 사용 (대체 방법)
StarRocks는 MySQL 프로토콜과 호환되므로 JDBC Catalog를 통해 연결할 수도 있습니다. 전용 커넥터보다 성능은 다소 떨어질 수 있으나 설정이 범용적입니다.
설정 방법 (클러스터 A에서 실행):
sql
CREATE EXTERNAL CATALOG cluster_b_jdbc
PROPERTIES (
"type" = "jdbc",
"user" = "<사용자_ID>",
"password" = "<비밀번호>",
"jdbc_uri" = "jdbc:mysql://<클러스터_B_FE_Leader_IP>:9030",
"driver_url" = "<https://repo1.maven.org/maven2/mysql/mysql-connector-java/8.0.28/mysql-connector-java-8.0.28.jar>",
"driver_class" = "com.mysql.cj.jdbc.Driver"
);
요약 및 주의사항
* MinIO 연결: 두 클러스터 모두 MinIO를 사용 중이라 하더라도, Catalog를 통한 조회는 클러스터 A가 직접 클러스터 B의 MinIO 경로를 보는 것이 아니라 *클러스터 B의 FE/CN을 통해 데이터를 요청*하는 방식입니다. 따라서 클러스터 B는 정상적으로 가동 중이어야 합니다.
* 권한: 클러스터 B에서 사용하는 계정은 해당 테이블에 대한 SELECT 권한이 있어야 합니다.
* External Table (ENGINE=olap): 과거에 사용하던 CREATE EXTERNAL TABLE 방식은 주로 쓰기(INSERT INTO) 전용이며 조회가 불가능하거나 제한적이므로, 위와 같은 *Catalog 방식*을 사용하는 것이 최신규 버전(v2.4 이상)의 표준입니다.
References
• data_source/catalog/query_external_data.md
• data_source/catalog/catalog_overview.md
• data_source/catalog/default_catalog.md
• data_source/External_table.mdSangwon
07/16/2026, 9:01 AMSangwon
07/16/2026, 9:02 AMRocky
07/16/2026, 9:02 AMENGINE=olap)은 "쓰기" 전용입니다.
StarRocks에서 `ENGINE=olap`으로 생성하는 External Table은 다른 StarRocks 클러스터로 데이터를 밀어넣기(INSERT INTO) 위한 용도로 설계되었습니다.
* 지원하는 명령어: INSERT INTO, SHOW CREATE TABLE
* 지원하지 않는 명령어: SELECT (조회 불가)
* 따라서 클러스터 A에서 B의 데이터를 읽어오고 싶다면 이 방식으로는 해결할 수 없습니다.
2. 조회를 위해서는 "External Catalog"가 정석입니다.
앞서 설명해 드린 *StarRocks External Catalog*("type" = "starrocks")가 바로 이 문제를 해결하기 위해 도입된 기능입니다.
* 장점: 클러스터 B의 모든 DB와 테이블을 한 번에 가져올 수 있으며, SELECT 조회가 가능합니다.
* 동작 방식: 클러스터 A의 CN이 클러스터 B의 FE로부터 메타데이터를 받아오고, 실제 데이터 스캔은 클러스터 B의 CN/BE와 통신하여 수행합니다.
3. 만약 External Table 구문을 꼭 쓰고 싶다면? (비권장)
성능이나 관리 측면에서 권장하지 않지만, 과거에 사용하던 ENGINE=mysql 방식을 사용할 수는 있습니다. StarRocks는 MySQL 프로토콜과 호환되므로, 클러스터 B를 마치 MySQL 서버인 것처럼 등록하는 방식입니다.
sql
-- 이 방식은 조회가 가능하지만, 성능이 떨어지고 보안/기능 제약이 많아
-- 현재는 JDBC Catalog나 StarRocks Catalog로 대체되었습니다.
CREATE EXTERNAL TABLE remote_t (
k1 INT,
...
) ENGINE=mysql
PROPERTIES (
"host" = "<Cluster_B_FE_IP>",
"port" = "9030",
"user" = "...",
"password" = "...",
"database" = "...",
"table" = "..."
);
요약
* 목적이 데이터 조회(SELECT)라면: CREATE EXTERNAL CATALOG (Type: starrocks)를 사용하세요.
* 목적이 데이터 전송(A -> B로 INSERT)이라면: CREATE EXTERNAL TABLE (ENGINE: olap)을 사용하세요.
* MinIO 환경 영향: 두 클러스터 모두 MinIO를 쓰고 있더라도, 내부 테이블(Internal Catalog)은 각 클러스터의 FE가 메타데이터를 독점 관리하므로, 클러스터 간 데이터 공유는 반드시 위와 같은 Catalog/Table 커넥터를 통해야 합니다.
References
• data_source/External_table.md
• data_source/catalog/starrocks_catalog.md
• data_source/catalog/catalog_overview.md
References
• knowledge/admin_and_operation/shared_data_garbage_cleanup.md
• deployment/shared_data/gcs.md
• deployment/shared_data/s3.md
• administration/management/FE_configuration.md
• deployment/shared_data/azure.md
• deployment/shared_data/minio.md