【问题标题】:Fixing error in a SHOW TABLES IN DATABASE name query修复 SHOW TABLES IN DATABASE 名称查询中的错误
【发布时间】:2021-08-07 23:28:21
【问题描述】:

我正在尝试通过 Python 脚本列出 Amazon AWS Athena 中数据库中的所有表。 这是我的脚本:

data = {'name':['database1', 'database-name', 'database2']}
# Create DataFrame
df = pd.DataFrame(data)

for index, schema in df.iterrows():
    tables_in_schema = pd.read_sql("SHOW TABLES IN "+schema[0],conn)

运行时出错

当我在 Athena 查询编辑器中运行相同的查询时,出现错误

SHOW TABLES IN database-name

这是错误

DatabaseError: Execution failed on sql: SHOW TABLES IN database-name
An error occurred (InvalidRequestException) when calling the StartQueryExecution operation: line 
1:19: mismatched input '-'. Expecting: '.', 'LIKE', <EOF>
unable to rollback

我认为问题在于数据库名称中的连字符“-”。 如何在查询中转义?

【问题讨论】:

    标签: sql amazon-athena pyathena


    【解决方案1】:

    您可以改用 Glue 客户端。它提供了一个函数get_tables(),它返回一个特定数据库中所有表的列表。

    【讨论】:

    • 谢谢罗伯特,但我不能为此使用 Glue 客户端。
    【解决方案2】:

    数据库、表或列的名称只能包含下划线“_”。任何其他特殊字符都会在查询时引起问题。它不会阻止您使用特殊字符创建对象,但在使用这些对象时会导致问题。

    解决此问题的唯一方法是重新创建不带特殊字符的数据库名称,在这种情况下为连字符“-”。

    https://docs.aws.amazon.com/athena/latest/ug/tables-databases-columns-names.html

    【讨论】:

      猜你喜欢
      • 2011-10-06
      • 2019-03-22
      • 2012-07-23
      • 2013-05-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      相关资源
      最近更新 更多