使用手动分区在 Athena 中为 CloudTrail 日志创建表
可以在 Athena 控制台中为 CloudTrail 日志文件手动创建表,然后在 Athena 中运行查询。
使用 Athena 控制台为 CloudTrail 跟踪记录创建 Athena 表
-
将以下 DDL 语句复制并粘贴到 Athena 控制台查询编辑器中。
CREATE EXTERNAL TABLE cloudtrail_logs ( eventversion STRING, useridentity STRUCT< type:STRING, principalid:STRING, arn:STRING, accountid:STRING, invokedby:STRING, accesskeyid:STRING, userName:STRING, onBehalfOf: STRUCT< userId: STRING, identityStoreArn: STRING>, sessioncontext:STRUCT< attributes:STRUCT< mfaauthenticated:STRING, creationdate:STRING>, sessionissuer:STRUCT< type:STRING, principalId:STRING, arn:STRING, accountId:STRING, userName:STRING>, ec2RoleDelivery:string, webIdFederationData: STRUCT< federatedProvider: STRING, attributes: map<string,string> > > >, eventtime STRING, eventsource STRING, eventname STRING, awsregion STRING, sourceipaddress STRING, useragent STRING, errorcode STRING, errormessage STRING, requestparameters STRING, responseelements STRING, additionaleventdata STRING, requestid STRING, eventid STRING, resources ARRAY<STRUCT< arn:STRING, accountid:STRING, type:STRING>>, eventtype STRING, apiversion STRING, readonly STRING, recipientaccountid STRING, serviceeventdetails STRING, sharedeventid STRING, vpcendpointid STRING, eventCategory STRING, tlsDetails struct< tlsVersion:string, cipherSuite:string, clientProvidedHostHeader:string> ) PARTITIONED BY (region string, year string, month string, day string) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat' LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/
Account_ID
/CloudTrail/';注意
建议使用示例中所示的
org.apache.hive.hcatalog.data.JsonSerDe
。虽然存在com.amazon.emr.hive.serde.CloudTrailSerde
,但目前还无法处理一些较新的 CloudTrail 字段。 -
(可选)删除表格中所有非必填字段。如果您只需要读取一组特定的列,则您的表定义可以排除其他列。
-
修改
s3://amzn-s3-demo-bucket/AWSLogs/
以指向包含您的日志数据的 Amazon S3 存储桶。Account_ID/
CloudTrail/ -
验证字段是否正确列出。有关 CloudTrail 记录中的完整字段列表的更多信息,请参阅 CloudTrail 记录内容。
步骤 1 中的示例
CREATE TABLE
语句使用 Hive JSON SerDe。在该示例中,字段requestparameters
、responseelements
和additionaleventdata
作为查询中的STRING
类型列出,但在 JSON 中使用STRUCT
数据类型。因此,要将数据移出这些字段,请使用JSON_EXTRACT
函数。有关更多信息,请参阅 从字符串中提取 JSON 数据。为了提高性能,此示例按 Amazon Web Services 区域、年份、月份和日期对数据进行分区。 -
在 Athena 控制台中运行
CREATE TABLE
语句。 -
使用 ALTER TABLE ADD PARTITION 命令加载分区,以便您可以查询它们,如以下示例所示。
ALTER TABLE
table_name
ADD PARTITION (region='us-east-1', year='2019', month='02', day='01') LOCATION 's3://amzn-s3-demo-bucket/AWSLogs/Account_ID
/CloudTrail/us-east-1/2019/02/01/
'