본문으로 건너뛰기
최종 수정: 에

MaxCompute Catalog

MaxCompute는 Alibaba Cloud의 기업용 SaaS(Software as a Service) 클라우드 데이터 웨어하우스입니다. Doris는 MaxCompute에서 제공하는 Open Storage SDK를 통해 MaxCompute 테이블 정보를 가져오고 쿼리 및 쓰기 작업을 수행할 수 있습니다.

적용 시나리오​

시나리오설명
데이터 통합MaxCompute 데이터를 읽어 Doris 내부 테이블에 씁니다.
원본에 데이터 쓰기INSERT 명령을 사용하여 MaxCompute 테이블에 데이터를 씁니다. (4.1.0 버전부터 지원)

사용 시 유의 사항​

  1. 2.1.7 버전부터 MaxCompute Catalog는 Open Storage SDK를 기반으로 개발되었습니다. 이전 버전에서는 Tunnel API를 기반으로 개발되었습니다.

  2. Open Storage SDK를 사용할 때는 일부 제한 사항이 있습니다. Usage Limitations 섹션은 이 문서에서 확인하세요.

  3. Doris 3.1.3 이전 버전에서는 MaxCompute의 프로젝트가 Doris의 데이터베이스에 대응합니다. 3.1.3 버전에서는 mc.enable.namespace.schema 매개변수를 통해 MaxCompute 스키마 계층을 도입할 수 있습니다.

Catalog 구성​

구문​

CREATE CATALOG [IF NOT EXISTS] catalog_name PROPERTIES (
'type' = 'max_compute',
{McAuthProperties},
{McRequiredProperties},
{McOptionalProperties},
{CommonProperties}
);
  • {McAuthProperties}

    이 속성들은 쿼리 및 쓰기 작업에서 Doris가 MaxCompute에 인증하는 방식을 제어합니다.

    버전 참고: mc.auth.type, mc.ram_role_arn, mc.ecs_ram_role은 4.0.4부터 지원됩니다.

    속성 이름기본값설명필수 여부지원되는 Doris 버전
    mc.auth.typeak_sk인증 유형입니다. 지원되는 값: ak_sk, ram_role_arn, ecs_ram_role.아니요4.0.4 이상
    mc.access_key없음Alibaba Cloud AccessKey입니다.mc.auth.type이 ak_sk(기본값) 또는 ram_role_arn인 경우 필수입니다.
    mc.secret_key없음Alibaba Cloud SecretKey입니다.mc.auth.type이 ak_sk(기본값) 또는 ram_role_arn인 경우 필수입니다.
    mc.ram_role_arn없음Alibaba Cloud RAM Role ARN입니다.mc.auth.type이 ram_role_arn인 경우 필수입니다.4.0.4 이상
    mc.ecs_ram_role없음인스턴스에 연결된 Alibaba Cloud ECS RAM Role 이름입니다.mc.auth.type이 ecs_ram_role인 경우 필수입니다.4.0.4 이상

    mc.auth.type에서 지원되는 값:

    값설명
    ak_skAlibaba Cloud AccessKey와 SecretKey를 직접 사용합니다.
    ram_role_arnmc.access_key와 mc.secret_key를 원본 자격 증명으로 사용하여 STS AssumeRole을 호출한 다음, 반환된 임시 자격 증명으로 MaxCompute에 접근합니다.
    ecs_ram_roleECS 메타데이터 서비스에서 임시 자격 증명을 가져옵니다. MaxCompute에 접근하는 Doris FE 및 BE 노드가 mc.ecs_ram_role에 지정된 역할을 사용할 수 있어야 합니다.

    검증 규칙:

    1. mc.auth.type을 생략하면 Doris는 ak_sk를 사용합니다.
    2. mc.auth.type이 ram_role_arn이면 mc.access_key, mc.secret_key, mc.ram_role_arn을 구성해야 합니다.
    3. mc.auth.type이 ecs_ram_role이면 mc.ecs_ram_role을 구성해야 합니다.
    4. mc.access_key와 mc.secret_key를 사용할 때는 반드시 함께 구성해야 합니다.

    인증 유형별 SQL 예제는 기본 예제를 참고하세요.

  • {McRequiredProperties}

    속성 이름설명지원되는 Doris 버전
    mc.default.project접근할 MaxCompute 프로젝트의 이름입니다. MaxCompute 프로젝트 목록에서 프로젝트를 생성하고 관리할 수 있습니다.
    mc.regionMaxCompute가 활성화된 리전입니다. Endpoint에서 해당 리전을 확인할 수 있습니다.2.1.7 미만
    mc.endpointMaxCompute가 활성화된 리전입니다. 구성 방법은 아래의 "Endpoint 및 Quota 확인 방법" 섹션을 참고하세요.2.1.7 이상
  • {McOptionalProperties}

    속성 이름기본값설명지원되는 Doris 버전
    mc.tunnel_endpoint없음부록의 "사용자 지정 서비스 주소"를 참고하세요.2.1.7 미만
    mc.odps_endpoint없음부록의 "사용자 지정 서비스 주소"를 참고하세요.2.1.7 미만
    mc.quotapay-as-you-goQuota 이름입니다. 구성 방법은 아래의 "Endpoint 및 Quota 확인 방법" 섹션을 참고하세요.2.1.7 이상
    mc.split_strategybyte_sizeSplit 분할 방식을 설정합니다. 바이트 크기 기준인 byte_size 또는 행 수 기준인 row_count로 설정할 수 있습니다.2.1.7 이상
    mc.split_byte_size268435456각 Split이 읽는 파일 크기이며, 단위는 바이트입니다. 기본값은 256 MB입니다. "mc.split_strategy" = "byte_size"인 경우에만 적용됩니다.2.1.7 이상
    mc.split_row_count1048576각 Split이 읽는 행 수입니다. "mc.split_strategy" = "row_count"인 경우에만 적용됩니다.2.1.7 이상
    mc.split_cross_partitionfalse생성된 Split이 파티션 경계를 넘을 수 있는지 지정합니다.2.1.8 이상
    mc.connect_timeout10sMaxCompute 연결 타임아웃입니다.2.1.8 이상
    mc.read_timeout120sMaxCompute 읽기 타임아웃입니다.2.1.8 이상
    mc.retry_count4타임아웃 후 재시도 횟수입니다.2.1.8 이상
    mc.datetime_predicate_push_downtruetimestamp/timestamp_ntz 타입에 조건자 푸시다운을 허용할지 지정합니다. Doris는 이 두 타입을 동기화할 때 정밀도가 낮아집니다(9 -> 6). 따라서 원본 데이터의 정밀도가 6자리를 초과하면 조건자 푸시다운으로 인해 결과가 부정확해질 수 있습니다.2.1.9/3.0.5 이상
    mc.account_formatnameAlibaba Cloud 국제 사이트와 중국 사이트의 계정 체계는 서로 다릅니다. 국제 사이트 사용자가 user 'RAM$xxxxxx:xxxxx' is not a valid aliyun account와 같은 오류를 겪는 경우, 이 매개변수를 id로 설정할 수 있습니다.3.0.9/3.1.1 이상
    mc.enable.namespace.schemafalseMaxCompute 스키마 계층을 지원할지 지정합니다. 참고: https://help.aliyun.com/zh/maxcompute/user-guide/schema-related-operations3.1.3 이상
    mc.max_field_size_bytes8388608 (8 MB)쓰기 세션에서 단일 필드에 허용되는 최대 바이트 수입니다. 큰 문자열 또는 바이너리 필드가 포함된 데이터를 쓸 때 필드 크기가 이 값을 초과하면 쓰기가 실패할 수 있습니다. 실제 데이터에 맞게 이 값을 늘릴 수 있습니다.4.1.0 이상
    test_connectionfalseCatalog 생성 시 연결 가능 여부를 검증할지 지정합니다. true로 설정하면 Doris가 AK/SK, endpoint 및 mc.project에 접근할 수 있는지 확인합니다. mc.enable.namespace.schema가 활성화되어 있으면 스키마 목록에도 접근할 수 있어야 합니다. 검사에 실패하면 CREATE CATALOG가 즉시 실패합니다.4.1.4 이상

    4.1.4 버전부터 mc.connect_timeout, mc.read_timeout, mc.retry_count가 실제로 하위 REST 클라이언트에 적용됩니다. 이전 버전에서는 이 세 속성을 설정할 수 있었지만 효과는 없었습니다.

    • mc.max_field_size_bytes

      MaxCompute는 기본적으로 필드당 최대 8 MB를 허용합니다. 쓰려는 데이터에 큰 문자열 또는 바이너리 필드가 포함되어 있으면 쓰기가 실패할 수 있습니다.

      이 제한을 조정하려면 먼저 MaxCompute 콘솔의 SQL 편집기에서 다음 명령을 실행하세요:

      setproject odps.sql.cfile2.field.maxsize=262144;

      이 명령은 단일 필드의 최대 바이트 수를 조정합니다. 단위는 KB이며 최대값은 262144입니다.

      그런 다음 Doris Catalog 속성에서 mc.max_field_size_bytes를 해당 바이트 값으로 설정하세요. 이 값은 MaxCompute 설정값을 초과해서는 안 됩니다.

  • {CommonProperties}

    CommonProperties 섹션에는 공통 속성을 입력합니다. Catalog 개요의 "공통 속성" 섹션을 참고하세요.

메타데이터 캐시​

Apache Doris는 외부 데이터 소스에 접근하는 성능을 높이기 위해 MaxCompute 메타데이터를 캐시합니다. 메타데이터에는 테이블 스키마와 파티션 목록이 포함됩니다.

팁

Doris 4.1.x 이전 버전에서는 주로 FE 구성 항목을 통해 메타데이터 캐싱을 전역으로 제어합니다. 자세한 내용은 메타데이터 캐시를 참고하세요. Doris 4.1.x부터 MaxCompute Catalog의 외부 메타데이터 캐시는 통합된 meta.cache.* 키를 사용하여 구성합니다. 아래 항목은 현재 버전을 설명합니다. Doris 4.1.x 및 4.2.x는 다른 항목 집합을 사용하며, 이 페이지의 4.x 버전에서 설명합니다.

캐시 속성 구성​

각 캐시 항목은 통합된 구성 키 형식인 meta.cache.<engine>.<entry>.{enable,ttl-second,capacity,max-weight}를 사용합니다. MaxCompute의 <engine>은 max_compute입니다.

속성예제의미
enabletrue/false이 캐시 항목을 활성화할지 지정합니다.
ttl-second600, 0, -10은 항목을 비활성화합니다(즉시 적용되며, 최신 데이터를 확인하는 데 사용할 수 있음). -1은 만료되지 않음을 의미합니다. 그 외 양의 정수는 접근 시점을 기준으로 한 TTL을 초 단위로 나타냅니다.
capacity10000개수 기준 최대 캐시 항목 수입니다. 0은 항목을 비활성화합니다.
max-weight1GBDoris 4.1.4부터 지원됩니다. 항목이 보유하는 추정 메모리의 한도이며, 선택적으로 설정합니다. 양수여야 하며 0은 허용되지 않습니다. 아래에 표시된 항목만 지원합니다.

적용 조건: 항목은 enable=true, ttl-second != 0, capacity > 0일 때 적용됩니다. FE 전체, Catalog 또는 항목 수준의 메모리 한도는 추정 메모리를 기준으로 캐시 수용 여부를 추가로 제어합니다. 외부 메타데이터 캐시 메모리 관리를 참고하세요.

캐시 모듈​

MaxCompute Catalog에는 다음 캐시 항목이 있으며, 이 항목은 max-weight를 지원합니다:

항목 (<entry>)속성 키 접두사ENTRY_NAME캐시 내용 및 영향기본 활성화 여부 / TTL / 용량
partitionmeta.cache.max_compute.partition.max-compute-partition테이블의 파티션 목록입니다. 영향: 파티션 프루닝 및 열거에 사용됩니다. 비활성화하면 새 파티션이 즉시 표시됩니다.true / 600 s / 10000

MaxCompute 테이블의 열 스키마는 공유 default 엔진(meta.cache.default.schema.*)에 캐시됩니다.

기존 매개변수 매핑 및 변환​

기존 속성 키통합 키설명
schema.cache.ttl-secondmeta.cache.default.schema.ttl-second테이블 스키마 캐시의 만료 시간

권장 사항​

  • 최신 데이터에 실시간으로 접근: 각 쿼리에서 MaxCompute 테이블의 최신 파티션을 확인하려면 파티션 캐시 TTL을 0으로 설정하세요.
    -- Disable the partition listing cache to detect the latest partitions of MaxCompute tables
    ALTER CATALOG mc_ctl SET PROPERTIES ("meta.cache.max_compute.partition.ttl-second" = "0");
  • 참고: Catalog 속성 변경이 성공하면 영향을 받는 메타데이터 캐시가 제거되고, 다음 접근 시 새 구성으로 다시 생성됩니다. meta.cache.max-weight 또는 schema.cache.ttl-second를 변경하면 해당 Catalog의 모든 캐시가 제거됩니다. meta.cache.<engine>.<entry>.*를 변경하면 해당 엔진의 캐시가 제거됩니다. 이미 실행 중인 쿼리에는 영향을 주지 않습니다.

관측 가능성​

캐시 지표는 information_schema.catalog_meta_cache_statistics 시스템 테이블을 통해 확인할 수 있습니다. ENTRY_NAME은 위 표에 나열된 이름을 표시하며, default 엔진 행은 공유 테이블 스키마 캐시를 나타냅니다:

SELECT engine_name, entry_name,
effective_enabled, ttl_second, capacity,
estimated_size, hit_rate, max_weight, estimated_weight
FROM information_schema.catalog_meta_cache_statistics
WHERE catalog_name = 'mc_ctl'
ORDER BY engine_name, entry_name;

이 시스템 테이블에 대한 문서를 참고하세요: catalog_meta_cache_statistics.

지원되는 MaxCompute 버전​

MaxCompute의 퍼블릭 클라우드 버전만 지원됩니다. 프라이빗 클라우드 버전 지원이 필요한 경우 Doris 커뮤니티 지원팀에 문의하세요.

지원되는 MaxCompute 테이블​

  • 파티션 테이블, 클러스터 테이블 및 구체화된 뷰 읽기를 지원합니다.

  • MaxCompute 외부 테이블, 논리 뷰 또는 Delta Tables 읽기는 지원하지 않습니다.

계층 매핑​

  • mc.enable.namespace.schema가 false인 경우

    DorisMaxCompute
    CatalogN/A
    데이터베이스프로젝트
    테이블테이블
  • mc.enable.namespace.schema가 true인 경우

    DorisMaxCompute
    Catalog프로젝트
    데이터베이스스키마
    테이블테이블

열 타입 매핑​

MaxCompute 타입Doris 타입설명
booleanboolean
tinytinyint
tinyinttinyint
smallintsmallint
intint
bigintbigint
floatfloat
doubledouble
decimal(P, S)decimal(P, S)1 <= P <= 38, 0 <= S <= 18
char(N)char(N)
varchar(N)varchar(N)
stringstring
datedate
datetimedatetime(3)정밀도 3으로 고정 매핑됩니다. SET [GLOBAL] time_zone = 'Asia/Shanghai'로 시간대를 지정할 수 있습니다.
timestamp_ntzdatetime(6)MaxCompute의 timestamp_ntz 정밀도는 9이지만 Doris의 DATETIME 최대 정밀도는 6이므로, 데이터를 읽을 때 초과 부분이 잘립니다.
timestampdatetime(6)2.1.9/3.0.5부터 지원됩니다. MaxCompute의 timestamp 정밀도는 9이지만 Doris의 DATETIME 최대 정밀도는 6이므로, 데이터를 읽을 때 초과 부분이 잘립니다.
arrayarray
mapmap
structstruct
기타UNSUPPORTED

기본 예제​

기본 ak_sk 인증:

CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.default.project' = 'project',
'mc.access_key' = 'AKxxxxx',
'mc.secret_key' = 'SKxxxxx',
'mc.endpoint' = 'http://service.cn-beijing-vpc.maxcompute.aliyun-inc.com/api'
);

ram_role_arn 인증(4.0.4+):

CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.default.project' = 'project',
'mc.auth.type' = 'ram_role_arn',
'mc.access_key' = 'AKxxxxx',
'mc.secret_key' = 'SKxxxxx',
'mc.ram_role_arn' = 'acs:ram::<your_account_id>:role/<your_role_name>',
'mc.endpoint' = 'http://service.cn-beijing-vpc.maxcompute.aliyun-inc.com/api'
);

ecs_ram_role 인증(4.0.4+):

CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.default.project' = 'project',
'mc.auth.type' = 'ecs_ram_role',
'mc.ecs_ram_role' = '<your_ecs_ram_role_name>',
'mc.endpoint' = 'http://service.cn-beijing-vpc.maxcompute.aliyun-inc.com/api'
);

2.1.7 미만 버전을 사용하는 경우 다음 문을 사용하세요(2.1.8 이상으로 업그레이드하는 것을 권장합니다):

CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.region' = 'cn-beijing',
'mc.default.project' = 'project',
'mc.access_key' = 'ak',
'mc.secret_key' = 'sk',
'mc.odps_endpoint' = 'http://service.cn-beijing.maxcompute.aliyun-inc.com/api',
'mc.tunnel_endpoint' = 'http://dt.cn-beijing.maxcompute.aliyun-inc.com'
);

스키마 지원을 사용하는 경우:

CREATE CATALOG mc_catalog PROPERTIES (
'type' = 'max_compute',
'mc.region' = 'cn-beijing',
'mc.default.project' = 'project',
'mc.access_key' = 'ak',
'mc.secret_key' = 'sk',
'mc.odps_endpoint' = 'http://service.cn-beijing.maxcompute.aliyun-inc.com/api',
'mc.tunnel_endpoint' = 'http://dt.cn-beijing.maxcompute.aliyun-inc.com',
'mc.enable.namespace.schema' = 'true'
);

쿼리 작업​

기본 쿼리​

-- 1. Switch to Catalog, use database and query
SWITCH mc_ctl;
USE mc_db;
SELECT * FROM mc_tbl LIMIT 10;

-- 2. Use mc database directly
USE mc_ctl.mc_db;
SELECT * FROM mc_tbl LIMIT 10;

-- 3. Use full qualified name to query
SELECT * FROM mc_ctl.mc_db.mc_tbl LIMIT 10;

쿼리 최적화​

  • LIMIT 쿼리 최적화(4.1.0부터)

    이 매개변수는 데이터 존재 여부를 확인하기 위해 LIMIT 1을 자주 사용하는 시나리오에만 적용됩니다.

    MaxCompute 테이블을 쿼리할 때 쿼리에 파티션 열의 동등 조건자(= 또는 IN)와 LIMIT 절만 포함되어 있으면, 세션 변수 enable_mc_limit_split_optimization을 활성화하여 Split 생성 전략을 최적화할 수 있습니다.

    활성화하면 시스템은 row_offset 전략을 사용하여 전체 데이터에 대한 Split을 생성하는 대신 필요한 수의 행만 읽습니다. 이를 통해 Split 수를 여러 개에서 정확히 하나로 줄여 쿼리 지연 시간을 크게 단축할 수 있습니다.

    이 최적화는 다음과 같은 쿼리에 적용됩니다:

    SELECT * FROM mc_tbl WHERE pt = 'value' LIMIT 100;
    SELECT * FROM mc_tbl WHERE pt IN ('v1', 'v2') LIMIT 100;

    활성화 방법:

    SET enable_mc_limit_split_optimization = true;

    이 매개변수는 기본적으로 비활성화되어 있습니다. 쿼리에 비파티션 열 필터나 동등 조건자가 아닌 조건자(예: >, <, !=)가 포함되어 있거나 LIMIT 절이 없으면 최적화가 적용되지 않습니다.

쓰기 작업​

4.1.0 버전부터 Doris는 MaxCompute 테이블에 대한 쓰기 작업을 지원합니다. 표준 INSERT 문을 사용하여 Doris를 통해 다른 데이터 소스의 데이터를 MaxCompute 테이블에 직접 쓸 수 있습니다.

노트
  • 이 기능은 실험적 기능이며, 4.1.0 버전부터 지원됩니다.
  • 파티션 테이블과 비파티션 테이블 모두에 쓰기를 지원합니다.
  • 클러스터 테이블, 트랜잭션 테이블, Delta Tables 또는 외부 테이블에 쓰기는 지원하지 않습니다.

INSERT INTO​

INSERT 작업은 대상 테이블에 데이터를 추가합니다.

예제:

INSERT INTO mc_tbl values (val1, val2, val3, val4);
INSERT INTO mc_tbl SELECT col1, col2 FROM internal.db1.tbl1;

INSERT INTO mc_tbl(col1, col2) values (val1, val2);
INSERT INTO mc_tbl(col1, col2, partition_col1, partition_col2) values (1, 2, "beijing", "2023-12-12");

-- Write to specified partition (you can specify only some partition columns, with remaining partitions written dynamically)
INSERT INTO mc_tbl PARTITION(ds='20250201') SELECT id, name FROM source_tbl;
INSERT INTO mc_tbl PARTITION(ds='20250101', region='bj') VALUES (1, 'v1'), (2, 'v2');

INSERT OVERWRITE​

INSERT OVERWRITE는 테이블의 기존 데이터를 새 데이터로 완전히 덮어씁니다.

INSERT OVERWRITE TABLE mc_tbl VALUES(val1, val2, val3, val4);
INSERT OVERWRITE TABLE mc_tbl(col1, col2) SELECT col1, col2 FROM internal.db1.tbl1;

-- Write to specified partition
INSERT OVERWRITE TABLE mc_tbl PARTITION(ds='20250101') VALUES (10, 'new1');

CTAS​

CTAS 문을 사용하여 MaxCompute 테이블을 생성하고 데이터를 쓸 수 있습니다:

CREATE TABLE mc_tbl AS SELECT * FROM other_table;

데이터베이스 및 테이블 관리​

4.1.0 버전부터 Doris는 MaxCompute 데이터베이스와 테이블의 생성 및 삭제를 지원합니다.

노트
  • 이 기능은 실험적 기능이며, 4.1.0 버전부터 지원됩니다.
  • 파티션 테이블과 비파티션 테이블의 생성 및 삭제를 지원합니다.
  • 클러스터 테이블, 트랜잭션 테이블, Delta Tables 또는 외부 테이블 생성은 지원하지 않습니다.

데이터베이스나 테이블을 생성하거나 삭제할 때 Doris는 해당 MaxCompute API를 호출하여 작업을 수행합니다. 작업이 반환된 후 MaxCompute 측의 메타데이터 변경 사항이 후속 작업에 완전히 반영되기까지는 짧은 시간이 필요합니다.

이 기능은 mc.enable.namespace.schema 속성이 true로 설정된 경우에만 사용할 수 있습니다.

데이터베이스 생성 및 삭제​

SWITCH 문을 사용하여 해당 Catalog로 전환한 다음 CREATE DATABASE 문을 실행할 수 있습니다:

SWITCH mc;
CREATE DATABASE [IF NOT EXISTS] mc_schema;

전체 정규화된 이름을 사용하여 생성할 수도 있습니다:

CREATE DATABASE [IF NOT EXISTS] mc.mc_schema;

데이터베이스 삭제:

DROP DATABASE [IF EXISTS] mc.mc_schema;
주의

MaxCompute 데이터베이스를 삭제하면 그 안의 모든 테이블도 함께 삭제됩니다.

테이블 생성 및 삭제​

  • 생성

    Doris는 MaxCompute에서 파티션 테이블 또는 비파티션 테이블 생성을 지원합니다.

    예제:

    CREATE TABLE mc_schema.mc_tbl1 (
    bool_col BOOLEAN,
    int_col INT,
    bigint_col BIGINT,
    float_col FLOAT,
    double_col DOUBLE,
    decimal_col DECIMAL(18,6),
    string_col STRING,
    varchar_col VARCHAR(200),
    char_col CHAR(50),
    date_col DATE,
    datetime_col DATETIME,
    arr_col ARRAY<STRING>,
    map_col MAP<STRING, STRING>,
    struct_col STRUCT<f1:STRING, f2:INT>
    );

    CREATE TABLE mc_schema.mc_tbl2 (
    id INT,
    val STRING,
    ds STRING,
    region STRING
    )
    PARTITION BY (ds, region)();
  • 삭제

    DROP TABLE 문을 사용하여 MaxCompute 테이블을 삭제할 수 있습니다. 현재 테이블을 삭제하면 파티션 데이터를 포함한 데이터도 함께 삭제됩니다.

    예제:

    DROP TABLE [IF EXISTS] mc_tbl;

자주 묻는 질문​

Endpoint 및 Quota 확인 방법(Doris 2.1.7 이상에 적용)​

  1. 데이터 전송 서비스에 전용 리소스 그룹을 사용하는 경우

    이 문서의 "전용 데이터 서비스 리소스 그룹 사용" 장에 있는 "2. 권한 부여" 섹션을 참고하여 필요한 권한을 활성화하세요. "Quota 관리" 목록에서 해당 QuotaName을 확인하고 복사한 뒤 "mc.quota" = "QuotaName"을 지정하세요. 이 경우 VPC 또는 퍼블릭 네트워크를 통해 MaxCompute에 접근할 수 있습니다. VPC는 대역폭이 보장되지만 퍼블릭 네트워크의 대역폭 리소스는 제한적입니다.

  2. 사용량 기반 과금 방식을 사용하는 경우

    이 문서의 "Open Storage 사용(사용량 기반 과금)" 섹션을 참고하여 Open Storage(Storage API) 스위치를 활성화하고 AK와 SK에 해당하는 사용자에게 권한을 부여하세요. 이 경우 mc.quota는 기본값인 pay-as-you-go를 사용하므로 이 값을 별도로 지정할 필요가 없습니다. 사용량 기반 과금 방식에서는 VPC를 통해서만 MaxCompute에 접근할 수 있으며, 퍼블릭 네트워크로는 접근할 수 없습니다. 선불 사용자만 퍼블릭 네트워크를 통해 MaxCompute에 접근할 수 있습니다.

  3. mc.endpoint는 "리전 Endpoint 참조 표"에 따라 구성하세요. 해당 표는 Alibaba Cloud Endpoint 문서에서 확인할 수 있습니다.

    VPC를 통해 접근하는 사용자는 "리전별 Endpoint 참조 표(Alibaba Cloud VPC 네트워크 연결 방식)"의 "VPC 네트워크 Endpoint" 열에 따라 mc.endpoint를 구성해야 합니다. 퍼블릭 네트워크를 통해 접근하는 사용자는 "리전별 Endpoint 참조 표(Alibaba Cloud 클래식 네트워크 연결 방식)"의 "클래식 네트워크 Endpoint" 열 또는 "리전별 Endpoint 참조 표(외부 네트워크 연결 방식)"의 "외부 네트워크 Endpoint" 열에서 선택하여 mc.endpoint를 구성할 수 있습니다.

사용자 지정 서비스 주소(Doris 2.1.7 이전 버전에 적용)​

Doris 2.1.7 이전 버전에서는 Tunnel SDK를 사용하여 MaxCompute와 상호작용하므로, 다음 두 Endpoint 속성이 필요합니다:

  • mc.odps_endpoint: MaxCompute Endpoint로, MaxCompute 메타데이터(데이터베이스 및 테이블 정보)를 가져오는 데 사용됩니다.

  • mc.tunnel_endpoint: Tunnel Endpoint로, MaxCompute 데이터를 읽는 데 사용됩니다.

기본적으로 MaxCompute Catalog는 mc.region과 mc.public_access를 기반으로 Endpoint를 생성합니다.

생성 형식은 다음과 같습니다:

mc.public_accessmc.odps_endpointmc.tunnel_endpoint
falsehttp://service.{mc.region}.maxcompute.aliyun-inc.com/apihttp://dt.{mc.region}.maxcompute.aliyun-inc.com
truehttp://service.{mc.region}.maxcompute.aliyun.com/apihttp://dt.{mc.region}.maxcompute.aliyun.com

사용자는 mc.odps_endpoint와 mc.tunnel_endpoint를 개별적으로 지정하여 서비스 주소를 사용자 지정할 수도 있습니다. 이는 자체 배포된 MaxCompute 환경에 적합합니다.

MaxCompute Endpoint 및 Tunnel Endpoint 구성 방법은 리전 및 네트워크 연결 방식별 Endpoint를 참고하세요.

리소스 사용량 제어​

사용자는 테이블 수준 요청 동시성을 두 세션 변수 parallel_pipeline_task_num과 num_scanner_threads로 조정하여 데이터 전송 서비스의 리소스 소비를 제어할 수 있습니다. 해당 동시성은 max(parallel_pipeline_task_num * be num * num_scanner_threads)와 같습니다.

참고:

  1. 이 방법은 단일 쿼리 내 단일 테이블의 동시 요청 수만 제어할 수 있으며, 여러 SQL 문에 걸친 리소스 사용량은 제어할 수 없습니다.

  2. 동시성을 낮추면 쿼리 실행 시간이 늘어납니다.

쓰기 권장 사항​

  • 가능한 한 파티션을 지정하여 쓰는 것을 권장합니다. 예: INSERT INTO mc_tbl PARTITION(ds='20250201'). 파티션을 지정하지 않으면 MaxCompute Storage API의 제한으로 인해 각 파티션의 데이터를 순차적으로 써야 합니다. 따라서 실행 계획은 파티션 열을 기준으로 데이터를 정렬하며, 데이터양이 많으면 상당한 메모리 리소스를 소비하여 쓰기가 실패할 수 있습니다.

  • 파티션을 지정하지 않고 쓸 때는 SET enable_strict_consistency_dml = false를 설정하지 마세요. 이 설정은 정렬 노드를 강제로 제거하여 파티션 데이터가 순서 없이 쓰이게 하며, 결국 MaxCompute에서 오류가 발생합니다.

  • LIMIT 절을 추가하지 마세요. LIMIT 절이 추가되면 Doris는 쓰기 건수를 보장하기 위해 단일 스레드만 사용하여 데이터를 씁니다. 소규모 테스트에는 사용할 수 있지만, LIMIT 값이 크면 쓰기 성능이 저하됩니다.

쓰기 오류: Data invalid: ODPS-0020041:StringOutOfMaxLength​

mc.max_field_size_bytes에 대한 설명을 참고하세요.