> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 이 엔진은 Amazon S3 에코시스템과의 통합을 제공하며 스트리밍 방식의 데이터 가져오기를 지원합니다. Kafka 및 RabbitMQ 엔진과 유사하지만, S3 전용 기능을 제공합니다.

# S3Queue 테이블 엔진

export const ScalePlanFeatureBadge = ({feature = 'This feature', linking_verb_are = false}) => {
  return <div className="scalePlanFeatureContainer">
            <div className="scalePlanFeatureBadge">
                Scale plan feature
            </div>
            <div>
                <p>{feature} {linking_verb_are ? 'are' : 'is'} available in the Scale and Enterprise plans. To upgrade, visit the plans page in the cloud console.</p>
            </div>
        </div>;
};

이 엔진은 [Amazon S3](https://aws.amazon.com/s3/) 에코시스템과의 통합을 제공하며 스트리밍 import를 지원합니다. 이 엔진은 [Kafka](/ko/reference/engines/table-engines/integrations/kafka), [RabbitMQ](/ko/reference/engines/table-engines/integrations/rabbitmq) 엔진과 유사하지만, S3 전용 기능을 제공합니다.

[S3Queue 구현의 원본 PR](https://github.com/ClickHouse/ClickHouse/pull/49086/files#diff-e1106769c9c8fbe48dd84f18310ef1a250f2c248800fde97586b3104e9cd6af8R183)의 다음 참고 사항을 이해하는 것이 중요합니다: `MATERIALIZED VIEW`가 이 엔진에 연결되면 S3Queue 테이블 엔진이 백그라운드에서 데이터 수집을 시작합니다.

<div id="creating-a-table">
  ## 테이블 생성
</div>

```sql theme={null}
CREATE TABLE s3_queue_engine_table (name String, value UInt32)
    ENGINE = S3Queue(path, [NOSIGN, | aws_access_key_id, aws_secret_access_key,] format, [compression], [headers], [extra_credentials])
    [SETTINGS]
    [mode = '',]
    [after_processing = 'keep',]
    [keeper_path = '',]
    [loading_retries = 0,]
    [processing_threads_num = 16,]
    [parallel_inserts = false,]
    [enable_logging_to_queue_log = true,]
    [last_processed_path = "",]
    [tracked_files_limit = 1000,]
    [tracked_file_ttl_sec = 0,]
    [polling_min_timeout_ms = 1000,]
    [polling_max_timeout_ms = 10000,]
    [polling_backoff_ms = 0,]
    [cleanup_interval_min_ms = 10000,]
    [cleanup_interval_max_ms = 30000,]
    [buckets = 0,]
    [list_objects_batch_size = 1000,]
    [enable_hash_ring_filtering = 0,]
    [max_processed_files_before_commit = 100,]
    [max_processed_rows_before_commit = 0,]
    [max_processed_bytes_before_commit = 0,]
    [max_processing_time_sec_before_commit = 0,]
```

<Warning>
  `24.7` 이전 버전에서는 `mode`, `after_processing`, `keeper_path`를 제외한 모든 설정에 `s3queue_` 접두사를 사용해야 합니다.
</Warning>

**엔진 매개변수**

`S3Queue`의 매개변수는 `S3` 테이블 엔진이 지원하는 매개변수와 동일합니다. 매개변수 섹션은 [여기](/ko/reference/engines/table-engines/integrations/s3#parameters)를 참조하십시오.

**예시**

```sql theme={null}
CREATE TABLE s3queue_engine_table (name String, value UInt32)
ENGINE=S3Queue('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/*', 'CSV', 'gzip')
SETTINGS
    mode = 'unordered';
```

이름이 지정된 컬렉션 사용하기:

```xml theme={null}
<clickhouse>
    <named_collections>
        <s3queue_conf>
            <url>'https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/*</url>
            <access_key_id>test<access_key_id>
            <secret_access_key>test</secret_access_key>
        </s3queue_conf>
    </named_collections>
</clickhouse>
```

```sql theme={null}
CREATE TABLE s3queue_engine_table (name String, value UInt32)
ENGINE=S3Queue(s3queue_conf, format = 'CSV', compression_method = 'gzip')
SETTINGS
    mode = 'ordered';
```

<div id="settings">
  ## 설정
</div>

테이블에 구성된 설정 목록을 확인하려면 `system.s3_queue_settings` 테이블을 사용하십시오. `24.10`부터 사용할 수 있습니다.

<Info>
  **설정 이름 (24.7+)**

  버전 24.7부터는 `s3queue_` 접두사(prefix) 유무와 관계없이 S3Queue 설정을 지정할 수 있습니다.

  * **최신 구문** (24.7+): `processing_threads_num`, `tracked_file_ttl_sec` 등
  * **레거시 구문** (모든 버전): `s3queue_processing_threads_num`, `s3queue_tracked_file_ttl_sec` 등

  24.7+에서는 두 형식이 모두 지원됩니다. 이 페이지의 예시에서는 접두사 없는 최신 구문을 사용합니다.
</Info>

<div id="mode">
  ### 모드
</div>

가능한 값:

* unordered — unordered 모드에서는 이미 처리된 모든 파일의 집합을 ZooKeeper의 영구 노드로 추적합니다.
* ordered — ordered 모드에서는 파일이 사전식 순서로 처리됩니다. 즉, 어느 시점에 'BBB'라는 이름의 파일이 처리된 뒤 나중에 'AA'라는 이름의 파일이 버킷에 추가되면, 해당 파일은 무시됩니다. ZooKeeper에는 성공적으로 처리된 파일 중 사전식 기준으로 가장 큰 이름과, 로드 시도에 실패하여 다시 시도할 파일의 이름만 저장됩니다.

기본값: 24.6 이전 버전에서는 `ordered`입니다. 24.6부터는 기본값이 없으며, 이 설정을 수동으로 지정해야 합니다. 이전 버전에서 생성된 테이블은 호환성을 위해 기본값이 계속 `Ordered`로 유지됩니다.

<div id="after_processing">
  ### `after_processing`
</div>

파일 처리가 성공적으로 끝난 후 파일을 어떻게 처리할지 지정합니다.

가능한 값:

* keep.
* delete.
* move.
* tag.

기본값: `keep`.

`move`를 사용하려면 추가 설정이 필요합니다. 동일한 버킷 내에서 이동하는 경우 새 경로 접두사를 `after_processing_move_prefix`로 지정해야 합니다.

다른 S3 버킷으로 이동하려면 대상 버킷 URI를 `after_processing_move_uri`로, S3 자격 증명을 `after_processing_move_access_key_id` 및 `after_processing_move_secret_access_key`로 지정해야 합니다.

예시:

```sql theme={null}
CREATE TABLE s3queue_engine_table (name String, value UInt32)
ENGINE=S3Queue('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/*', 'CSV', 'gzip')
SETTINGS
    mode = 'unordered',
    after_processing = 'move',
    after_processing_retries = 20,
    after_processing_move_prefix = 'dst_prefix',
    after_processing_move_uri = 'https://clickhouse-public-datasets.s3.amazonaws.com/dst-bucket',
    after_processing_move_access_key_id = 'test',
    after_processing_move_secret_access_key = 'test';
```

한 Azure 컨테이너에서 다른 Azure 컨테이너로 이동하려면 `after_processing_move_connection_string`에 Blob Storage 연결 문자열을, `after_processing_move_container`에 컨테이너 이름을 지정해야 합니다. 자세한 내용은 [AzureQueue 설정](/ko/reference/engines/table-engines/integrations/azure-queue#settings)을 참조하십시오.

태그를 지정하려면 `after_processing_tag_key`와 `after_processing_tag_value`에 태그 키와 값을 제공해야 합니다.

<div id="after_processing_retries">
  ### `after_processing_retries`
</div>

지정된 후처리 작업을 포기하기 전까지의 재시도 횟수입니다.

가능한 값:

* 0 이상의 정수.

기본값: `10`.

<div id="after_processing_move_access_key_id">
  ### `after_processing_move_access_key_id`
</div>

대상이 다른 S3 버킷인 경우, 성공적으로 처리된 파일을 이동할 S3 버킷의 Access Key ID입니다.

가능한 값:

* String.

기본값: 빈 문자열입니다.

<div id="after_processing_move_prefix">
  ### `after_processing_move_prefix`
</div>

성공적으로 처리된 파일을 이동할 경로 접두사입니다. 동일한 버킷 내로 이동하는 경우와 다른 버킷으로 이동하는 경우 모두에 적용됩니다.

가능한 값:

* String.

기본값: 빈 문자열.

<div id="after_processing_move_secret_access_key">
  ### `after_processing_move_secret_access_key`
</div>

이동 대상이 다른 S3 버킷인 경우, 성공적으로 처리된 파일을 이동할 S3 버킷의 Secret Access Key입니다.

가능한 값:

* String.

기본값: 빈 문자열.

<div id="after_processing_move_uri">
  ### `after_processing_move_uri`
</div>

대상이 다른 S3 버킷인 경우, 성공적으로 처리된 파일을 이동할 S3 버킷의 URI입니다.

가능한 값:

* String.

기본값: 빈 문자열.

<div id="after_processing_tag_key">
  ### `after_processing_tag_key`
</div>

`after_processing='tag'`인 경우, 성공적으로 처리된 파일에 태그를 추가할 때 사용하는 태그 키입니다.

가능한 값:

* `String`.

기본값: 빈 문자열입니다.

<div id="after_processing_tag_value">
  ### `after_processing_tag_value`
</div>

`after_processing='tag'`인 경우, 성공적으로 처리된 파일에 지정할 태그 값입니다.

가능한 값:

* String.

기본값: 빈 문자열.

<div id="keeper_path">
  ### `keeper_path`
</div>

ZooKeeper의 큐 메타데이터 경로입니다. 명시적으로 지정하지 않으면 ClickHouse가 `s3queue_default_zookeeper_path`, 데이터베이스 UUID, 테이블 UUID를 기반으로 경로를 구성합니다. 절대값(`/`로 시작하는 값)은 지정된 그대로 사용되며, 상대값은 구성된 접두사에 추가됩니다. `{database}` 또는 `{uuid}`와 같은 매크로는 엔진이 ZooKeeper에 연결되기 전에 확장됩니다.

보조 ZooKeeper 클러스터를 대상으로 하려면 값 앞에 구성된 이름을 접두사로 붙이십시오. 예: `analytics_keeper:/clickhouse/queue/orders`. 이 이름은 `<auxiliary_zookeepers>`에 존재해야 하며, 그렇지 않으면 엔진이 `Unknown auxiliary ZooKeeper name ...`를 보고합니다. 전체 문자열(접두사 포함)은 `SHOW CREATE TABLE`에 그대로 보존되므로 해당 구문을 수정 없이 그대로 복제할 수 있습니다.

가능한 값:

* String.

기본값: `/`.

<div id="loading_retries">
  ### `loading_retries`
</div>

파일 로딩을 지정된 횟수까지 다시 시도합니다. 기본적으로는 재시도하지 않습니다.
가능한 값:

* 양의 정수.

기본값: `0`.

<div id="processing_threads_num">
  ### `processing_threads_num`
</div>

처리를 수행할 스레드 수입니다. `Unordered` 모드에서만 적용됩니다.

기본값: CPU 수 또는 16입니다.

<div id="parallel_inserts">
  ### `parallel_inserts`
</div>

기본적으로 `processing_threads_num`은 하나의 `INSERT`만 생성하므로, 파일 다운로드와 파싱만 여러 스레드로 수행됩니다.
하지만 이렇게 하면 병렬성이 제한되므로, 더 높은 처리량을 위해 `parallel_inserts=true`를 사용하세요. 이렇게 하면 데이터를 병렬로 삽입할 수 있습니다(단, MergeTree 엔진 계열에서는 생성되는 데이터 파트 수가 더 많아질 수 있다는 점에 유의하십시오).

<Note>
  `INSERT`는 `max_process*_before_commit` 설정에 따라 생성됩니다.
</Note>

기본값: `false`.

<div id="enable_logging_to_s3queue_log">
  ### `enable_logging_to_s3queue_log`
</div>

`system.s3queue_log`에 로깅을 기록하도록 설정합니다.

기본값: `0`.

<div id="polling_min_timeout_ms">
  ### `polling_min_timeout_ms`
</div>

ClickHouse가 다음 폴링을 시도하기 전에 대기하는 최소 시간을 밀리초 단위로 지정합니다.

가능한 값:

* 양의 정수.

기본값: `1000`.

<div id="polling_max_timeout_ms">
  ### `polling_max_timeout_ms`
</div>

ClickHouse가 다음 폴링 시도를 시작하기 전까지 대기하는 최대 시간을 밀리초 단위로 정의합니다.

가능한 값:

* 양의 정수.

기본값: `10000`.

<div id="polling_backoff_ms">
  ### `polling_backoff_ms`
</div>

새 파일을 찾지 못했을 때 이전 폴링 인터벌에 추가로 더해지는 대기 시간을 결정합니다. 다음 폴링은 이전 인터벌과 이 백오프 값의 합 또는 최대 인터벌 중 더 작은 값이 지난 후 수행됩니다.

가능한 값:

* 양의 정수.

기본값: `0`.

<div id="tracked_files_limit">
  ### `tracked_files_limit`
</div>

`unordered` 모드를 사용하는 경우 ZooKeeper 노드 수를 제한할 수 있으며, `ordered` 모드에서는 적용되지 않습니다.
제한에 도달하면 가장 오래 전에 처리된 파일이 ZooKeeper 노드에서 삭제되고 다시 처리됩니다.

가능한 값:

* 양의 정수.

기본값: `1000`.

<div id="tracked_file_ttl_sec">
  ### `tracked_file_ttl_sec`
</div>

'unordered' 모드에서는 처리된 파일을 ZooKeeper 노드에 저장하는 최대 기간(초)입니다(기본값은 영구 저장). 'ordered' 모드에서는 적용되지 않습니다.
지정한 시간이 지나면 파일을 다시 가져옵니다.

Possible values:

* 양의 정수.

Default value: `0`.

<div id="cleanup_interval_min_ms">
  ### `cleanup_interval_min_ms`
</div>

'Ordered' 모드에서 사용합니다. 추적된 파일의 TTL 및 최대 추적 파일 집합을 유지 관리하는 백그라운드 작업의 재예약 인터벌에 대한 최소 한계를 정의합니다.

기본값: `10000`.

<div id="cleanup_interval_max_ms">
  ### `cleanup_interval_max_ms`
</div>

'Ordered' 모드에서 사용합니다. 추적된 파일 TTL과 최대 추적 파일 집합을 유지 관리하는 백그라운드 작업의 재예약 인터벌 상한을 정의합니다.

기본값: `30000`.

<div id="buckets">
  ### `buckets`
</div>

'Ordered' 모드에서 사용합니다. `24.6`부터 사용할 수 있습니다. S3Queue 테이블에 여러 레플리카가 있고 각 레플리카가 Keeper의 동일한 메타데이터 디렉터리를 사용하는 경우, `buckets` 값은 최소한 레플리카 수 이상이어야 합니다. `processing_threads` 설정도 함께 사용하는 경우에는 `buckets` 설정이 `S3Queue` 처리의 실제 병렬성을 결정하므로, 이 값을 더 크게 설정하는 것이 좋습니다.

<div id="use_persistent_processing_nodes">
  ### `use_persistent_processing_nodes`
</div>

기본적으로 S3Queue 테이블은 항상 임시 processing 노드를 사용해 왔습니다. 이 때문에 S3Queue가 처리된 파일을 ZooKeeper에 commit하기 전에 ZooKeeper 세션이 만료되고, 이미 처리는 시작된 상태라면 데이터가 중복될 수 있습니다. 이 설정은 Keeper 세션이 만료되는 경우 서버가 중복 발생 가능성을 없애도록 합니다.

<div id="persistent_processing_nodes_ttl_seconds">
  ### `persistent_processing_nodes_ttl_seconds`
</div>

서버가 정상적으로 종료되지 않은 경우, `use_persistent_processing_nodes`가 활성화되어 있으면 제거되지 않은 processing 노드가 남아 있을 수 있습니다. 이 설정은 이러한 processing 노드를 안전하게 정리할 수 있는 시간 주기를 정의합니다.

기본값: `3600` (1시간)입니다.

<div id="s3-settings">
  ## S3 관련 설정
</div>

이 엔진은 모든 S3 관련 설정을 지원합니다. S3 설정에 대한 자세한 내용은 [여기](/ko/reference/engines/table-engines/integrations/s3)를 참조하십시오.

<div id="s3-role-based-access">
  ## S3 역할 기반 접근
</div>

S3Queue 테이블 엔진은 역할 기반 접근을 지원합니다.
버킷에 접근할 역할을 구성하는 방법은 [여기](/ko/products/cloud/guides/data-sources/accessing-s3-data-securely) 문서를 참조하십시오.

역할 구성이 완료되면 아래와 같이 `extra_credentials` 매개변수를 통해 `roleARN`을 전달할 수 있습니다:

```sql theme={null}
CREATE TABLE s3_table
(
    ts DateTime,
    value UInt64
)
ENGINE = S3Queue(
                'https://<your_bucket>/*.csv',
                extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/<your_role>')
                ,'CSV')
SETTINGS
    ...
```

<div id="ordered-mode">
  ## S3Queue ordered 모드
</div>

`S3Queue` 처리 모드를 사용하면 ZooKeeper에 저장하는 메타데이터를 줄일 수 있지만, 나중 시점에 추가되는 파일은 영숫자 기준으로 더 큰 이름이어야 한다는 제한이 있습니다.

`S3Queue`의 `ordered` 모드는 `unordered`와 마찬가지로 `(s3queue_)processing_threads_num` 설정(`s3queue_` 접두사는 선택 사항)을 지원하며, 이 설정으로 서버에서 `S3` 파일을 로컬로 처리하는 스레드 수를 제어할 수 있습니다.

파티셔닝 없이 `ordered` 모드를 사용하는 경우, ClickHouse는 전체 접두사 이력을 다시 나열하지 않기 위해 마지막으로 처리한 키부터 S3 목록 조회를 재개할 수 있습니다. 버킷 기반 ordered 모드에서는 처리되지 않은 파일이 스키핑되는 것을 방지하기 위해, 모든 버킷에서 처리된 키 중 가장 작은 키를 재개 지점으로 보수적으로 선택합니다.
이 목록 조회 재개 최적화는 파티셔닝이 없는 ordered 모드의 S3 기반 큐에서만 사용됩니다(AzureQueue에는 사용되지 않으며, `partitioning_mode`가 설정된 경우에도 사용되지 않습니다).
또한 `ordered` 모드에는 "(s3queue\_)buckets"라는 또 다른 설정이 도입되며, 이는 "논리 스레드"를 의미합니다. 즉, 분산 환경에서 `S3Queue` 테이블 레플리카가 있는 여러 서버를 사용할 때 이 설정이 처리 단위 수를 정의합니다. 예를 들어 각 `S3Queue` 레플리카의 각 처리 스레드는 처리를 위해 특정 `bucket`을 잠그려고 시도하며, 각 `bucket`은 파일 이름의 해시에 따라 특정 파일에 할당됩니다. 따라서 분산 환경에서는 `(s3queue_)buckets` 설정을 최소한 레플리카 수와 같거나 그보다 크게 설정하는 것을 강력히 권장합니다. 버킷 수가 레플리카 수보다 많아도 문제없습니다. 가장 최적의 시나리오는 `(s3queue_)buckets` 설정이 `number_of_replicas`와 `(s3queue_)processing_threads_num`의 곱과 같을 때입니다.
`(s3queue_)processing_threads_num` 설정은 버전 `24.6` 이전에서는 사용을 권장하지 않습니다.
`(s3queue_)buckets` 설정은 버전 `24.6`부터 사용할 수 있습니다.

<div id="select">
  ## S3Queue 테이블 엔진에서 SELECT
</div>

기본적으로 S3Queue 테이블에서는 SELECT 쿼리가 허용되지 않습니다. 이는 데이터를 한 번 읽은 후 큐에서 제거하는 일반적인 큐 패턴을 따르기 때문입니다. 의도치 않은 데이터 손실을 방지하기 위해 SELECT를 금지합니다.
하지만 경우에 따라서는 이 기능이 유용할 수 있습니다. 이 경우 설정 `stream_like_engine_allow_direct_select`를 `True`로 지정해야 합니다.
S3Queue 엔진에는 SELECT 쿼리용 특수 설정인 `commit_on_select`가 있습니다. 읽은 후에도 큐에 데이터를 유지하려면 `False`로 설정하고, 제거하려면 `True`로 설정하십시오.

<div id="description">
  ## 설명
</div>

각 파일은 한 번만 가져올 수 있으므로 `SELECT`는 스트리밍 가져오기에는(디버깅 용도 제외) 그다지 유용하지 않습니다. 대신 [materialized view](/ko/reference/statements/create/view)를 사용해 실시간 스레드를 만드는 것이 더 실용적입니다. 이를 위해 다음을 수행합니다.

1. 엔진을 사용해 S3의 지정된 경로에서 데이터를 읽어 오는 테이블을 만들고, 이를 데이터 스트림으로 간주합니다.
2. 원하는 구조의 테이블을 만듭니다.
3. 엔진의 데이터를 변환해 앞서 만든 테이블에 넣는 materialized view를 생성합니다.

`MATERIALIZED VIEW`를 엔진에 연결하면 백그라운드에서 데이터 수집이 시작됩니다.

예시:

```sql theme={null}
  CREATE TABLE s3queue_engine_table (name String, value UInt32)
    ENGINE=S3Queue('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/*', 'CSV', 'gzip')
    SETTINGS
        mode = 'unordered';

  CREATE TABLE stats (name String, value UInt32)
    ENGINE = MergeTree() ORDER BY name;

  CREATE MATERIALIZED VIEW consumer TO stats
    AS SELECT name, value FROM s3queue_engine_table;

  SELECT * FROM stats ORDER BY name;
```

<div id="virtual-columns">
  ## 가상 컬럼
</div>

* `_path` — 파일 경로입니다.
* `_file` — 파일 이름입니다.
* `_size` — 파일 크기입니다.
* `_time` — 파일 생성 시간입니다.

가상 컬럼에 대한 자세한 내용은 [여기](/ko/reference/engines/table-engines#table_engines-virtual_columns)를 참조하십시오.

<div id="wildcards-in-path">
  ## 경로 내 와일드카드
</div>

`path` 인수에는 bash 스타일의 와일드카드를 사용해 여러 파일을 지정할 수 있습니다. 처리할 파일은 실제로 존재해야 하며 전체 경로 패턴과 일치해야 합니다. 파일 목록은 `CREATE` 시점이 아니라 `SELECT` 시점에 결정됩니다.

* `*` — 빈 문자열을 포함해 `/`를 제외한 임의의 문자 0개 이상을 대체합니다.
* `**` — 빈 문자열을 포함해 `/`를 포함한 임의의 문자 0개 이상을 대체합니다.
* `?` — 임의의 단일 문자를 대체합니다.
* `{some_string,another_string,yet_another_one}` — `'some_string'`, `'another_string'`, `'yet_another_one'` 문자열 중 하나를 대체합니다.
* `{N..M}` — N부터 M까지 범위의 임의의 숫자를 양 끝값을 포함해 대체합니다. N과 M 앞에는 0이 올 수 있습니다. 예: `000..078`.

`{}` 구문은 [remote](/ko/reference/functions/table-functions/remote) 테이블 함수와 유사합니다.

<div id="limitations">
  ## 제한 사항
</div>

1. 중복된 행은 다음과 같은 이유로 발생할 수 있습니다.

* 파일 처리 도중 파싱 중 예외가 발생하고 `s3queue_loading_retries`를 통해 재시도가 활성화된 경우

* `S3Queue`가 ZooKeeper의 동일한 경로를 가리키도록 여러 서버에 구성되어 있고, 한 서버가 처리된 파일을 커밋하기 전에 Keeper 세션이 만료되면 다른 서버가 해당 파일 처리를 이어받을 수 있으며, 이 경우 첫 번째 서버가 이미 해당 파일을 일부 또는 전체 처리했을 수 있습니다. 다만 `use_persistent_processing_nodes = 1`인 경우, 버전 25.8부터는 더 이상 해당하지 않습니다.

* 서버가 비정상적으로 종료된 경우

2. `S3Queue`가 ZooKeeper의 동일한 경로를 가리키도록 여러 서버에 구성되어 있고 `Ordered` 모드를 사용하는 경우 `s3queue_loading_retries`는 작동하지 않습니다. 이는 곧 수정될 예정입니다.

<div id="introspection">
  ## 내부 검사
</div>

내부 검사에는 `system.s3queue_metadata_cache` stateless 테이블과 `system.s3queue_log` 영속 테이블을 사용합니다.

1. `system.s3queue_metadata_cache`. 이 테이블은 영속적이지 않으며 `S3Queue`의 메모리 내 상태를 보여줍니다. 즉, 현재 처리 중인 파일과 처리 완료되었거나 실패한 파일을 확인할 수 있습니다.

```sql theme={null}
┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE system.s3queue_metadata_cache
(
    `database` String,
    `table` String,
    `file_name` String,
    `rows_processed` UInt64,
    `status` String,
    `processing_start_time` Nullable(DateTime),
    `processing_end_time` Nullable(DateTime),
    `ProfileEvents` Map(String, UInt64)
    `exception` String
)
ENGINE = SystemS3Queue
COMMENT 'Contains in-memory state of S3Queue metadata and currently processed rows per file.' │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

예시:

```sql theme={null}

SELECT *
FROM system.s3queue_metadata_cache

Row 1:
──────
zookeeper_path:        /clickhouse/s3queue/25ea5621-ae8c-40c7-96d0-cec959c5ab88/3b3f66a1-9866-4c2e-ba78-b6bfa154207e
file_name:             wikistat/original/pageviews-20150501-030000.gz
rows_processed:        5068534
status:                Processed
processing_start_time: 2023-10-13 13:09:48
processing_end_time:   2023-10-13 13:10:31
ProfileEvents:         {'ZooKeeperTransactions':3,'ZooKeeperGet':2,'ZooKeeperMulti':1,'SelectedRows':5068534,'SelectedBytes':198132283,'ContextLock':1,'S3QueueSetFileProcessingMicroseconds':2480,'S3QueueSetFileProcessedMicroseconds':9985,'S3QueuePullMicroseconds':273776,'LogTest':17}
exception:
```

2. `system.s3queue_log`. 영속 테이블입니다. `system.s3queue_metadata_cache`와 동일한 정보를 제공하지만, `processed` 및 `failed` 파일에 대한 정보입니다.

테이블 구조는 다음과 같습니다:

```sql theme={null}
SHOW CREATE TABLE system.s3queue_log

Query id: 0ad619c3-0f2a-4ee4-8b40-c73d86e04314

┌─statement──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ CREATE TABLE system.s3queue_log
(
    `event_date` Date,
    `event_time` DateTime,
    `table_uuid` String,
    `file_name` String,
    `rows_processed` UInt64,
    `status` Enum8('Processed' = 0, 'Failed' = 1),
    `processing_start_time` Nullable(DateTime),
    `processing_end_time` Nullable(DateTime),
    `ProfileEvents` Map(String, UInt64),
    `exception` String
)
ENGINE = MergeTree
PARTITION BY toYYYYMM(event_date)
ORDER BY (event_date, event_time) │
└────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
```

`system.s3queue_log`를 사용하려면 서버 구성 파일에 해당 구성을 정의하십시오:

```xml theme={null}
    <s3queue_log>
        <database>system</database>
        <table>s3queue_log</table>
    </s3queue_log>
```

예시:

```sql theme={null}
SELECT *
FROM system.s3queue_log

Row 1:
──────
event_date:            2023-10-13
event_time:            2023-10-13 13:10:12
table_uuid:
file_name:             wikistat/original/pageviews-20150501-020000.gz
rows_processed:        5112621
status:                Processed
processing_start_time: 2023-10-13 13:09:48
processing_end_time:   2023-10-13 13:10:12
ProfileEvents:         {'ZooKeeperTransactions':3,'ZooKeeperGet':2,'ZooKeeperMulti':1,'SelectedRows':5112621,'SelectedBytes':198577687,'ContextLock':1,'S3QueueSetFileProcessingMicroseconds':1934,'S3QueueSetFileProcessedMicroseconds':17063,'S3QueuePullMicroseconds':5841972,'LogTest':17}
exception:
```
