在clickhouse中,带有连接和检查null的tableau查询失败

tcomlyy6  于 2021-07-15  发布在  ClickHouse
关注(0)|答案(2)|浏览(772)

我正在运行tableau连接到clickhouse通过odbc驱动程序。起初,大多数报告请求都失败了。我已经配置了这个tdc文件https://github.com/yandex/clickhouse-odbc/blob/clickhouse-tbc/clickhouse.tdc 它实际上已经开始工作了,但是现在有些查询请求与包含check-for的连接在一起 NULLON 因为使用 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驱动程序发送正确的请求?
a64a0gku

a64a0gku1#

以下是一些建议:
这个关于tableau社区的帖子看起来和你描述的症状相似。建议的解决方案是这样 Package 所有字段 IfNull([Dimension], "") 因此,显然,减少了clickhouse检查空值的需要。
来自github的tdc文件看起来相当完整,但是他们可能没有考虑连接。github提交声明tdc是“未测试的”,我会给tdc的创建者发消息,看看他们是否对连接做了任何工作,是否有任何建议。
下面列出了可以添加到tdc文件或从tdc文件中删除的odbc自定义项。两者的结合可能需要一些实验,但作为一种可能的解决方案,它们非常值得研究。
在执行复杂分析之前创建摘录。如果您能够最初连接,那么应该可以将clickhouse中的所有数据提取出来。
自定义sql可能会缓解任何连接语法问题,因为查询和任何连接都是纯由您编写的。在建立到clickhouse的初始连接之后,不要选择表,而是选择“customodbc”并编写一个查询,该查询将返回您选择的联接表。
最后,tableau ideas论坛是一个请求和/或投票表决即将到来的连接器的地方。我可以看到,已经有一个想法到位的clickhouse。随便投票吧。

shstlldc

shstlldc2#

如果您可以确保数据中没有任何空值,那么您也可以使用我为这个问题编写的代理。
https://github.com/kfzteile24/clickhouse-proxy
在大多数情况下,它是有效的,但它不是防弹的。

相关问题