> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-parallel-read-in-order-multi-part.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> このエンジンでは、SQLite へのデータのインポートとエクスポートが可能で、 ClickHouse から SQLite のテーブルに対して直接クエリを実行することもできます。

# SQLite テーブルエンジン

export const CloudNotSupportedBadge = () => {
  return <a href="https://clickhouse.com/docs/products/cloud/guides/cloud-compatibility#list-of-unsupported-features" 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>
            ClickHouse Cloud ではサポートされていません
        </a>;
};

<CloudNotSupportedBadge />

このエンジンでは、SQLite との間でデータをインポートおよびエクスポートできるほか、ClickHouse から SQLite のテーブルに対して直接クエリを実行できます。

## テーブルの作成

```sql theme={null}
    CREATE TABLE [IF NOT EXISTS] [db.]table_name
    (
        name1 [type1],
        name2 [type2], ...
    ) ENGINE = SQLite('db_path', 'table')
```

**エンジンパラメータ**

* `db_path` — データベースを含む SQLite ファイルへのパス。
* `table` — SQLite データベース内のテーブル名、またはそのまま SQLite に渡されるクエリ ([テーブル名の代わりにクエリを渡す](#passing-a-query) を参照) 。

## テーブル名の代わりにクエリを渡す

テーブル名の代わりに、`table` 引数には、そのまま SQLite に渡される `SELECT` クエリを指定できます。テーブルの構造はクエリ結果から推論されます。クエリは、サブクエリとして記述することも、`query` 関数でラップすることもできます。

```sql theme={null}
CREATE TABLE sqlite_table ENGINE = SQLite('sqlite.db', (SELECT col1, col2 FROM table1 WHERE col2 > 1));
CREATE TABLE sqlite_table ENGINE = SQLite('sqlite.db', query('SELECT col1, col2 FROM table1 WHERE col2 > 1'));
```

このようなテーブルは読み取り専用で、これに対する `INSERT` は許可されていません。同じ構文は、[`sqlite`](/ja/reference/functions/table-functions/sqlite) テーブル関数でもサポートされています。

<Note>
  サブクエリ形式 `(SELECT ...)` は ClickHouse によってパースされ、SQLite に送信される前に再シリアライズされます。そのため、有効な ClickHouse SQL である必要があります。ClickHouse が解析しない SQLite 固有の構文を渡すには、`query('...')` 形式を使用してください。この形式では、テキストがそのまま SQLite に送信されます。

  周囲の ClickHouse クエリにある外側の `WHERE`、`LIMIT`、集約などは、渡したクエリには **プッシュダウンされず**、完全なクエリ結果を取得した後に ClickHouse で適用されます。SQLite から読み取るデータを制限するには、渡すクエリの中にフィルターを含めてください。[`external_table_strict_query = 1`](/ja/reference/settings/session-settings/external-table#external_table_strict_query) を指定すると、このテーブルのカラムに対する外側のフィルターは、渡したクエリにプッシュダウンできないため、ローカルで適用される代わりに例外を返して拒否されます。このチェックの対象は、トップレベルの `WHERE` の predicate と、トップレベルの `AND` の各項です。このテーブルのカラムに対する `PREWHERE` は、この設定の対象ではありません。このテーブルエンジンは `PREWHERE` をサポートしておらず、そのようなクエリは設定に関係なく `ILLEGAL_PREWHERE` で拒否されます。このチェックはフィルターをプッシュダウンできる可能性がある場所でのみ実行されます。すなわち、このテーブルがクエリ内の唯一のテーブルである場合、`INNER JOIN` のいずれかの側にある場合、または外部結合の保持側 (`LEFT JOIN` の左側、`RIGHT JOIN` の右側) にある場合です。`LEFT`/`RIGHT JOIN` の非保持側や `FULL JOIN` のいずれの側でも、何もプッシュダウンされず、何もチェックされないため、このテーブルのカラムに対するフィルターは、厳格モードであっても join の後にローカルで適用されます。チェックが実行される場所では、周囲のクエリで join されている他のテーブルを参照する predicate はプッシュダウンされず、チェックの対象から除外されます。これは、join 側のみを参照する場合でも、`AND` 以外の 1 つの expression (たとえば `OR`) の中でこのテーブルと混在させている場合でも同様です。そのような predicate は通常の ClickHouse での評価位置 (join の後の `WHERE`、その前の `PREWHERE`) を保持し、拒否されることはありません。
</Note>

## サポートされるデータ型

テーブル定義で ClickHouse のカラム型を明示的に指定すると、SQLite の TEXT カラムから以下の ClickHouse 型をパースできます。

* [Date](/ja/reference/data-types/date), [Date32](/ja/reference/data-types/date32)
* [DateTime](/ja/reference/data-types/datetime), [DateTime64](/ja/reference/data-types/datetime64)
* [UUID](/ja/reference/data-types/uuid)
* [Enum8, Enum16](/ja/reference/data-types/enum)
* [Decimal32, Decimal64, Decimal128, Decimal256](/ja/reference/data-types/decimal)
* [FixedString](/ja/reference/data-types/fixedstring)
* すべての整数型 ([UInt8, UInt16, UInt32, UInt64, Int8, Int16, Int32, Int64](/ja/reference/data-types/int-uint))
* [Float32, Float64](/ja/reference/data-types/float)

デフォルトの型マッピングについては、[SQLite データベースエンジン](/ja/reference/engines/database-engines/sqlite#data_types-support) を参照してください。

## 使用例

SQLite のテーブルを作成するクエリを示します。

```sql theme={null}
SHOW CREATE TABLE sqlite_db.table2;
```

```text theme={null}
CREATE TABLE SQLite.table2
(
    `col1` Nullable(Int32),
    `col2` Nullable(String)
)
ENGINE = SQLite('sqlite.db','table2');
```

テーブルのデータを返します：

```sql theme={null}
SELECT * FROM sqlite_db.table2 ORDER BY col1;
```

```text theme={null}
┌─col1─┬─col2──┐
│    1 │ text1 │
│    2 │ text2 │
│    3 │ text3 │
└──────┴───────┘
```

**関連項目**

* [SQLite](/ja/reference/engines/database-engines/sqlite) エンジン
* [sqlite](/ja/reference/functions/table-functions/sqlite) テーブル関数
