如何在AWS athena中删除/删除多个表?

时间:2018-03-29 14:34:10

标签: amazon-web-services amazon-athena

我试图从Athena中删除几个表,但我无法同时运行多个DROP查询。有办法吗?

谢谢!

6 个答案:

答案 0 :(得分:4)

你是对的。在一个请求中无法运行多个查询。

另一种方法是在特定数据库中创建表。删除数据库将导致删除所有表。

例如:

CREATE DATABASE foo;
CREATE EXTERNAL TABLE bar1 ...;
CREATE EXTERNAL TABLE bar2 ...;
DROP DATABASE foo CASCADE;

DROP DATABASE命令将删除bar1bar2表。

答案 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 GluePython 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调用或控制台执行此操作。此外,您可以使用CLISDK(如果您选择的语言可用)。

例如,在Python中,您可以使用多进程或线程模块来管理并发请求。在创建资源/客户端时,请记住consider thread/multiprocess safety

服务限制:

Athena Service Limits

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>" ...