我有VPC流日志,其目的地是S3,S3存储桶= vpc_logs。在此存储桶下,将vpc记录上载到文件夹AWSLogs / accountId / vpcflowlogs / region / year / month / day / day / log_file_name.log.gz下。 我希望能够按照AWS中的建议使用Athena查看记录,但建议的查询是:
CREATE EXTERNAL TABLE IF NOT EXISTS vpc_flow_logs (
version int,
account string,
interfaceid string,
sourceaddress string,
destinationaddress string,
sourceport int,
destinationport int,
protocol int,
numpackets int,
numbytes bigint,
starttime int,
endtime int,
action string,
logstatus string
)
PARTITIONED BY (dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ' '
LOCATION 's3://bucket_name/AWSLogs/account_id/vpcflowlogs/region/'
TBLPROPERTIES ("skip.header.line.count"="1");
然后,当我要查看记录时,我得到0条记录。我相信是因为该信息位于文件夹下。这是要运行的正确查询吗?
答案 0 :(得分:0)
您的表未获取任何记录的原因是您要遵循的s3目录结构。由于表已分区,并且如果您希望Athena自动检测分区,则s3目录结构应如下所示:< / p>
s3://AWSLogs/.../.../.../year=2018/month=01/day=01/
如果在s3中具有以上键值对结构,则在创建表之后,可以使用以下查询自动添加分区:
msck repair table vpc_flow_logs
如果您无法控制目录结构,请参阅此link中的“ 在Athena中对数据进行分区以提高查询性能并降低成本”,其中说明了如何添加没有蜂巢样式分区目录结构时进行分区。
一种更简单但便宜的方法是运行crawler,即使您具有以下目录结构,它也将自动创建表和分区。您需要做的就是传递“ s3:// AWSLogs / accountId / vpcflowlogs / region /”作为爬虫的输入。
s3://.../.../.../.../year/month/day/