全部產品
Search
文件中心

Resource Management:支援的樣本查詢範本

更新時間:Jun 30, 2024

本文為您介紹進階搜尋中系統內建的樣本查詢範本。

名稱

描述

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;