繁体   English   中英

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

[英]Partitions not returning any results in Amazon Athena

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

第1步:在雅典娜中创建表格

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 hrs min)

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

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

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

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

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

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

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

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

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

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

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

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

某些应用程序(如Web UI和S3浏览器)将S3“文件夹”显示为目录,但是当您开始进行API调用时,您会发现它们的行为并非如此。

关于这种结构的好处之一是Athena会将具有某个“标记”(例如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

有时,像这样分割数据可能非常有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM