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

S3 일회성 데이터 적재

실험적 기능

S3 일회성 데이터 적재는 실험적 기능이며 Doris 4.1.6부터 지원됩니다.

일회성 데이터 적재는 ONE_TIME을 사용하여 일치하는 S3 파일을 기존 Doris 테이블에 배치로 적재합니다. 마지막 배치가 커밋되면 작업이 FINISHED 상태가 됩니다. 과거 데이터 초기화, 일회성 오프라인 적재 또는 별도 접두사 아래에서의 백필에 적합합니다.

작업을 생성하기 전에 모든 파일을 준비하고 적재 중 소스 경로를 안정적으로 유지하세요. 완료된 작업은 이후 파일을 기다리지 않습니다. 지속적으로 적재하려면 순서 기반 적재 또는 알림 기반 적재를 사용하세요.

빠른 시작​

1단계: 대상 테이블 및 파일 준비​

실행 계정에는 대상 테이블에 대한 LOAD 권한과 데이터베이스 및 테이블을 생성할 수 있는 해당 권한이 필요합니다. S3 자격 증명에는 s3:ListBucket 및 s3:GetObject 권한이 필요합니다. Doris 노드는 S3 엔드포인트에 액세스할 수 있어야 합니다.

CREATE DATABASE IF NOT EXISTS db1;
CREATE TABLE db1.tbl1 (
id INT,
name STRING
)
DUPLICATE KEY(id)
DISTRIBUTED BY HASH(id) BUCKETS 1
PROPERTIES ("replication_num" = "1");

이 예에서는 단일 BE 클러스터에 복제본 하나를 사용합니다. 프로덕션 클러스터에 맞게 복제본 수를 설정하세요. 다음 내용을 s3://bucket/001.csv로 업로드하고 SQL의 bucket, endpoint, Region 및 자격 증명을 실제 값으로 바꾸세요.

1,Alice
2,Bob

2단계: 작업 생성​

CREATE JOB s3_one_time_job
PROPERTIES (
"s3.ingestion_mode" = "ONE_TIME",
"s3.max_batch_files" = "256",
"s3.max_batch_bytes" = "10737418240"
)
ON STREAMING DO
INSERT INTO db1.tbl1
SELECT * FROM S3(
"uri" = "s3://bucket/*.csv",
"format" = "csv",
"column_separator" = ",",
"s3.region" = "<s3_region>",
"s3.endpoint" = "<s3_endpoint>",
"s3.access_key" = "<s3_access_key>",
"s3.secret_key" = "<s3_secret_key>"
);

완료 여부 확인​

작업 상태를 조회합니다.

SELECT Name, ExecuteType, Status
FROM jobs("type" = "insert")
WHERE Name = 's3_one_time_job';

예상 결과:

Name             ExecuteType  Status
s3_one_time_job STREAMING FINISHED

SELECT * FROM db1.tbl1 ORDER BY id;를 실행합니다. 예상 결과:

id  name
1 Alice
2 Bob

제한 사항 및 복구​

ONE_TIME은 생성 시 디렉터리 스냅샷을 생성하지 않습니다. 파일을 배치 단위로 나열하고 마지막 배치가 커밋되면 중지합니다. 커밋된 커서 뒤에 추가된 파일은 백필되지 않습니다. 작업을 생성하기 전에 모든 소스 파일을 준비하고, 적재 중에는 해당 경로 아래의 객체에 쓰거나 덮어쓰지 마세요. FE가 재시작되면 작업은 커밋된 진행 지점부터 재개되며, 소비가 완료되면 FINISHED 상태가 됩니다.

매개변수​

Job PROPERTIES에서 다음 매개변수를 구성합니다. S3 연결, 자격 증명 및 파일 형식 옵션은 S3(...)에 지정합니다.

매개변수유형기본값필수 여부설명
s3.ingestion_mode문자열ORDERED_LIST예ONE_TIME으로 설정합니다. 생성 후에는 변경할 수 없습니다.
s3.max_batch_files양의 정수256아니요배치당 파일 수 임계값입니다.
s3.max_batch_bytes정수10737418240아니요배치당 바이트 수 임계값이며 범위는 104857600부터 10737418240까지입니다. 단위 접미사는 허용되지 않습니다.
max_interval양의 정수10아니요유휴 스케줄링 간격(초)입니다.

offset, s3.event.source 또는 s3.sqs.queue_url을 설정하지 마세요. max_interval은 완료된 작업이 더 많은 파일을 기다리도록 유지하지 않습니다. 세션 설정은 INSERT INTO SELECT를 참조하세요.

적재 모드와 S3 URI는 생성 후 변경할 수 없습니다. 모드나 경로를 변경하려면 다른 작업을 생성하세요.

문제 해결 및 모범 사례​

  • 생성 실패: S3 TVF 스키마 추론에 사용할 일치하고 읽을 수 있으며 비어 있지 않은 파일이 있는지 확인하세요.
  • 작업이 완료되지 않음: Status, ErrorMsg 및 실패한 태스크를 확인하세요. 읽을 수 없는 객체와 형식 오류로 인해 배치를 커밋하지 못할 수 있습니다.
  • 완료 후 새 파일이 읽히지 않음: FINISHED는 최종 상태입니다. 이전 데이터가 다시 적재되지 않도록 다음 배치를 별도 접두사 아래에 배치하고 새 작업을 생성하세요.
  • 알림 기반 적재와 결합: 과거 데이터와 수신 데이터에 서로 겹치지 않는 접두사를 사용하거나 애플리케이션에서 겹치는 객체와 중복 데이터를 처리하세요.

일시 중지, 재개 및 태스크 검사 방법은 지속적 적재 개요를 참조하세요. 작업을 수정하려면 ALTER JOB을 참조하세요.