> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-home-button.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 브리지 프로그램은 `clickhouse-server`와 동일한 패키지에서 설치됩니다.

이 엔진은 [Nullable](/ko/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](/ko/reference/statements/create/table) 쿼리에 대한 자세한 설명은 해당 문서를 참조하십시오.

테이블 구조는 원본 테이블 구조와 다를 수 있습니다:

* 컬럼 이름은 원본 테이블과 동일해야 하지만, 이들 중 일부만 사용하거나 순서를 임의로 지정할 수 있습니다.
* 컬럼 타입은 원본 테이블의 타입과 다를 수 있습니다. ClickHouse는 값을 ClickHouse 데이터 타입으로 [cast](/ko/reference/functions/regular-functions/type-conversion-functions#CAST)하려고 시도합니다.
* [external\_table\_functions\_use\_nulls](/ko/reference/settings/session-settings#external_table_functions_use_nulls) 설정은 널 허용 컬럼을 처리하는 방식을 정의합니다. 기본값은 1입니다. 값이 0이면 테이블 함수는 널 허용 컬럼을 생성하지 않고, null 대신 기본값을 삽입합니다. 이는 배열 내부의 NULL 값에도 적용됩니다.

**엔진 매개변수**

* `datasource` — `odbc.ini` 파일에서 연결 설정이 포함된 섹션의 이름입니다.
* `external_database` — 외부 DBMS의 데이터베이스 이름입니다.
* `external_table` — `external_database`에 있는 테이블 이름입니다.

이러한 매개변수는 [이름이 지정된 컬렉션](/ko/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 딕셔너리](/ko/reference/statements/create/dictionary/sources/odbc)
* [ODBC 테이블 함수](/ko/reference/functions/table-functions/odbc)
