我试图从Athena中删除几个表,但我无法同时运行多个DROP查询。有办法吗?
谢谢!
答案 0 :(得分:4)
你是对的。在一个请求中无法运行多个查询。
另一种方法是在特定数据库中创建表。删除数据库将导致删除所有表。
例如:
CREATE DATABASE foo;
CREATE EXTERNAL TABLE bar1 ...;
CREATE EXTERNAL TABLE bar2 ...;
DROP DATABASE foo CASCADE;
DROP DATABASE
命令将删除bar1
和bar2
表。
答案 1 :(得分:3)
您现在可以使用AWS Glue界面执行此操作。前提条件是您必须升级到AWS Glue Data Catalog。
如果从Athena升级到AWS Glue Data Catalog,Athena中创建的表的元数据在Glue中可见,您可以使用AWS Glue UI检查多个表并立即删除它们。
升级数据目录的常见问题:https://docs.aws.amazon.com/athena/latest/ug/glue-faq.html
答案 2 :(得分:2)
您可以编写一个shell脚本来为您执行此操作:
for table in products customers stores; do
aws athena start-query-execution --query-string "drop table $table" --result-configuration OutputLocation=s3://my-ouput-result-bucket
done
答案 3 :(得分:1)
使用AWS Glue的Python shell并调用此函数:
def run_query(query, database, s3_output):
client = boto3.client('athena')
response = client.start_query_execution(
QueryString=query,
QueryExecutionContext={
'Database': database
},
ResultConfiguration={
'OutputLocation': s3_output,
}
)
print('Execution ID: ' + response['QueryExecutionId'])
return response
雅典娜配置:
s3_input = 's3://athena-how-to/data'
s3_ouput = 's3://athena-how-to/results/'
database = 'your_database'
table = 'tableToDelete'
query_1 = "drop table %s.%s;" % (database, table)
queries = [ query_1]
#queries = [ create_database, create_table, query_1, query_2 ]
for q in queries:
print("Executing query: %s" % (q))
res = run_query(q, database, s3_ouput)
答案 4 :(得分:0)
@Vidy
我会说@Prateek说的话。请提供您的代码示例。另外,请使用您用于与AWS交互的语言/ shell标记您的帖子。
目前,您无法在一个请求中运行多个查询。但是,您可以同时发出多个请求。目前,您可以同时运行20个请求(2018-06-15)。您可以通过API调用或控制台执行此操作。此外,您可以使用CLI或SDK(如果您选择的语言可用)。
例如,在Python中,您可以使用多进程或线程模块来管理并发请求。在创建资源/客户端时,请记住consider thread/multiprocess safety。
服务限制:
AWS Service Limits for which you can request a rate increase
答案 5 :(得分:0)
您可以使用aws-cli batch-delete-table
一次删除多个表。
aws glue batch-delete-table \
--database-name <database-name> \
--tables-to-delete "<table1-name>" "<table2-name>" "<table3-name>" ...