View a markdown version of this page

查詢系統資料表 - Amazon Redshift

Amazon Redshift 將不再支援從修補程式 198 開始建立新的 Python UDFs。現有 Python UDF 將繼續正常運作至 2026 年 6 月 30 日。如需詳細資訊,請參閱部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

查詢系統資料表

如果驅動程式中繼資料 API 或SHOW命令都不符合您的需求,您可以查詢 PostgreSQL 目錄資料表 (pg_*)、資訊結構描述 (information_schema) 或 Amazon Redshift 系統檢視,例如SVV_TABLE_INFO直接查詢。

此方法適用於您從互動式 SQL 查詢執行的臨機操作探索、偵錯或管理任務,例如在 Amazon Redshift 查詢編輯器 v2 或 中psql。不過,系統目錄結構可能會在 Amazon Redshift 版本之間變更。我們不建議您依賴直接系統資料表查詢做為生產應用程式整合的中繼資料界面。

當您查詢系統資料表時,請遵循下列實務:

  • 指定資料庫、結構描述和資料表。為了獲得最佳效能,請在查詢篩選條件中包含資料庫名稱、結構描述名稱和資料表名稱。縮小範圍可減少 Amazon Redshift 掃描和傳回所需的中繼資料數量。

  • 使用等式或 LIKE 篩選條件。在子WHERE句中使用等式 (=) 或LIKE述詞來縮小結果範圍。避免對大型目錄檢視進行未篩選的查詢。它們在具有許多物件的叢集上可能會很慢。

  • 避免篩選條件述詞中的函數。當您篩選系統資料表查詢時,請勿在子WHERE句中使用 LOWER()或 字串串連等函數。這些可防止有效率的中繼資料查詢,並可能大幅降低查詢效能。

反模式與建議查詢的範例

-- Avoid: SELECT * FROM svv_all_columns; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public' AND table_name = 'sales';
-- Avoid: SELECT * FROM svv_all_columns WHERE LOWER(schema_name) = 'public'; -- Recommended: SELECT * FROM svv_all_columns WHERE schema_name = 'public' AND table_name LIKE 'sales%';
-- Avoid: SELECT * FROM svv_all_columns WHERE database_name || '.' || schema_name || '.' || table_name = 'dev.public.sales'; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public' AND table_name = 'sales';
-- Avoid: SELECT * FROM svv_all_columns WHERE CONCAT(database_name, '.', schema_name) = 'dev.public'; -- Recommended: SELECT * FROM svv_all_columns WHERE database_name = 'dev' and schema_name = 'public';