可以为s3存储桶子目录创建athena表吗?

时间:2017-02-09 16:17:53

标签: amazon-athena

我们的s3存储桶通常有许多子目录,因此存储桶的路径类似于s3:top-level-function-group / more-specific-folder / org-tenant-company-id / entityid /实际数据

我们正在研究Athena能够查询该/实际数据级别的数据,但是在org-tenant-company-id中,因此必须作为某种参数传递。

或者org-tenant-company-id是否是一个分区?

是否可以创建一个查询此结构的athena表? s3位置在创建表向导上会是什么?我尝试使用s3:top-level-function-group / more-specific-folder /但是当它运行时,我认为它说的是' 0 Kb数据读取'。

2 个答案:

答案 0 :(得分:2)

您可以按如下方式创建分区表,其中分区键仅在PARTITIONED BY子句中定义,而不是在表字段列表中定义:

CREATE EXTERNAL TABLE mydb.mytable (
    id int,
    stuff string,
    ...
)
PARTITIONED BY (
    orgtenantcompanyid string
)
LOCATION 's3://mybucket/top-level-function-group/more-specific-folder/';

创建表后,您可以加载单个分区:

ALTER TABLE mydb.mytable ADD PARTITION (orgtenantcompanyid='org1')
LOCATION 's3://mybucket/top-level-function-group/more-specific-folder/org1';

结果行将包含orgtenantcompanyid等分区字段。

答案 1 :(得分:0)

是的,可以创建仅使用特定子目录内容的表。

正常情况下,在创建表之后,您会看到读取0kb的信息。这是因为创建表时不会读取任何数据。

要检查是否可以手动查询数据,请执行以下操作:

SELECT * FROM <table_name> LIMIT 10

只有在所有不同目录中的数据结构都相同时才进行分区,以便表定义适用于该位置下的所有数据。

是的,可以使用路径结构来创建分区。但是,如果格式不正确,/key=value/不会自动。不过,您可以按照以下说明将路径用作属性:How to get input file name as column in AWS Athena external tables