【问题标题】:Presto show tables shows a nonexistent table due to case sensitivity with mysqldb由于 mysqldb 区分大小写,Presto show tables 显示不存在的表
【发布时间】:2021-04-13 15:31:57
【问题描述】:

就这个问题而言,我说的是更名后的prestosql.ioTrino

我在这里有一张表(详细信息已编辑):

presto> SHOW TABLES FROM a.b;
     Table
----------------
 foo
...

presto> DESCRIBE a.b.foo;
Query <id> failed: line 1:1: Table 'a.b.foo' does not exist
DESCRIBE a.b.foo

它位于 mysql 数据库中。我有一个 presto 目录 a,它有一个 mysqldb 连接器来从 presto 查询其数据。

奇怪的是,它显示 foo,尽管我与 mysql 的连接告诉我它是 Foo(f 大写):

mysql> describe b.Foo;
+--------------+------------------+------+-----+---------------------+----------------+
| Field        | Type             | Null | Key | Default             | Extra          |
+--------------+------------------+------+-----+---------------------+----------------+
...

mysql> describe b.foo;
ERROR 1146 (42S02): Table 'b.foo' doesn't exist

当我尝试在 presto 中描述这个表时,它失败了:

presto> DESCRIBE a.b.Foo;
Query <id> failed: line 1:1: Table 'a.b.foo' does not exist
DESCRIBE a.b.Foo

检查后,请注意它是如何说“表 'a.b.foo' 不存在”,而不是 'a.b.Foo'。看到mysql is case sensitive in most unices,在我看来,连接器从 Presto 传递了一个无效的表名,我无法访问实际的表。

如果我的假设是正确的,我该如何解决这种情况?

【问题讨论】:

    标签: mysql presto trino


    【解决方案1】:

    为了在 MySQL 中处理非小写表名,您当前需要设置 case-insensitive-name-matching=true 目录属性。

    https://github.com/trinodb/trino/issues/17 将提供对混合大小写表名和列名的更适当支持。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-25
      • 2015-02-06
      • 2014-03-10
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 2017-08-08
      • 1970-01-01
      相关资源
      最近更新 更多