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

Partitions not returning any results in Amazon Athena

我在 amazon athena 中创建了一个 table。我的数据是 CSV 文件(一个包含 2010-2015 年数据的大文件)。它没有在 s3 中分区。我正在尝试在 athena 中创建分区,但分区没有产生任何结果。

第 1 步:在 athena

中创建 table
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');

在第 2 步之后:手动加载分区(我的订单日期格式是 mm/dd/yy 小时分钟)

ALTER TABLE table1 ADD PARTITION (orderdate='01/01/2010 00:00') location 's3://xyz/Orders/'

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

在尝试了下面的评论后,当我使用命令查询数据时,我仍然无法检索到任何结果 date.I 再次将我的文件上传到雅典娜(两个单独的文件,两年),其中文件的路径看起来像这样

s3://xyz/Orders/year/orders+2010.csv
 s3://xyz/Orders/year/orders+2014.csv

这样做之后,我仍然无法使用日期范围进行分区和查询数据。

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

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

鉴于您的所有数据都包含在一个 CSV 中,您不能使用分区。如果您要在适当的目录结构中将文件分成单独的日常文件,Athena 会 运行 更快,并且操作起来会更便宜。

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

查看 AWS 大数据博客:Analyzing Data in S3 using Amazon Athena

有趣的一点,S3中的文件夹是not actually folders,我倾向于将它们视为标签。对于 John 的观点,您需要对数据进行切片和切块,然后将其标记为:

s3://mybucket/mydata/date_partition=2017-01-01/customer_partition=12345/somdedata.csv

Web UI 和 S3 浏览器等某些应用程序将 S3 "folders" 作为目录显示,但是当您开始进行 API 调用时,您会发现它们的行为并不像这样的。

这种结构的好处之一是 Athena 会将具有特定 "tag"(例如 date_partition=2017-01-01/customer_partition=12345/)的所有文件视为位于同一分区中。所以,对于雅典娜来说,这些是等价的:

s3://mystuff/data/date_partition=2017-01-01/customer_partition=12345/somehugefile.csv
s3://mystuff/data/date_partition=2017-01-01/customer_partition=12345/asmallerfile.csv
s3://mystuff/data/date_partition=2017-01-01/customer_partition=12345/anothersmallerfile.csv

有时候,像这样拆分数据真的很有用。