2

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

我们正在研究 Athena 以便能够查询 /actual-data 级别上的数据,但在 org-tenant-company-id 内,因此必须将其作为某种参数传递。

或者那个 org-tenant-company-id 会是一个分区吗?

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

4

2 回答 2

3

您可以按如下方式创建分区表,其中分区键仅在 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.

于 2017-02-09T22:12:48.870 回答
1

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

创建表后,您会看到 0kb 读取,这很正常。那是因为创建表时没有读取数据。

要检查您是否可以准确地查询数据,请执行以下操作:

SELECT * FROM <table_name> LIMIT 10

仅当所有不同目录中的数据结构相同时,分区才有意义,以便表定义适用于该位置下的所有数据。

是的,可以使用路径结构来创建分区。但是,如果格式不正确,则不会自动执行/key=value/。但是,您可以将路径用作属性,如下所述:如何在 AWS Athena 外部表中获取输入文件名作为列

于 2020-04-15T13:51:38.940 回答