我们的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数据读取'。
答案 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