Tableau api 在ClickHouse中,带有联接的Tableau查询和检查NULL失败

Tableau api 在ClickHouse中,带有联接的Tableau查询和检查NULL失败,tableau-api,clickhouse,Tableau Api,Clickhouse,我正在运行通过ODBC驱动程序连接到ClickHouse的Tableau。起初,大多数报告请求都失败了。我已经配置了这个tdc文件,它实际上已经开始工作了,但是现在,在ON中包含检查NULL的连接的一些查询请求由于使用IS NULL而不是isNull(id)而失败 这是正确的工作方式: JOIN users ON ((users.user_id = t0.user_id) OR ((isNull(users.user_id) = 1) AND (isNull(t0.user_id) = 1 IS

我正在运行通过ODBC驱动程序连接到ClickHouse的Tableau。起初,大多数报告请求都失败了。我已经配置了这个tdc文件,它实际上已经开始工作了,但是现在,在
ON
中包含检查
NULL
的连接的一些查询请求由于使用
IS NULL
而不是
isNull(id)
而失败

这是正确的工作方式:

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

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

以下是一些建议:

画面社区中,的症状与您描述的相似。建议的解决方案是将所有字段包装为
IfNull([Dimension],“”)
,从而明显减少了Clickhouse检查null的需要

Github的TDC文件看起来相当完整,但他们可能没有考虑连接。声明说贸发局是“未经测试的”。我将通知该贸发局的创建者,看看他们是否针对加入做了任何工作,以及是否有任何建议

可以添加到TDC文件或从TDC文件中删除的可能的ODBC自定义设置的列表。两者的结合可能需要一些实验,但作为一种可能的解决方案,它们非常值得研究

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

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


最后,Tableau Ideas Forum是一个就即将推出的连接器进行请求和/或投票的地方。我看已经有一个了。请随意投票赞成

以下是一些建议:

画面社区中,的症状与您描述的相似。建议的解决方案是将所有字段包装为
IfNull([Dimension],“”)
,从而明显减少了Clickhouse检查null的需要

Github的TDC文件看起来相当完整,但他们可能没有考虑连接。声明说贸发局是“未经测试的”。我将通知该贸发局的创建者,看看他们是否针对加入做了任何工作,以及是否有任何建议

可以添加到TDC文件或从TDC文件中删除的可能的ODBC自定义设置的列表。两者的结合可能需要一些实验,但作为一种可能的解决方案,它们非常值得研究

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

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


最后,Tableau Ideas Forum是一个就即将推出的连接器进行请求和/或投票的地方。我看已经有一个了。请随意投票赞成

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


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

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


在大多数情况下,它都能起作用,但不是防弹的。

你能试一下CAP\u QUERY\u NULL\u REQUIRES\u CAST吗?你能试一下CAP\u QUERY\u NULL\u REQUIRES\u CAST吗?这里运气好吗?如果是,请向上投票并应用绿色勾选标记。如果你能自己解决问题,请回答你的问题。我很好奇你是否/如何解决了这个问题。这里运气好吗?如果是,请向上投票并应用绿色勾选标记。如果你能自己解决问题,请回答你的问题。我很好奇你是否/如何解决了这个问题。
JOIN users ON ((users.user_id = t0.user_id) OR ((isNull(users.user_id) = 1) AND (isNull(t0.user_id) = 1 IS NULL)))