

# 为 netflow 日志创建和查询表
<a name="querying-network-firewall-logs-sample-netflow-logs-table"></a>

1. 修改下面的 DDL 语句示例，使其符合 netflow 日志的结构。您可能需要更新语句以包含最新版本日志的列。有关更多信息，请参阅《*Amazon Network Firewall 开发人员指南*》中的[防火墙日志的内容](https://docs.amazonaws.cn/network-firewall/latest/developerguide/firewall-logging.html#firewall-logging-contents)。

   ```
   CREATE EXTERNAL TABLE network_firewall_netflow_logs (
     firewall_name string,
     availability_zone string,
     event_timestamp string,
     event struct<
       timestamp:string,
       flow_id:bigint,
       event_type:string,
       src_ip:string,
       src_port:int,
       dest_ip:string,
       dest_port:int,
       proto:string,
       app_proto:string,
       tls_inspected:boolean,
       netflow:struct<
         pkts:int,
         bytes:bigint,
         start:string,
         `end`:string,
         age:int,
         min_ttl:int,
         max_ttl:int,
         tcp_flags:struct<
           syn:boolean,
           fin:boolean,
           rst:boolean,
           psh:boolean,
           ack:boolean,
           urg:boolean
           >
         >
       >
   )
   ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe' 
   LOCATION 's3://amzn-s3-demo-bucket/{{path_to_netflow_logs_folder}}/';
   ```

1. 修改 `LOCATION` 子句以指定您在 Amazon S3 中的日志文件夹。

1. 在 Athena 查询编辑器中运行 `CREATE TABLE` 查询。查询完成后，Athena 将注册 `network_firewall_netflow_logs` 表，使其指向的数据可以进行查询。

## 示例查询
<a name="querying-network-firewall-logs-netflow-log-sample-query"></a>

本节中的 netflow 日志查询示例会筛选执行了 TLS 检查的事件。

查询使用别名来创建输出列标题，以显示列所属的 `struct`。例如，`event.netflow.bytes` 字段的列标题是 `event_netflow_bytes`，而不只是 `bytes`。若要进一步自定义列名，可以根据自己的喜好修改别名。例如，可以使用下划线或其他分隔符来分隔 `struct` 名称和字段名称。

请记得根据表定义和查询结果中所需的字段修改列名和 `struct` 引用。

```
SELECT
  event.src_ip AS event_src_ip,
  event.dest_ip AS event_dest_ip,
  event.proto AS event_proto,
  event.app_proto AS event_app_proto,
  event.tls_inspected AS event_tls_inspected,
  event.netflow.pkts AS event_netflow_pkts,
  event.netflow.bytes AS event_netflow_bytes,
  event.netflow.tcp_flags.syn AS event_netflow_tcp_flags_syn 
FROM network_firewall_netflow_logs 
WHERE event.tls_inspected = true
```