odbc 테이블 함수
odbc 테이블 함수
ODBC(Open Database Connectivity)로 연결된 테이블을 반환하는 테이블 함수예요.
출처: 문서
본문
odbc 테이블 함수는 ODBC로 연결된 테이블을 반환해요.
문법 (Syntax)
odbc(datasource, external_database, external_table)
odbc(datasource, external_table)
odbc(named_collection)
인자 (Arguments)
| 인자 | 설명 |
|---|---|
datasource |
odbc.ini 파일에서 연결 설정이 있는 섹션의 이름이에요. |
external_database |
외부 DBMS의 데이터베이스 이름이에요. |
external_table |
external_database 안에 있는 테이블 이름이에요. |
이 파라미터들은 네임드 컬렉션으로도 전달할 수 있어요.
ODBC 연결을 안전하게 구현하기 위해 ClickHouse는 별도의 프로그램 clickhouse-odbc-bridge를 사용해요. ODBC 드라이버를 clickhouse-server에서 직접 로드하면 드라이버 문제가 ClickHouse 서버를 크래시시킬 수 있어요. ClickHouse는 필요할 때 clickhouse-odbc-bridge를 자동으로 시작해요. ODBC 브리지 프로그램은 clickhouse-server와 같은 패키지에서 설치돼요.
외부 테이블의 NULL 값이 있는 필드는 기본 데이터 타입의 기본값으로 변환돼요. 예를 들어 원격 MySQL 테이블 필드가 INT NULL 타입이면 0(ClickHouse Int32 데이터 타입의 기본값)으로 변환돼요.
사용 예시 (Usage Example)
ODBC를 통해 로컬 MySQL 설치에서 데이터 가져오기
이 예시는 Ubuntu Linux 18.04와 MySQL 서버 5.7에서 확인했어요.
unixODBC와 MySQL Connector가 설치되어 있는지 확인하세요.
기본적으로(패키지에서 설치한 경우) ClickHouse는 clickhouse 사용자로 실행돼요. 따라서 MySQL 서버에 이 사용자를 만들고 구성해야 해요.
$ sudo mysql
mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'clickhouse' WITH GRANT OPTION;
그런 다음 /etc/odbc.ini에 연결을 구성해요.
$ cat /etc/odbc.ini
[mysqlconn]
DRIVER = /usr/local/lib/libmyodbc5w.so
SERVER = 127.0.0.1
PORT = 3306
DATABASE = test
USERNAME = clickhouse
PASSWORD = clickhouse
unixODBC 설치의 isql 유틸리티로 연결을 확인할 수 있어요.
$ isql -v mysqlconn
+-------------------------+
| Connected! |
| |
...
MySQL의 테이블:
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 (`int_id`, `float`) VALUES (1,2);
Query OK, 1 row affected (0,00 sec)
mysql> select * from test;
+------+----------+-----+----------+
| int_id | int_nullable | float | float_nullable |
+------+----------+-----+----------+
| 1 | NULL | 2 | NULL |
+------+----------+-----+----------+
1 row in set (0,00 sec)
ClickHouse에서 MySQL 테이블의 데이터를 가져와요:
SELECT * FROM odbc('DSN=mysqlconn', 'test', 'test')
┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐
│ 1 │ 0 │ 2 │ 0 │
└────────┴──────────────┴───────┴────────────────┘