> ## Documentation Index
> Fetch the complete documentation index at: https://clickhouse.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 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>
            ClickHouse Cloud では利用できません
        </div>;
};

<CloudNotSupportedBadge />

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

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

このエンジンは [Nullable](/docs/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](/docs/ja/reference/statements/create/table) クエリの詳細な説明を参照してください。

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

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

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

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

これらのパラメータは、[named collections](/docs/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](/docs/ja/reference/statements/create/dictionary/sources/odbc)
* [ODBC テーブル関数](/docs/ja/reference/functions/table-functions/odbc)
