此 driver 正在积极开发中。某些 ODBC 功能可能尚未完全实现。当前版本
重点提供基本连接能力和核心 ODBC 功能,计划在未来的
发行版中增加更多功能。您的反馈非常宝贵,有助于确定新功能和改进的优先级。如果您遇到
限制、功能缺失或异常行为,请通过以下 issue 跟踪器提交您的反馈或功能请求:
https://github.com/ClickHouse/clickhouse-odbc/issues
在 Windows 上安装
测试
$reader.GetValue(0) 后,应会显示您的 ClickHouse
服务器版本。
配置参数
Url:指定 ClickHouse 服务器 的完整 HTTP(S) 端点,包括协议、host、端口和 可选路径。Username:用于向 ClickHouse 服务器 进行身份验证的用户名。Password:与指定用户名关联的密码。如果未提供,驱动程序将不使用密码 身份验证进行连接。Database:连接使用的默认数据库。Timeout:驱动程序在中止请求前等待 server 响应的最长时间 (以秒为单位) 。ClientName:作为 client metadata 一部分发送到 ClickHouse 服务器 的自定义标识符,可用于 tracing 或 区分来自不同应用程序的流量。此参数将包含在驱动程序生成的 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 连接器 仅支持导入模式。Power BI 会执行用户提供的查询 (或选择整个表) ,并将完整 结果集导入 Power BI。后续刷新会重新导入整个数据集。
SQL 兼容性设置
SqlCompatibilitySettings,可启用特定的查询
设置,使 ClickHouse 的行为更贴近标准 SQL。
通过 SqlCompatibilitySettings 配置参数启用的 ClickHouse 设置
value 列可为空,此查询将失败,并显示以下消息:
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 驱动程序 尝试设置的内容保持一致。