2017-02-09 33 views
0

我们的s3桶通常有许多子目录,这样一个桶的路径就像s3:top-level-function-group/more-specific-folder/org-tenant-company-id/entityid /实际数据可以为s3 bucket子目录创建athena表吗?

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

or or-tenant-company-id be a partition?

是否有可能创建一个雅典娜表查询此结构?那么s3位置在创建表向导上会是什么?我试着用s3:top-level-function-group/more-specific-folder /但是当它运行时,我认为它说'0 Kb data read'。

+0

你的计划对我来说听起来可行。你可以分享没有用的create table语句吗? – James

+0

最初的create table语句似乎正常工作;至少它没有错误;但它也没有加载任何数据;我再次尝试,我认为问题是一个不存在的专栏;现在我想将其沿着org-tenant-company-id子目录进行分区,但这可能是一个单独的问题,除非您知道它 – user26270

回答

1

您可以创建一个分区表如下所示,其中的分区键定义仅在分区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

+0

谢谢,但我认为我们需要自动完成分区。不希望手动维护分区。它看起来像这样做,我们必须将我们的子目录更改为'key = value'格式,以便自动将它们识别为分区 – user26270

+0

您是否仍然需要调用'MSCK REPAIR TABLE mydb.mytable'? [场景1:数据已经以分区格式存储在S3上](http://docs.aws.amazon.com/athena/latest/ug/partitions.html#scenario-1-data-already-partitioned-and-存储在s3-in-hive格式) – James

+0

我不知道,从那里不清楚是否需要在创建更多分区时继续调用该命令,或者它是否是一次性事物。 – user26270