分区未在 Amazon Athena 中返回任何结果

jsi*_*ngh 6 mysql csv amazon-s3 amazon-athena

我在亚马逊雅典娜创建了一张桌子。我的数据是 CSV 文件(一个包含 2010-2015 年数据的大文件)。它没有在 s3 中分区。我正在尝试在 athena 中创建分区,但分区没有拉出任何结果。

第 1 步:在 athena 中创建表

CREATE EXTERNAL TABLE IF NOT EXISTS DATABASE.table1 (
NULL string,
OrderID string,
CustomerID string,
EmailAddress string
)
PARTITIONED BY (OrderDate STRING)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
 'serialization.format' = ',',
  'quoteChar' = '"',
  'field.delim' = ','
) LOCATION 's3://XYZ/Orders/'
TBLPROPERTIES ('has_encrypted_data'='false');
Run Code Online (Sandbox Code Playgroud)

在此步骤 2 之后:手动加载分区(我的订单日期格式为 mm/dd/yy hrs min)

ALTER TABLE table1 ADD PARTITION (orderdate='01/01/2010 00:00') location 's3://xyz/Orders/'
Run Code Online (Sandbox Code Playgroud)

它说分区已成功创建,但是当我对此进行查询时,我没有得到任何结果。那么我是否以错误的方式创建了分区?为什么它没有返回结果?任何帮助表示赞赏。

在尝试了下面的评论后,当我使用订单日期查询数据时,我仍然无法检索任何结果。我再次将我的文件上传到 athena(两个单独的文件,两年),其中文件的路径如下所示

s3://xyz/Orders/year/orders+2010.csv
 s3://xyz/Orders/year/orders+2014.csv
Run Code Online (Sandbox Code Playgroud)

执行此操作后,我仍然无法使用日期范围进行分区和查询数据。

Joh*_*ein 4

分区是子目录。正确定义后,Athena 可以跳过不包含相关数据的子目录。

例如,如果表按日期 (YYYY-MM-DD) 分区,则会有一个名为 的目录date=2017-11-08仅包含当天的数据。

鉴于您的所有数据都包含在单个 CSV 中,因此您无法使用分区。如果您要将文件划分为适当的目录结构中的各个日常文件,Athena 将为您运行得更快并且操作成本也更低。

Athena 无法为您生成分区 - 您必须向 Athena 提供已分区的数据。和ADD PARTITION命令MSCK REPAIR TABLE仅扫描并使用现有分区。

请参阅 AWS 大数据博客:使用 Amazon Athena 分析 S3 中的数据