如何从 Athena SQL 查询中的 3 个表中获取所需的数据?
How to get the desired data from 3 tables in Athena SQL query?
Table 1 (aws_complianceitem
) 没有主键并且此示例数据:
status
severity
compliancetype
title
resourceid
region
compliant
low
security
2002 patch
i-76765434
ap-south-2
noncompliant
high
audit
2002 kb patch
i-76765434
ap-south-2
compliant
medium
security
2002 kb patch
i-98765434
ap-south-1
Table 2 (aws_instanceinformation
) 具有 ipaddress
和 instanceid
作为唯一键,并且具有以下示例数据:
computername
instanceid
ipaddress
status
accountid
SD-SDYH-re22
i-76765434
10.33.23.1
complianed
887878787654
noncompliant
i-98765434
10.72.33.1
non-complianed
098776765478
Table 3 (configinstancestate
) 具有 ipaddress
和 resourceid
作为唯一键和此示例数据:
resourceid
ipaddress
instancestate
i-76765434
10.33.23.1
running
i-98765434
10.72.33.1
stopped
我需要所有实例 ID 为 运行 的数据。
这是期望的结果:
status
instancestate
severity
title
resourceid
region
ipaddress
compliant
running
low
2002 patch
i-76765434
ap-south-2
10.33.23.1
noncompliant
running
high
2002 kb patch
i-76765434
ap-south-2
10.33.23.1
compliant
stopped
medium
2002 kb patch
i-98765434
ap-south-1
10.72.33.1
尝试使用以下查询进行完全外连接,
SELECT
t1.status
, t1.severity
, t1.title
, t1.region
, t1.resourceid
, t2.ipaddress
, t2.computername
, t2.status
, t3.instancestate
FROM
aws_complianceitem t1
FULL OUTER JOIN aws_instanceinformation t2
ON t1.resourceid = t2.instanceid
FULL OUTER JOIN configinstancestate t3
ON t2.ipaddress = t3.resourceid
但是我们使用 instancestate=blank 过滤了作为此查询的一部分获得的结果,记录为空
似乎是两个内部联接 - 具有相关条件 - 做你想做的事:
select ac.*, c.*
from aws_complianceitem ac
inner join aws_instanceinformation ai
on ai.resourceid = ac.resourceid
inner join configinstancestate c
on c.resourceid = ac.resourceid and c.ipaddress = ac.ipaddress
Table 1 (aws_complianceitem
) 没有主键并且此示例数据:
status | severity | compliancetype | title | resourceid | region |
---|---|---|---|---|---|
compliant | low | security | 2002 patch | i-76765434 | ap-south-2 |
noncompliant | high | audit | 2002 kb patch | i-76765434 | ap-south-2 |
compliant | medium | security | 2002 kb patch | i-98765434 | ap-south-1 |
Table 2 (aws_instanceinformation
) 具有 ipaddress
和 instanceid
作为唯一键,并且具有以下示例数据:
computername | instanceid | ipaddress | status | accountid |
---|---|---|---|---|
SD-SDYH-re22 | i-76765434 | 10.33.23.1 | complianed | 887878787654 |
noncompliant | i-98765434 | 10.72.33.1 | non-complianed | 098776765478 |
Table 3 (configinstancestate
) 具有 ipaddress
和 resourceid
作为唯一键和此示例数据:
resourceid | ipaddress | instancestate |
---|---|---|
i-76765434 | 10.33.23.1 | running |
i-98765434 | 10.72.33.1 | stopped |
我需要所有实例 ID 为 运行 的数据。
这是期望的结果:
status | instancestate | severity | title | resourceid | region | ipaddress |
---|---|---|---|---|---|---|
compliant | running | low | 2002 patch | i-76765434 | ap-south-2 | 10.33.23.1 |
noncompliant | running | high | 2002 kb patch | i-76765434 | ap-south-2 | 10.33.23.1 |
compliant | stopped | medium | 2002 kb patch | i-98765434 | ap-south-1 | 10.72.33.1 |
尝试使用以下查询进行完全外连接,
SELECT
t1.status
, t1.severity
, t1.title
, t1.region
, t1.resourceid
, t2.ipaddress
, t2.computername
, t2.status
, t3.instancestate
FROM
aws_complianceitem t1
FULL OUTER JOIN aws_instanceinformation t2
ON t1.resourceid = t2.instanceid
FULL OUTER JOIN configinstancestate t3
ON t2.ipaddress = t3.resourceid
但是我们使用 instancestate=blank 过滤了作为此查询的一部分获得的结果,记录为空
似乎是两个内部联接 - 具有相关条件 - 做你想做的事:
select ac.*, c.*
from aws_complianceitem ac
inner join aws_instanceinformation ai
on ai.resourceid = ac.resourceid
inner join configinstancestate c
on c.resourceid = ac.resourceid and c.ipaddress = ac.ipaddress