在 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 查询失败的主要内容,如果未能解决你的问题,请参考以下文章