> ## 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.

> ClickHouse が ODBC 経由で外部データベースに接続できるようにします。

# ODBC テーブルエンジン

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>;
};

[ODBC](https://en.wikipedia.org/wiki/Open_Database_Connectivity) 経由で、ClickHouse を外部データベースに接続できます。

ODBC 接続を安全に実装するため、ClickHouse は別プログラムの `clickhouse-odbc-bridge` を使用します。ODBC ドライバを `clickhouse-server` から直接読み込むと、ドライバーの問題によって ClickHouse サーバーがクラッシュする可能性があります。ClickHouse は必要に応じて `clickhouse-odbc-bridge` を自動的に起動します。ODBC bridge プログラムは、`clickhouse-server` と同じパッケージからインストールされます。

この engine は [Nullable](/ja/reference/data-types/nullable) データ型をサポートしています。

<div id="creating-a-table">
  ## テーブルの作成
</div>

```sql theme={null}
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
    name1 [type1],
    name2 [type2],
    ...
)
ENGINE = ODBC(datasource, external_database, external_table)
```

[CREATE TABLE](/ja/reference/statements/create/table) クエリの詳細な説明を参照してください。

テーブル構造は、ソーステーブルの構造と異なる場合があります。

* カラム名はソーステーブルのものと同じである必要がありますが、それらの一部だけを任意の順序で使用できます。
* カラムの型は、ソーステーブルのものと異なる場合があります。ClickHouse は値を ClickHouse のデータ型に [キャスト](/ja/reference/functions/regular-functions/type-conversion-functions#CAST) しようとします。
* [external\_table\_functions\_use\_nulls](/ja/reference/settings/session-settings#external_table_functions_use_nulls) 設定は、Nullable カラムの処理方法を定義します。デフォルト値: 1。0 の場合、テーブル関数は Nullable カラムを作成せず、NULL の代わりにデフォルト値を挿入します。これは Array 内の NULL 値にも適用されます。

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

* `datasource` — `odbc.ini` ファイル内の接続設定を含むセクション名。
* `external_database` — 外部 DBMS 内のデータベース名。
* `external_table` — `external_database` 内のテーブル名。

これらのパラメータは、[名前付きコレクション](/ja/concepts/features/configuration/server-config/named-collections) を使用して渡すこともできます。

<div id="usage-example">
  ## 使用例
</div>

**ODBC 経由でローカルにインストールされた MySQL からデータを取得する**

この例は、Ubuntu Linux 18.04 および MySQL server 5.7 で動作確認しています。

unixODBC と MySQL Connector がインストールされていることを確認してください。

デフォルトでは (パッケージからインストールした場合) 、ClickHouse はユーザー `clickhouse` として起動します。そのため、MySQL server 側でこのユーザーを作成し、設定する必要があります。

```bash theme={null}
$ sudo mysql
```

```sql theme={null}
mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'localhost' WITH GRANT OPTION;
```

次に、`/etc/odbc.ini` で接続設定を行います。

```bash theme={null}
$ cat /etc/odbc.ini
[mysqlconn]
DRIVER = /usr/local/lib/libmyodbc5w.so
SERVER = 127.0.0.1
PORT = 3306
DATABASE = test
USER = clickhouse
PASSWORD = clickhouse
```

unixODBC に付属の `isql` ユーティリティを使用して、接続を確認できます。

```bash theme={null}
$ isql -v mysqlconn
+-------------------------+
| Connected!                            |
|                                       |
...
```

MySQLのテーブル：

```text theme={null}
mysql> CREATE DATABASE test;
Query OK, 1 row affected (0,01 sec)

mysql> CREATE TABLE `test`.`test` (
    ->   `int_id` INT NOT NULL AUTO_INCREMENT,
    ->   `int_nullable` INT NULL DEFAULT NULL,
    ->   `float` FLOAT NOT NULL,
    ->   `float_nullable` FLOAT NULL DEFAULT NULL,
    ->   PRIMARY KEY (`int_id`));
Query OK, 0 rows affected (0,09 sec)

mysql> insert into test.test (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)

mysql> select * from test.test;
+------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable |
+------+----------+-----+----------+
|      1 |         NULL |     2 |           NULL |
+------+----------+-----+----------+
1 row in set (0,00 sec)
```

MySQL テーブルからデータを取得する ClickHouse 側のテーブル:

```sql theme={null}
CREATE TABLE odbc_t
(
    `int_id` Int32,
    `float_nullable` Nullable(Float32)
)
ENGINE = ODBC('DSN=mysqlconn', 'test', 'test')
```

```sql theme={null}
SELECT * FROM odbc_t
```

```text theme={null}
┌─int_id─┬─float_nullable─┐
│      1 │           ᴺᵁᴸᴸ │
└────────┴────────────────┘
```

<div id="see-also">
  ## 関連項目
</div>

* [ODBC Dictionary](/ja/reference/statements/create/dictionary/sources/odbc)
* [ODBC テーブル関数](/ja/reference/functions/table-functions/odbc)
