该驱动程序仍在积极开发中。某些 ODBC 功能可能尚未完全实现。当前版本
侧重于提供基本连接能力和核心 ODBC 功能,未来版本还将推出更多功能。您的反馈非常宝贵,有助于指导新功能和改进事项的优先级。如果您遇到
限制、功能缺失或非预期行为,请通过问题跟踪器分享您的观察或功能请求:
https://github.com/ClickHouse/clickhouse-odbc/issues
在 Windows 上安装
测试
$reader.GetValue(0) 后,应会显示你的 ClickHouse
服务器版本。
配置参数
Url:指定 ClickHouse 服务器的完整 HTTP(S) 端点,包括协议、主机、端口以及 可选路径。Username:用于向 ClickHouse 服务器进行身份验证的用户名。Password:与指定用户名关联的密码。如果未提供,驱动程序将不使用密码 身份验证直接连接。Database:该连接使用的默认数据库。Timeout:驱动程序在中止请求前等待服务器响应的最长时间 (以秒为单位) 。ClientName:作为客户端元数据的一部分发送到 ClickHouse 服务器的自定义标识符。可用于追踪或 区分来自不同应用程序的流量。该参数会作为驱动程序发出的 HTTP 请求中 User-Agent 请求头的一部分。Compression:启用或禁用请求和响应载荷的 HTTP 压缩。启用后,它可以减少 带宽占用,并提升处理大型结果集时的性能。SqlCompatibilitySettings:启用查询设置,使 ClickHouse 的行为更接近传统关系型 数据库。当查询由第三方工具 (例如 Power BI) 自动生成时,这会非常有用。这些 工具通常不了解 ClickHouse 的某些特有行为,因此可能会生成导致错误或 意外结果的查询。更多详情,请参阅 SqlCompatibilitySettings 配置参数使用的 ClickHouse 设置 。
- 安装在 WSL 实例本地的 ClickHouse 服务器
- 一个 ClickHouse Cloud 实例。
Microsoft Power BI 集成
- ClickHouse 连接器 (推荐) 底层使用 ODBC,但支持 DirectQuery 模式。在此模式下,Power BI 会自动生成 SQL 查询,并且 仅检索每个可视化或筛选操作所需的数据。
- ODBC 连接器 仅支持 Import 模式。Power BI 会执行用户提供的查询 (或选择整个表) ,并将 完整结果集导入 Power BI。后续刷新会重新导入整个数据集。
SQL 兼容性设置
SqlCompatibilitySettings,可启用特定的查询设置,使 ClickHouse 的行为更接近标准 SQL。
由 SqlCompatibilitySettings 配置参数启用的 ClickHouse 设置
value 列为 Nullable 时,此查询会失败,并显示以下消息:
cast_keep_nullable 后,CAST 会保留其参数的可空性。这
会让 ClickHouse 的行为更接近其他数据库,以及 SQL 标准对这类转换的规定。
prefer_column_name_to_alias
ClickHouse 允许在同一个 SELECT 列表中通过别名引用表达式。例如,这个查询避免了
重复,写起来也更简洁:
SELECT 列表中以这种方式解析别名,
因此这类查询一般会报错。当别名与某一列同名时,这类问题最明显。例如:
avg(value) 应该聚合哪个 value?默认情况下,ClickHouse 会优先将其解析为别名,这实际上会把它变成一个
嵌套聚合,而这并不是大多数工具所期望的。
单看这一点,很少会有问题,但有些 BI 工具会生成包含子查询的查询,并重复使用列别名。例如,Power BI 经常会生成类似下面这样的查询:
C1 时可能会出现以下错误:
C1 视为来自
子查询的列。为了在 ClickHouse 中保持类似的行为,并让这类查询能够正常执行而不报错,ODBC 驱动程序
启用了 prefer_column_name_to_alias。
在大多数情况下,启用这些设置不会有问题。不过,readonly 设置为 1 的用户
无法更改任何设置,即使是对 SELECT 查询也不例外。对于这类用户,启用 SqlCompatibilitySettings 会导致
错误。下一节将说明如何让此配置参数对只读用户生效。
让 SQL 兼容性设置适用于只读用户
SqlCompatibilitySettings 参数时,readonly 设置为 1 的用户会报错,因为驱动程序会尝试修改查询设置:
SELECT 查询也不例外。
有几种方法可以解决这个问题。
方案 1:将 readonly 设为 2
这是最简单的方案。将 readonly 设为 2 后,用户在保持只读
模式的同时仍可修改设置。
readonly 设置为 2 是解决此问题最简单且推荐的方法。如果
这种方法对你无效,请使用第二种方案。
方案 2:调整用户设置,使其与 ODBC 驱动程序 设置的参数一致。
这同样很简单:更新用户设置,使其预先与 ODBC 驱动程序 尝试设置的参数保持一致。