Help wanted!

The following content of this documentation page has been machine-translated. But unlike other websites, it is not done on the fly. This translated text lives on GitHub repository alongside main ClickHouse codebase and waits for fellow native speakers to make it more human-readable. You can also use the original English version as a reference.

Help ClickHouse documentation by editing this page

odbc

返回通过连接的表 ODBC.

  1. odbc(connection_settings, external_database, external_table)

参数:

  • connection_settings — Name of the section with connection settings in the odbc.ini 文件
  • external_database — Name of a database in an external DBMS.
  • external_table — Name of a table in the 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 数据类型)。

用法示例

通过ODBC从本地MySQL安装获取数据

此示例检查Ubuntu Linux18.04和MySQL服务器5.7。

确保安装了unixODBC和MySQL连接器。

默认情况下(如果从软件包安装),ClickHouse以用户身份启动 clickhouse. 因此,您需要在MySQL服务器中创建和配置此用户。

  1. $ sudo mysql
  1. mysql> CREATE USER 'clickhouse'@'localhost' IDENTIFIED BY 'clickhouse';
  2. mysql> GRANT ALL PRIVILEGES ON *.* TO 'clickhouse'@'clickhouse' WITH GRANT OPTION;

然后配置连接 /etc/odbc.ini.

  1. $ cat /etc/odbc.ini
  2. [mysqlconn]
  3. DRIVER = /usr/local/lib/libmyodbc5w.so
  4. SERVER = 127.0.0.1
  5. PORT = 3306
  6. DATABASE = test
  7. USERNAME = clickhouse
  8. PASSWORD = clickhouse

您可以使用 isql unixodbc安装中的实用程序。

  1. $ isql -v mysqlconn
  2. +-------------------------+
  3. | Connected! |
  4. | |
  5. ...

MySQL中的表:

  1. mysql> CREATE TABLE `test`.`test` (
  2. -> `int_id` INT NOT NULL AUTO_INCREMENT,
  3. -> `int_nullable` INT NULL DEFAULT NULL,
  4. -> `float` FLOAT NOT NULL,
  5. -> `float_nullable` FLOAT NULL DEFAULT NULL,
  6. -> PRIMARY KEY (`int_id`));
  7. Query OK, 0 rows affected (0,09 sec)
  8. mysql> insert into test (`int_id`, `float`) VALUES (1,2);
  9. Query OK, 1 row affected (0,00 sec)
  10. mysql> select * from test;
  11. +------+----------+-----+----------+
  12. | int_id | int_nullable | float | float_nullable |
  13. +------+----------+-----+----------+
  14. | 1 | NULL | 2 | NULL |
  15. +------+----------+-----+----------+
  16. 1 row in set (0,00 sec)

从ClickHouse中的MySQL表中检索数据:

  1. SELECT * FROM odbc('DSN=mysqlconn', 'test', 'test')
  1. ┌─int_id─┬─int_nullable─┬─float─┬─float_nullable─┐
  2. 1 0 2 0
  3. └────────┴──────────────┴───────┴────────────────┘

另请参阅

原始文章