0

我正在尝试通过 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

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

4

2 回答 2

0

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

于 2021-05-18T17:25:18.587 回答
0

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

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

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

于 2021-05-21T01:11:47.417 回答