在 ClickHouse 中使用 JOINS 和检查 NULL 的 Tableau 查询失败

Posted

技术标签:

【中文标题】在 ClickHouse 中使用 JOINS 和检查 NULL 的 Tableau 查询失败【英文标题】:Tableau Queries with JOINS and check for NULL are failing in ClickHouse 【发布时间】:2019-04-06 11:59:24 【问题描述】:

我正在运行通过 ODBC 驱动程序连接到 ClickHouse 的 Tableau。起初,大多数报告请求都失败了。我已经配置了这个 tdc 文件 https://github.com/yandex/clickhouse-odbc/blob/clickhouse-tbc/clickhouse.tdc 并且它实际上开始工作了,但是现在由于使用 IS NULL 而不是 isNull(id)

JOIN users ON ((users.user_id = t0.user_id) OR ((users.user_id IS NULL) AND (t0.user_id IS NULL)))

这是正确的工作方式:

JOIN users ON ((users.user_id = t0.user_id) OR ((isNull(users.user_id) = 1) AND (isNull(t0.user_id) = 1 IS NULL)))

如何让tablau驱动发送正确的请求?

【问题讨论】:

你也可以试试 CAP_QUERY_NULL_REQUIRES_CAST 吗? 【参考方案1】:

这里有一些建议:

Tableau 社区 上的

This post 看起来与您描述的症状相似。建议的解决方案是将所有字段都包装为IfNull([Dimension], ""),从而显然减少了让 Clickhouse 检查空值的需要。

来自 Github 的 TDC 文件看起来很完整,但他们可能没有考虑连接。 GitHub commit 声明 tdc 是“未经测试的”。我会向该 TDC 的创建者发送消息,看看他们是否已经针对连接进行了任何工作,以及他们是否有任何建议。

Here is a list 可能的 ODBC 自定义项 可以添加到或从您的 TDC 文件中删除。它们的组合可能需要一些实验,但它们非常值得作为可能的解决方案进行研究。

在执行复杂分析之前创建一个数据提取。如果您最初能够连接,那么应该可以将 Clickhouse 中的所有数据提取到数据集中。

自定义 SQL 可能会缓解任何连接语法问题,因为查询和任何连接 完全由您编写。与 ClickHouse 建立初始连接后,不要选择表,而是选择“自定义 ODBC”并编写一个查询,该查询将返回您选择的连接表。

最后,Tableau 创意论坛 是一个请求和/或对即将推出的连接器进行投票的地方。我可以看到已经有一个idea in place for ClickHouse。随意投票。

【讨论】:

运气好吗?如果是这样,请投票并应用绿色复选标记。如果您能够自己解决,请回答您的问题。我很好奇你是否/如何解决这个问题。【参考方案2】:

如果您可以确保数据中没有任何 NULL 值,您也可以使用我为这个确切问题编写的这个代理。

https://github.com/kfzteile24/clickhouse-proxy

在大多数情况下,它有点工作,但它不是防弹的。

【讨论】:

以上是关于在 ClickHouse 中使用 JOINS 和检查 NULL 的 Tableau 查询失败的主要内容,如果未能解决你的问题,请参考以下文章

JOINS 的大型查询中的 SQL 子查询链

SQL SELF 和 INNER JOINS 在一个查询中

是不是真的可以到处使用JOINS来代替SQL中的子查询

如何使用 Mysql Joins 而不是嵌套子查询来实现相同的结果?

可以使用 JOINS 组合两个表而不会丢失所有数据

如何使用 JOINS 和嵌套 SELECT 优化此 SQL 查询?