名稱 | 描述 | SQL |
對阿里雲資源計數 | 返回有許可權的資源總數。 | -- 使用COUNT()函數返回資源的數量。
-- resources表格儲存體了資源屬性的相關資訊。
SELECT
COUNT(*)
FROM
resources;
|
對ECS執行個體資源計數 | 返回有許可權的ECS執行個體總數。 | -- 可以將"resource_type = 'ACS::ECS::Instance'"更改為其他查詢條件,表示對特定範圍內的資源計數。
-- 在控制台左側的資源屬性列表中單擊資源類型或屬性時,會自動建立查詢條件並填充到查詢語句中。
SELECT
COUNT(*)
FROM
resources
WHERE
resource_type = 'ACS::ECS::Instance';
|
列出所有阿里雲資源 | 返回所有有許可權的資源,並按照資源類型和資源ID排列。 | -- 本例展示了資源的所有核心屬性,可以添加或刪除屬性,您也可以通過設定properties來展示資源擴充屬性。
-- 使用“ORDER BY”指定定序。可以使用DESC、ASC更改排列順序。未指定順序時,預設為升序("ASC")。
-- 使用resource_type、resource_id的排序方式可以加速查詢。
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id
FROM
resources
ORDER BY
resource_type,
resource_id
LIMIT
1000 OFFSET 0;
|
列出所有ECS執行個體資源 | 返回所有有許可權的ECS執行個體資源,並按資源名稱升序排列。 | -- 可以更改排序依據的屬性和排列順序。未指定順序時,預設為升序("ASC")。
-- 選擇排序依據的屬性時,建議避開有空值的屬性或進行特殊處理,否則這部分資源無法被正確排序。
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id
FROM
resources
WHERE
resource_type = 'ACS::ECS::Instance'
ORDER BY
resource_name
LIMIT
1000 OFFSET 0;
|
查詢按資源類型和資源ID排序的前20個資源 | 按照資源類型和資源ID排列,並返回前20個資源的列表。 | -- "LIMIT" 用於指定返回結果的最大數量。範圍是1~1000。如果未指定,預設返回最多1000條記錄。
-- 如果排序列的屬性值存在重複,多次執行查詢可能會返回不一致的結果,可以添加排序列保證結果的一致性。
SELECT
resource_id,
resource_name,
region_id,
resource_type,
account_id
FROM
resources
ORDER BY
resource_type,
resource_id
LIMIT
20;
|
查詢按資源類型和資源ID排序的第11到第30個資源 | 按照資源類型和資源ID排列,並返回第11到第30個資源的列表。 | -- 使用 "LIMIT" 和"OFFSET"可以限制返回結果的範圍。"LIMIT" 用於指定返回結果的最大數量,"OFFSET" 用於指定從哪個位置開始返回結果。
-- 這個機制可以用於分頁查詢。每次查詢時,通過指定 "LIMIT" 限制返回結果的數量,通過增加 "OFFSET" 擷取下一頁的結果。為了保證在一致的列表中截取連續的資料,應使用 "ORDER BY" 指定排序方式。
-- 如果排序列的屬性值存在重複,多次執行查詢可能會返回不一致的結果,可以添加排序列保證結果的一致性。
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id
FROM
resources
ORDER BY
resource_type,
resource_id
LIMIT
20 OFFSET 10;
|
列出不同資源類型的資源數量 | 列出不同資源類型的資源數量,並按照數量降序排列。 | -- 使用 "GROUP BY" 可以按照某個屬性對資源進行分組歸類。
-- 如果查詢結果返回兩列,一列為字串,另一列為數值,可以通過圖表的方式查看結果。
SELECT
resource_type,
COUNT(*) AS cnt
FROM
resources
GROUP BY
resource_type
ORDER BY
cnt DESC;
|
列出不同地區的資源數量 | 列出不同地區的資源數量,並按照數量降序排列。 | -- 如果查詢結果返回兩列,一列為字串,另一列為數值,可以通過圖表的方式查看結果。
SELECT
region_id,
COUNT(*) AS cnt
FROM
resources
GROUP BY
region_id
ORDER BY
cnt DESC;
|
列出不同資源群組的資源數量 | 列出不同資源群組的資源數量,並按照數量降序排列。 | --如果查詢結果返回兩列,一列為字串,另一列為數值,可以通過圖表的方式查看結果。
SELECT
CASE
WHEN resource_group_id IS NULL THEN '未接入資源群組'
ELSE resource_group_id
END AS resource_group_id,
COUNT(*) AS cnt
FROM
resources
GROUP BY
resource_group_id
ORDER BY
cnt DESC;
|
列出指定資源群組下的不同資源類型的資源數量 | 列出指定資源群組下的所有資源類型的資源數量,並按照數量降序排列。 | -- 如果查詢結果返回兩列,一列為字串,另一列為數值,可以通過圖表的方式查看結果。
SELECT
resource_type,
COUNT(*) AS cnt
FROM
resources
WHERE
resource_group_id = 'rg-xxx'
GROUP BY
resource_type
ORDER BY
cnt DESC;
|
列出ECS產品所有類型的資源 | 列出ECS產品所有類型的資源,並按照資源類型和建立時間排序。 | --本例使用 "ACS::ECS::%" 來匹配以 "ACS::ECS::" 開頭的資源類型code。查詢結果將包括 ECS 產品中所有類型的資源。
--本例首先對資源按照資源類型進行升序排列,然後在每個資源類型內部,再按照建立時間進行升序排列。
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id
FROM
resources
WHERE
resource_type LIKE 'ACS::ECS::%'
ORDER BY
resource_type,
create_time;
|
列出包含指定標籤的資源 | 列出包含指定標籤鍵和值的所有資源。 | -- 可以將指定的標籤鍵 "KEY" 和標籤值 "VALUE" 更改為任何所需的其他標籤鍵和值。
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id
FROM
resources
WHERE
tags ->> 'KEY' = 'VALUE';
|
列出標籤鍵包含“test”的資源 | 列出標籤鍵包含“test”的所有資源。 | --本例使用了一個巢狀查詢。內部查詢首先執行,並將查詢結果作為一個暫存資料表。外部查詢在這個暫存資料表中進行查詢。
--使用JSONB_OBJECT_KEYS()函數可以將map類型的對象展開,返回鍵的集合。可以對展開後的集合進行查詢。
--本例使用%test%的模式比對所有包含"test"的標籤鍵,不論其前後有什麼其他字元。
SELECT
*
FROM
(
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id,
JSONB_OBJECT_KEYS(tags) AS tag_key
FROM
resources
) AS r
WHERE
r.tag_key LIKE '%test%'
ORDER BY
r.resource_type,
r.resource_id;
|
列出包括指定IP的資源 | 列出包括指定IP的所有資源。 | -- 使用JSONB_ARRAY_ELEMENTS_TEXT()函數可以將數組展開為text值的集合。可以對展開後的集合進行查詢。
SELECT
*
FROM
(
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id,
JSONB_ARRAY_ELEMENTS_TEXT(ip_addresses) AS ip
FROM
resources
) AS r
WHERE
r.ip = 'xxx.xxx.xxx.xxx'
ORDER BY
r.resource_type,
r.resource_id;
|
列出指定時間後建立的ECS執行個體 | 列出指定時間後建立的ECS執行個體資源。 | -- 使用AND串連多個查詢條件,將返回同時滿足這些查詢條件的資源
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id
FROM
resources
WHERE
resource_type = 'ACS::ECS::Instance'
AND create_time > '2023-08-07'
ORDER BY
create_time;
|
列出30天內建立的資源 | 列出30天內建立的資源清單,並按照建立時間升序排列。 | -- 可以在查詢條件中進行計算,以實現精確範圍內的查詢。
SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id
FROM
resources
WHERE
create_time > TO_CHAR(NOW() - interval '30 day', 'YYYY-MM-DD')
ORDER BY
create_time;
|
列出指定VPC下掛載的資源 | 列出指定VPC下掛載的資源清單,並按照資源類型升序排列。 | SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id
FROM
resources
WHERE
vpc_id = 'vpc-xxx'
ORDER BY
resource_type,
resource_id;
|
列出ECS執行個體的擴充屬性 | 列出ECS執行個體的狀態、記憶體、規格、計費方式等擴充屬性。 | --可以通過對不同類型資源的properties欄位進行查詢,以擷取資源的擴充屬性資訊。
--在控制台左側的資源屬性列表中點擊資源類型或屬性時,會自動建立查詢條件並填充到查詢語句中。
--使用CASE子句,可以對屬性的不同取值進行定義,使查詢結果更易於理解。
SELECT
resource_id,
resource_name,
properties ->> 'Status' AS "執行個體狀態",
properties ->> 'InstanceNetworkType' AS "網路類型",
properties ->> 'Memory' AS "記憶體",
properties ->> 'Cpu' AS Cpu,
properties ->> 'InstanceType' AS "規格",
CASE
properties ->> 'InstanceChargeType'
WHEN 'PrePaid' THEN '訂用帳戶'
WHEN 'PostPaid' THEN '隨用隨付'
ELSE properties ->> 'InstanceChargeType'
END AS "付費方式",
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
ip_addresses
FROM
resources
WHERE
resource_type = 'ACS::ECS::Instance'
ORDER BY
resource_id;
|
列出按照作業系統屬性分類的ECS執行個體數量 | 列出按照作業系統屬性分類的ECS執行個體數量。 | --如果查詢結果返回兩列,一列為字串,另一列為數值,可以通過圖表的方式查看結果。
SELECT
properties ->> 'OSType' AS OSType,
COUNT(*) AS num
FROM
resources
WHERE
resource_type = 'ACS::ECS::Instance'
GROUP BY
properties ->> 'OSType';
|
列出已停止的ECS執行個體 | 列出當前已停止的ECS執行個體資源。 | --使用CASE子句,可以對屬性的不同取值進行定義,使查詢結果更易於理解。
--使用CONCAT()函數,可以將多個屬性欄位合并展示在一列中,方便查看。本例使用“/”作為分隔字元。
SELECT
resource_id,
resource_name,
CONCAT(region_id, '/', zone_id) AS "地區/可用性區域",
CASE
properties ->> 'Status'
WHEN 'Pending' THEN '建立中'
WHEN 'Running' THEN '運行中'
WHEN 'Starting' THEN '啟動中'
WHEN 'Stopping' THEN '停止中'
WHEN 'Stopped' THEN '已停止'
END AS "狀態",
CONCAT(
properties ->> 'Cpu',
' vCPU ',
(properties -> 'Memory') :: int / 1024,
' GiB ',
properties ->> 'InstanceType'
) AS "配置",
properties ->> 'InstanceChargeType' AS "付費方式",
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
properties
FROM
resources
WHERE
resource_type = 'ACS::ECS::Instance'
AND properties ->> 'Status' = 'Stopped'
ORDER BY
resource_id;
|
列出ECS執行個體關聯的磁碟 | 列出ECS執行個體關聯的磁碟資源。 | -- 使用JOIN關鍵字可以對多個表進行聯集查詢,根據串連條件和篩選條件擷取所需的查詢結果。
SELECT
a.resource_type AS resource_type_disk,
b.resource_type AS resource_type_instance,
a.resource_id AS disk_id,
a.region_id AS instance_region_id,
b.resource_id AS instance_id,
b.region_id AS disk_region_id
FROM
resources a
LEFT JOIN resources b ON a.properties ->> 'InstanceId' = b.resource_id
WHERE
a.resource_type = 'ACS::ECS::Disk'
AND b.resource_type = 'ACS::ECS::Instance';
|
列出待掛載的磁碟 | 列出待掛載狀態下的磁碟資源。 | SELECT
resource_id,
resource_name,
properties ->> 'Status' AS "雲端硬碟狀態",
CASE
properties ->> 'Type'
WHEN 'system' THEN '系統硬碟'
WHEN 'data' THEN '資料盤'
ELSE properties ->> 'Type'
END AS "雲端硬碟類型",
properties ->> 'DiskChargeType' AS "雲端硬碟計費類型",
CASE
properties ->> 'Portable'
WHEN 'true' THEN '支援'
ELSE '不支援'
END AS "可卸載",
CASE
properties ->> 'DeleteWithInstance'
WHEN 'true' THEN '雲端硬碟隨執行個體釋放自動快照不隨雲端硬碟釋放'
ELSE '雲端硬碟不隨執行個體釋放自動快照不隨雲端硬碟釋放'
END AS "釋允許存取為",
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags
FROM
resources
WHERE
properties ->> 'Status' = 'Available'
AND resource_type = 'ACS::ECS::Disk'
ORDER BY
resource_id;
|
列出磁碟容量大於40G的ECS磁碟資源 | 列出磁碟容量大於40G的ECS磁碟資源,並按照磁碟容量排序。 | SELECT
resource_id,
resource_name,
region_id,
zone_id,
resource_type,
account_id,
create_time,
resource_group_id,
tags,
ip_addresses,
vpc_id,
v_switch_id,
(properties ->> 'Size') :: int AS disk_size
FROM
resources
WHERE
resource_type = 'ACS::ECS::Disk'
AND (properties ->> 'Size') :: int > 40
order by
disk_size;
|
列出即將到期的預付費RDS執行個體 | 列出即將到期的預付費RDS執行個體資源。 | --本例將到期時間小於30天的資源定義為即將到期的資源,可以根據實際需求對此條件進行調整。
--使用TO_TIMESTAMP()函數,可以將表示時間的字串轉換為格式化的時間戳記,以便進行相關的運算。
SELECT
*
FROM
(
SELECT
resource_id,
resource_name,
account_id,
resource_type,
region_id,
zone_id,
create_time,
to_timestamp(
(properties ->> 'ExpireTime') :: varchar,
'YYYY-MM-DD HH24:MI:SS'
) AS "到期時間",
properties ->> 'DBInstanceStatus' AS "執行個體狀態",
properties ->> 'DBInstanceType' AS "執行個體類型",
CONCAT(
properties ->> 'Engine',
' ',
properties ->> 'EngineVersion'
) AS "資料庫類型",
vpc_id,
tags
FROM
resources
WHERE
resource_type = 'ACS::RDS::DBInstance'
and properties ->> 'PayType' = 'Prepaid'
order by
create_time
) AS t
WHERE
t."到期時間" < NOW() + interval '30 day'
ORDER BY
t.resource_id;
|