如何在 Apache drill 中进行不区分大小写的比较
How to do Case Insensitive comparison in Apache drill
我正在尝试连接来自不同数据源(RDBMS 和 json)的两个 table,但是,查询成功但数据在一个 table(json 数据源)是大写,另一个 table(RDBMS 数据源)中的数据是小写。由于正在进行区分大小写的比较,结果 table.
中没有数据
select * from dfs.`table1` as t1 join plugin.`table2` as t2 on t1.a = t2.a limit 10
上述查询没有结果。
但是,我已经通过使用 SQL:2014 中可用的 UPPERCASE 和 LOWERCASE 函数获得了结果。
select * from dfs.`table1` as t1 join plugin.`table2` as t2 on UPPERCASE(t1.a) = t2.a limit 10
我想知道是否可以将 drill 配置为进行不区分大小写的比较,而不是使用 UPPERCASE 和 LOWERCASE 函数。
简答 - 你不能。
在大型 RDBMS 中,您可以通过将排序规则设置为 utf8-ci 或类似的方式来实现此目的,但据我所知,Drill 中没有此选项。
一般来说,您应该避免隐式cit 不区分大小写的联接,因为它通常会导致无法预料的结果。在这种情况下,比较 UPPERCASE() 的值是最佳做法。
我正在尝试连接来自不同数据源(RDBMS 和 json)的两个 table,但是,查询成功但数据在一个 table(json 数据源)是大写,另一个 table(RDBMS 数据源)中的数据是小写。由于正在进行区分大小写的比较,结果 table.
中没有数据select * from dfs.`table1` as t1 join plugin.`table2` as t2 on t1.a = t2.a limit 10
上述查询没有结果。
但是,我已经通过使用 SQL:2014 中可用的 UPPERCASE 和 LOWERCASE 函数获得了结果。
select * from dfs.`table1` as t1 join plugin.`table2` as t2 on UPPERCASE(t1.a) = t2.a limit 10
我想知道是否可以将 drill 配置为进行不区分大小写的比较,而不是使用 UPPERCASE 和 LOWERCASE 函数。
简答 - 你不能。
在大型 RDBMS 中,您可以通过将排序规则设置为 utf8-ci 或类似的方式来实现此目的,但据我所知,Drill 中没有此选项。
一般来说,您应该避免隐式cit 不区分大小写的联接,因为它通常会导致无法预料的结果。在这种情况下,比较 UPPERCASE() 的值是最佳做法。