> ## 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 および Google Cloud Storage 内のファイルに対して select/insert を行うためのテーブル形式インターフェイスを提供します。このテーブル関数は hdfs 関数に似ていますが、S3 固有の機能を備えています。

# s3 テーブル関数

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

export const ExperimentalBadge = () => {
  return <div className="experimentalBadge">
            <div className="experimentalIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.25" d="M5.5 2H10.5" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M9.50015 2V6.19625L13.4283 12.7425C13.4738 12.8183 13.4985 12.9049 13.4996 12.9934C13.5008 13.0818 13.4785 13.169 13.435 13.246C13.3914 13.323 13.3283 13.3871 13.2519 13.4317C13.1755 13.4764 13.0886 13.4999 13.0002 13.5H3.00015C2.91164 13.5 2.8247 13.4766 2.74822 13.432C2.67174 13.3874 2.60847 13.3233 2.56487 13.2463C2.52126 13.1693 2.49889 13.082 2.50004 12.9935C2.50119 12.905 2.52582 12.8184 2.5714 12.7425L6.50015 6.19625V2" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.25" d="M4.47656 9.56754C5.30344 9.41254 6.47656 9.47942 7.99969 10.25C10.0153 11.2707 11.4216 11.0569 12.2184 10.7282" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            Experimental feature. <u><a href="/docs/beta-and-experimental-features#experimental-features">Learn more.</a></u>
        </div>;
};

[Amazon S3](https://aws.amazon.com/s3/) および [Google Cloud Storage](https://cloud.google.com/storage/) 内のファイルに対して SELECT/INSERT を行うためのテーブル形式インターフェイスを提供します。このテーブル関数は [hdfs function](/ja/reference/functions/table-functions/hdfs) に似ていますが、S3 固有の機能を備えています。

クラスター内に複数のレプリカがある場合は、代わりに [s3Cluster function](/ja/reference/functions/table-functions/s3Cluster) を使用して INSERT を並列化できます。

`s3 table function` を [`INSERT INTO...SELECT`](/ja/reference/statements/insert-into#inserting-the-results-of-select) と併用すると、データはストリーミング方式で読み込まれ、挿入されます。S3 からブロックが継続的に読み込まれて宛先テーブルに送られるため、メモリ上に保持されるデータブロックはごく少数です。

<div id="syntax">
  ## 構文
</div>

```sql theme={null}
s3(url [, NOSIGN | access_key_id, secret_access_key, [session_token]] [,format] [,structure] [,compression_method],[,headers], [,extra_credentials], [,partition_strategy], [,partition_columns_in_data_file])
s3(named_collection[, option=value [,..]])
```

<Tip>
  **GCS**

  `S3` テーブル関数は、GCS XML API と HMAC キーを使用して Google Cloud Storage と連携できます。エンドポイントと HMAC の詳細については、[Google の相互運用性に関するドキュメント](https://cloud.google.com/storage/docs/interoperability)を参照してください。

  GCS を使用する場合は、`access_key_id` と `secret_access_key` の箇所を、それぞれお使いの HMAC キーと HMAC シークレットに置き換えてください。
</Tip>

**パラメーター**

`s3` テーブル関数は、以下の通常のパラメーターをサポートします。

| パラメーター                                  | 説明                                                                                                                                                                                                                                                    |
| --------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `url`                                   | ファイルへのパスを含むバケット URL。読み取り専用モードでは、`*`、`**`、`?`、`{abc,def}`、`{N..M}` のワイルドカードをサポートします。ここで、`N` と `M` は数値、`'abc'` と `'def'` は文字列です。詳細は[こちら](/ja/reference/engines/table-engines/integrations/s3#wildcards-in-path)を参照してください。                               |
| `NOSIGN`                                | 認証情報の代わりにこのキーワードを指定すると、すべてのリクエストが署名なしで送信されます。                                                                                                                                                                                                         |
| `access_key_id` and `secret_access_key` | 指定した endpoint で使用する認証情報を指定するキーです。省略可能です。                                                                                                                                                                                                              |
| `session_token`                         | 指定したキーとともに使用するセッショントークンです。キーを渡す場合は省略可能です。                                                                                                                                                                                                             |
| `format`                                | ファイルの[フォーマット](/ja/reference/formats)です。                                                                                                                                                                                                               |
| `structure`                             | テーブルの構造です。形式は `'column1_name column1_type, column2_name column2_type, ...'` です。                                                                                                                                                                       |
| `compression_method`                    | 省略可能なパラメーターです。サポートされる値は `none`、`gzip` または `gz`、`brotli` または `br`、`xz` または `LZMA`、`zstd` または `zst` です。デフォルトでは、ファイル拡張子から圧縮方式を自動判別します。                                                                                                                   |
| `headers`                               | 省略可能なパラメーターです。S3 リクエストにヘッダーを渡せます。形式は `headers(key=value)` です。例: `headers('x-amz-request-payer' = 'requester')`。                                                                                                                                       |
| `partition_strategy`                    | 省略可能なパラメーターです。サポートされる値は `WILDCARD` または `HIVE` です。`WILDCARD` ではパス内に `{_partition_id}` が必要で、これはパーティションキーに置き換えられます。`HIVE` ではワイルドカードは使用できず、パスがテーブルのルートであると見なされ、ファイル名に Snowflake ID、拡張子にファイルフォーマットを使用した Hive 形式のパーティションディレクトリが生成されます。デフォルトは `WILDCARD` です。 |
| `partition_columns_in_data_file`        | 省略可能なパラメーターです。`HIVE` パーティション方式でのみ使用されます。パーティションカラムがデータファイルに書き込まれている想定かどうかを ClickHouse に指定します。デフォルトは `false` です。                                                                                                                                       |
| `extra_credentials`                     | 省略可能なパラメーターです。ClickHouse Cloud のロールベースアクセスで `role_arn` を渡すために使用します。設定手順については [Secure S3](/ja/products/cloud/guides/data-sources/accessing-s3-data-securely) を参照してください。                                                                                |
| `storage_class_name`                    | 省略可能なパラメーターです。サポートされる値は `STANDARD` または `INTELLIGENT_TIERING` です。[AWS S3 Intelligent Tiering](https://aws.amazon.com/s3/storage-classes/intelligent-tiering/) を指定できます。デフォルトは `STANDARD` です。                                                            |

<Info>
  **GCS**

  Google XML API の endpoint は JSON API とは異なるため、GCS の URL は次の形式になります。

  ```text theme={null}
    https://storage.googleapis.com/<bucket>/<folder>/<filename(s)>
  ```

  ~~[https://storage.cloud.google.com](https://storage.cloud.google.com)~~ ではありません。
</Info>

引数は、[名前付きコレクション](/ja/concepts/features/configuration/server-config/named-collections)を使って渡すこともできます。この場合、`url`、`access_key_id`、`secret_access_key`、`format`、`structure`、`compression_method` は同様に機能し、さらにいくつかの追加パラメーターをサポートします。

| 引数                            | 説明                                                                                                                                                                                |
| ----------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `filename`                    | 指定した場合、URL に追加されます。                                                                                                                                                               |
| `use_environment_credentials` | デフォルトで有効です。環境変数 `AWS_CONTAINER_CREDENTIALS_RELATIVE_URI`、`AWS_CONTAINER_CREDENTIALS_FULL_URI`、`AWS_CONTAINER_AUTHORIZATION_TOKEN`、`AWS_EC2_METADATA_DISABLED` を使用して追加のパラメータを渡せます。 |
| `no_sign_request`             | デフォルトでは無効です。                                                                                                                                                                      |
| `expiration_window_seconds`   | デフォルト値は 120 です。                                                                                                                                                                   |

<div id="returned_value">
  ## 戻り値
</div>

指定したファイル内のデータの読み書きに使用する、指定した構造を持つテーブル。

<div id="examples">
  ## 例
</div>

S3 上のファイル `https://datasets-documentation.s3.eu-west-3.amazonaws.com/aapl_stock.csv` からテーブルの先頭 5 行を選択する例:

```sql theme={null}
SELECT *
FROM s3(
   'https://datasets-documentation.s3.eu-west-3.amazonaws.com/aapl_stock.csv',
   'CSVWithNames'
)
LIMIT 5;
```

```response theme={null}
┌───────Date─┬────Open─┬────High─┬─────Low─┬───Close─┬───Volume─┬─OpenInt─┐
│ 1984-09-07 │ 0.42388 │ 0.42902 │ 0.41874 │ 0.42388 │ 23220030 │       0 │
│ 1984-09-10 │ 0.42388 │ 0.42516 │ 0.41366 │ 0.42134 │ 18022532 │       0 │
│ 1984-09-11 │ 0.42516 │ 0.43668 │ 0.42516 │ 0.42902 │ 42498199 │       0 │
│ 1984-09-12 │ 0.42902 │ 0.43157 │ 0.41618 │ 0.41618 │ 37125801 │       0 │
│ 1984-09-13 │ 0.43927 │ 0.44052 │ 0.43927 │ 0.43927 │ 57822062 │       0 │
└────────────┴─────────┴─────────┴─────────┴─────────┴──────────┴─────────┘
```

<Note>
  ClickHouse は、ファイル名の拡張子からデータのフォーマットを判別します。たとえば、前のコマンドは `CSVWithNames` を指定しなくても実行できました。

  ```sql theme={null}
  SELECT *
  FROM s3(
     'https://datasets-documentation.s3.eu-west-3.amazonaws.com/aapl_stock.csv'
  )
  LIMIT 5;
  ```

  ClickHouse はファイルの圧縮方式も判別できます。たとえば、ファイル名が `.csv.gz` で終わっていれば、ClickHouse が自動的に展開します。
</Note>

<Note>
  `*.parquet.snappy` や `*.parquet.zstd` のような名前の Parquet ファイルは、ClickHouse が誤って解釈し、`TOO_LARGE_COMPRESSED_BLOCK` や `ZSTD_DECODER_FAILED` エラーの原因になることがあります。
  これは、Parquet では実際には行グループ単位およびカラム単位で圧縮が行われているにもかかわらず、ClickHouse がファイル全体を Snappy または ZSTD でエンコードされたデータとして読み込もうとするためです。

  Parquet のメタデータには、各カラムの圧縮方式がすでに記録されているため、ファイル拡張子は不要です。
  このような場合は、`compression_method = 'none'` を指定してください。

  ```sql theme={null}
  SELECT *
  FROM s3(
    'https://<my-bucket>.s3.<my-region>.amazonaws.com/path/to/my-data.parquet.snappy',
    compression_format = 'none'
  );
  ```
</Note>

<div id="usage">
  ## 使用方法
</div>

S3上に以下のURIを持つ複数のファイルがあるとします：

* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some\&#95;prefix/some\&#95;file\&#95;1.csv\&#39](https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some\&#95;prefix/some\&#95;file\&#95;1.csv\&#39);
* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some\&#95;prefix/some\&#95;file\&#95;2.csv\&#39](https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some\&#95;prefix/some\&#95;file\&#95;2.csv\&#39);
* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some\&#95;prefix/some\&#95;file\&#95;3.csv\&#39](https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some\&#95;prefix/some\&#95;file\&#95;3.csv\&#39);
* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some\&#95;prefix/some\&#95;file\&#95;4.csv\&#39](https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/some\&#95;prefix/some\&#95;file\&#95;4.csv\&#39);
* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another\&#95;prefix/some\&#95;file\&#95;1.csv\&#39](https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another\&#95;prefix/some\&#95;file\&#95;1.csv\&#39);
* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another\&#95;prefix/some\&#95;file\&#95;2.csv\&#39](https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another\&#95;prefix/some\&#95;file\&#95;2.csv\&#39);
* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another\&#95;prefix/some\&#95;file\&#95;3.csv\&#39](https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another\&#95;prefix/some\&#95;file\&#95;3.csv\&#39);
* '[https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another\&#95;prefix/some\&#95;file\&#95;4.csv\&#39](https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/another\&#95;prefix/some\&#95;file\&#95;4.csv\&#39);

1から3までの数字で終わるファイルの行数を数えます：

```sql theme={null}
SELECT count(*)
FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/my-test-bucket-768/{some,another}_prefix/some_file_{1..3}.csv', 'CSV', 'column1 UInt32, column2 UInt32, column3 UInt32')
```

```text theme={null}
┌─count()─┐
│      18 │
└─────────┘
```

これら2つのディレクトリ内のすべてのファイルの合計行数を取得します：

```sql theme={null}
SELECT count(*)
FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/my-test-bucket-768/{some,another}_prefix/*', 'CSV', 'column1 UInt32, column2 UInt32, column3 UInt32')
```

```text theme={null}
┌─count()─┐
│      24 │
└─────────┘
```

<Tip>
  ファイル一覧に先頭がゼロの数値範囲が含まれている場合は、各桁を個別に波括弧で指定するか、`?` を使用してください。
</Tip>

`file-000.csv`、`file-001.csv`、...、`file-999.csv` という名前のファイル内の総行数をカウントします：

```sql theme={null}
SELECT count(*)
FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/my-test-bucket-768/big_prefix/file-{000..999}.csv', 'CSV', 'column1 UInt32, column2 UInt32, column3 UInt32');
```

```text theme={null}
┌─count()─┐
│      12 │
└─────────┘
```

`test-data.csv.gz` ファイルにデータを挿入します：

```sql theme={null}
INSERT INTO FUNCTION s3('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/test-data.csv.gz', 'CSV', 'name String, value UInt32', 'gzip')
VALUES ('test-data', 1), ('test-data-2', 2);
```

既存のテーブルからファイル `test-data.csv.gz` にデータを挿入する:

```sql theme={null}
INSERT INTO FUNCTION s3('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/test-data.csv.gz', 'CSV', 'name String, value UInt32', 'gzip')
SELECT name, value FROM existing_table;
```

Glob \*\* を使用すると、ディレクトリを再帰的にトラバースできます。次の例では、`my-test-bucket-768` ディレクトリからすべてのファイルを再帰的にフェッチします。

```sql theme={null}
SELECT * FROM s3('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/**', 'CSV', 'name String, value UInt32', 'gzip');
```

以下は、`my-test-bucket` ディレクトリ内の任意のフォルダにあるすべての `test-data.csv.gz` ファイルからデータを再帰的に取得します：

```sql theme={null}
SELECT * FROM s3('https://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/**/test-data.csv.gz', 'CSV', 'name String, value UInt32', 'gzip');
```

注意: サーバー設定ファイルにカスタムURLマッパーを指定できます。例:

```sql theme={null}
SELECT * FROM s3('s3://clickhouse-public-datasets/my-test-bucket-768/**/test-data.csv.gz', 'CSV', 'name String, value UInt32', 'gzip');
```

URL `'s3://clickhouse-public-datasets/my-test-bucket-768/**/test-data.csv.gz'` は `'http://clickhouse-public-datasets.s3.amazonaws.com/my-test-bucket-768/**/test-data.csv.gz'` に変換されます。

カスタムマッパーは `config.xml` に追加できます:

```xml theme={null}
<url_scheme_mappers>
   <s3>
      <to>https://{bucket}.s3.amazonaws.com</to>
   </s3>
   <gs>
      <to>https://{bucket}.storage.googleapis.com</to>
   </gs>
   <oss>
      <to>https://{bucket}.oss.aliyuncs.com</to>
   </oss>
</url_scheme_mappers>
```

本番環境で利用する場合は、[名前付きコレクション](/ja/concepts/features/configuration/server-config/named-collections) の使用を推奨します。以下に例を示します。

```sql theme={null}

CREATE NAMED COLLECTION creds AS
        access_key_id = '***',
        secret_access_key = '***';
SELECT count(*)
FROM s3(creds, url='https://s3-object-url.csv')
```

<div id="partitioned-write">
  ## パーティション分割書き込み
</div>

<div id="partition-strategy">
  ### パーティション方式
</div>

`INSERT`クエリでのみサポートされます。

`WILDCARD` (デフォルト) : ファイルパス内の`{_partition_id}`ワイルドカードを実際のパーティションキーに置き換えます。

`HIVE`は、読み取りと書き込みで Hive スタイルのパーティション化を行います。ファイルは次のフォーマットで生成されます: `<prefix>/<key1=val1/key2=val2...>/<snowflakeid>.<toLower(file_format)>`。

**`HIVE`パーティション方式の例**

```sql theme={null}
INSERT INTO FUNCTION s3(s3_conn, filename='t_03363_function', format=Parquet, partition_strategy='hive') PARTITION BY (year, country) SELECT 2020 as year, 'Russia' as country, 1 as id;
```

```result theme={null}
SELECT _path, * FROM s3(s3_conn, filename='t_03363_function/**.parquet');

   ┌─_path──────────────────────────────────────────────────────────────────────┬─id─┬─country─┬─year─┐
1. │ test/t_03363_function/year=2020/country=Russia/7351295896279887872.parquet │  1 │ Russia  │ 2020 │
   └────────────────────────────────────────────────────────────────────────────┴────┴─────────┴──────┘
```

**`WILDCARD` パーティション方式の例**

1. キーにパーティション ID を使用すると、ファイルが個別に作成されます。

```sql theme={null}
INSERT INTO TABLE FUNCTION
    s3('http://bucket.amazonaws.com/my_bucket/file_{_partition_id}.csv', 'CSV', 'a String, b UInt32, c UInt32')
    PARTITION BY a VALUES ('x', 2, 3), ('x', 4, 5), ('y', 11, 12), ('y', 13, 14), ('z', 21, 22), ('z', 23, 24);
```

その結果、データは `file_x.csv`、`file_y.csv`、`file_z.csv` の3つのファイルに書き込まれます。

2. バケット名にパーティション ID を含めると、別々のバケットにファイルが作成されます。

```sql theme={null}
INSERT INTO TABLE FUNCTION
    s3('http://bucket.amazonaws.com/my_bucket_{_partition_id}/file.csv', 'CSV', 'a UInt32, b UInt32, c UInt32')
    PARTITION BY a VALUES (1, 2, 3), (1, 4, 5), (10, 11, 12), (10, 13, 14), (20, 21, 22), (20, 23, 24);
```

その結果、データは異なるバケット内の3つのファイル、`my_bucket_1/file.csv`、`my_bucket_10/file.csv`、`my_bucket_20/file.csv` に書き込まれます。

<div id="accessing-public-buckets">
  ## 公開バケットへのアクセス
</div>

ClickHouse は、さまざまなソースから認証情報を取得しようとします。
そのため、公開バケットによってはアクセス時に問題が発生し、クライアントが `403` エラーコードを返すことがあります。
この問題は、`NOSIGN` キーワードを使用してクライアントがすべての認証情報を無視し、リクエストに署名しないようにすることで回避できます。

```sql theme={null}
SELECT *
FROM s3(
   'https://datasets-documentation.s3.eu-west-3.amazonaws.com/aapl_stock.csv',
   NOSIGN,
   'CSVWithNames'
)
LIMIT 5;
```

<div id="using-s3-credentials-clickhouse-cloud">
  ## S3認証情報の使用 (ClickHouse Cloud)
</div>

公開されていないバケットでは、`aws_access_key_id` と `aws_secret_access_key` を関数に渡すことができます。例:

```sql theme={null}
SELECT count() FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/mta/*.tsv', '<KEY>', '<SECRET>','TSVWithNames')
```

これは、一時的なアクセスや、認証情報を容易にローテーションできる場合に適しています。ただし、長期にわたって繰り返しアクセスする用途や、認証情報の機密性が高い場合には推奨されません。そのような場合は、role-based access を使用することを推奨します。

ClickHouse Cloud での S3 の role-based access については、[こちら](/ja/products/cloud/guides/data-sources/accessing-s3-data-securely)を参照してください。

設定後は、`roleARN` を `extra_credentials` パラメータ経由で s3 function に渡せます。例:

```sql theme={null}
SELECT count() FROM s3('https://datasets-documentation.s3.eu-west-3.amazonaws.com/mta/*.tsv','CSVWithNames',extra_credentials(role_arn = 'arn:aws:iam::111111111111:role/ClickHouseAccessRole-001'))
```

さらに詳しい例は[こちら](/ja/products/cloud/guides/data-sources/accessing-s3-data-securely#access-your-s3-bucket-with-the-clickhouseaccess-role)をご覧ください

<div id="working-with-archives">
  ## アーカイブの扱い
</div>

S3 上に、次の URI を持つ複数のアーカイブファイルがあるとします。

* '[https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-10.csv.zip\&#39](https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-10.csv.zip\&#39);
* '[https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-11.csv.zip\&#39](https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-11.csv.zip\&#39);
* '[https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-12.csv.zip\&#39](https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-12.csv.zip\&#39);

:: を使うと、これらのアーカイブからデータを抽出できます。グロブは URL 部分と、:: の後の部分 (アーカイブ内のファイル名を指定する部分) の両方で使用できます。

```sql theme={null}
SELECT *
FROM s3(
   'https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m-2018-01-1{0..2}.csv.zip :: *.csv'
);
```

<Note>
  ClickHouse は、次の 3 つのアーカイブフォーマットをサポートしています。
  ZIP
  TAR
  7Z
  ZIP アーカイブと TAR アーカイブはサポート対象の任意のストレージからアクセスできますが、7Z アーカイブは ClickHouse がインストールされているローカルのファイルシステムからのみ読み取れます。
</Note>

<div id="inserting-data">
  ## データの挿入
</div>

行を挿入できるのは新しいファイルに対してのみである点に注意してください。マージサイクルやファイルの分割処理はありません。いったんファイルが書き込まれると、その後の挿入は失敗します。詳細は[こちら](/ja/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse#inserting-data)を参照してください。

<div id="virtual-columns">
  ## 仮想カラム
</div>

* `_path` — ファイルのパス。Type: `LowCardinality(String)`。アーカイブの場合は、`"{path_to_archive}::{path_to_file_inside_archive}"` 形式のパスを表示します。
* `_file` — ファイル名。Type: `LowCardinality(String)`。アーカイブの場合は、アーカイブ内のファイル名を表示します。
* `_size` — ファイルサイズ (バイト単位) 。Type: `Nullable(UInt64)`。ファイルサイズが不明な場合、値は `NULL` です。アーカイブの場合は、アーカイブ内のファイルの非圧縮サイズを表示します。
* `_time` — ファイルの最終更新時刻。Type: `Nullable(DateTime)`。時刻が不明な場合、値は `NULL` です。

<div id="hive-style-partitioning">
  ## use\_hive\_partitioning 設定
</div>

これは、読み取り時に ClickHouse が Hive スタイルでパーティション化されたファイルを解析するためのヒントです。書き込みには影響しません。読み取りと書き込みを対称的に行うには、`partition_strategy` 引数を使用してください。

`use_hive_partitioning` を 1 に設定すると、ClickHouse はパス (`/name=value/`) 内の Hive スタイルのパーティション化を検出し、クエリ内でパーティションカラムを仮想カラムとして使用できるようになります。これらの仮想カラムには、パーティション化されたパス内と同じ名前が付きます。

**例**

```sql theme={null}
SELECT * FROM s3('s3://data/path/date=*/country=*/code=*/*.parquet') WHERE date > '2020-01-01' AND country = 'Netherlands' AND code = 42;
```

<div id="accessing-requester-pays-buckets">
  ## requester-pays バケットへのアクセス
</div>

requester-pays バケットにアクセスするには、すべてのリクエストにヘッダー `x-amz-request-payer = requester` を含める必要があります。これを行うには、s3関数にパラメーター `headers('x-amz-request-payer' = 'requester')` を渡します。例:

```sql theme={null}
SELECT
    count() AS num_rows,
    uniqExact(_file) AS num_files
FROM s3('https://coiled-datasets-rp.s3.us-east-1.amazonaws.com/1trc/measurements-100*.parquet', 'AWS_ACCESS_KEY_ID', 'AWS_SECRET_ACCESS_KEY', headers('x-amz-request-payer' = 'requester'))

┌───num_rows─┬─num_files─┐
│ 1110000000 │       111 │
└────────────┴───────────┘

1 row in set. Elapsed: 3.089 sec. Processed 1.09 billion rows, 0.00 B (353.55 million rows/s., 0.00 B/s.)
Peak memory usage: 192.27 KiB.
```

<div id="storage-settings">
  ## ストレージ設定
</div>

* [s3\_truncate\_on\_insert](/ja/reference/settings/session-settings#s3_truncate_on_insert) - ファイルに insert する前に、そのファイルを切り詰めることを許可します。デフォルトでは無効です。
* [s3\_create\_new\_file\_on\_insert](/ja/reference/settings/session-settings#s3_create_new_file_on_insert) - フォーマットに接尾辞がある場合、insert のたびに新しいファイルを作成することを許可します。デフォルトでは無効です。
* [s3\_skip\_empty\_files](/ja/reference/settings/session-settings#s3_skip_empty_files) - 読み取り時に空のファイルをスキップすることを許可します。デフォルトでは有効です。

<div id="nested-avro-schemas">
  ## ネストされた Avro スキーマ
</div>

ファイルごとに構造が異なる**ネストされたレコード**を含む Avro ファイルを読み込むと (たとえば、一部のファイルではネストされたオブジェクト内に追加のフィールドがある場合) 、ClickHouse は次のようなエラーを返すことがあります。

> record の leaf 数が tuple の要素数と一致しません...

これは、ClickHouse がすべてのネストされたレコード構造に同一のスキーマを期待しているためです。
このような場合は、次のいずれかの方法で対応できます。

* `schema_inference_mode='union'` を使用して、異なるネストされたレコードのスキーマをマージする、または
* ネストされた構造を手動で揃えたうえで、
  `use_structure_from_insertion_table_in_table_functions=1` を有効にする。

<Info>
  **パフォーマンスに関する注意**

  `schema_inference_mode='union'` は、スキーマを推論するために各ファイルをスキャンする必要があるため、非常に大規模な S3 データセットでは時間がかかる場合があります。
</Info>

**例**

```sql theme={null}
INSERT INTO data_stage
SELECT
    id,
    data
FROM s3('https://bucket-name/*.avro', 'Avro')
SETTINGS schema_inference_mode='union';

## 関連項目           

- [S3 エンジン](/reference/engines/table-engines/integrations/s3)
- [S3 と ClickHouse のインテグレーション](/integrations/connectors/data-ingestion/AWS/integrating-s3-with-clickhouse)
```
