使用查詢編輯器 v2 來排程查詢 - Amazon Redshift

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

使用查詢編輯器 v2 來排程查詢

您可以使用 Amazon Redshift 查詢編輯器 v2 建立排程來執行 SQL 陳述式。您可以建立排程,以符合您業務需求的時間間隔執行 SQL 陳述式。當需要執行排程查詢時,查詢會由 Amazon 啟動, EventBridge 並使用 Amazon Redshift 資料 API。

建立排程以執行 SQL 陳述式
  1. 編輯器 Editor 檢視中,選擇 Schedule 排程以建立排程來執行 SQL 陳述式。

  2. 在定義排程時,您會提供下列資訊。

    • 擔任執行查詢所需許可的 IAM 角色。此 IAM 角色也會附加至您的叢集或工作群組。

    • 用於授權存取叢集 AWS Secrets Manager 或工作群組的認證值或臨時認證。資料 API 支援這些身分驗證方法。如需詳細資訊,請參閱 驗證已排程的查詢

    • 資料庫所在的叢集或工作群組。

    • 所要查詢的資料所在資料庫的名稱。

    • 已排程查詢的名稱及其描述。查詢編輯器 v2 會在您提供的已排程查詢名稱前面加上「QS2-」。查詢編輯器 v1 會在其已排程查詢的名稱前面加上「QS-」。

    • 要依排程執行的 SQL 陳述式。

    • 排程頻率和重複選項,或定義排程的 cron 格式值。如需詳細資訊,請參閱 Amazon CloudWatch 事件使用者指南中的 Cron 運算式

    • 您也可以選擇啟用標準 Amazon SNS 通知來監控所排程的查詢。您可能需要確認提供給 Amazon SNS 通知的電子郵件地址。檢查您的電子郵件是否有用來確認 Amazon SNS 通知電子郵件地址的連結。如需詳細資訊,請參閱《Amazon Simple Notification Service 開發人員指南》中的電子郵件通知。如果您的查詢正在執行中,但您沒有看到 SNS 主題中發佈的訊息,請參閱我的規則執行,但在 Amazon EventBridge 使用者指南中看不到發佈到 Amazon SNS 主題中的任何訊息

  3. 選擇排程查詢以儲存並啟用排程,並將排程新增至已排程的查詢檢視中的查詢清單。

已排程的查詢 Scheduled queries 檢視會列出叢集和工作群組的已排程查詢。使用此檢視時,您可以顯示排程查詢詳細資訊、啟用或停用排程、編輯排程,以及刪除已排程的查詢。當您檢視查詢詳細資訊時,您也可以檢視依排程執行查詢的歷史記錄。

注意

排程查詢執行只會在排程歷史記錄清單中存在 24 小時。依排程執行的查詢未出現在查詢編輯器 v2 的查詢歷史記錄檢視中。

設定用來排程查詢的許可

若要排程查詢,定義排程和與排程相關聯的 IAM 角色的 AWS Identity and Access Management (IAM) 使用者必須設定 IAM 許可,才能使用 Amazon EventBridge 和 Amazon Redshift 資料 API。若要接收來自已排程查詢的電子郵件,則還必須設定您選擇性指定的 Amazon SNS 通知。

以下說明使用 AWS 受管理原則來提供權限的工作,但視您的環境而定,您可能會想要縮減允許的權限範圍。

若為已登入查詢編輯器 v2 的 IAM 使用者,請使用 IAM 主控台 (https://console.aws.amazon.com/iam/) 編輯 IAM 使用者。

  • 除了執行 Amazon Redshift 和查詢編輯器 v2 操作的許可外,還可以將AmazonEventBridgeFullAccess和受AmazonRedshiftDataFullAccess AWS 管政策附加到 IAM 使用者。

  • 或者,請將許可指派給角色,然後將角色指派給使用者。

    將允許 sts:AssumeRole 許可的政策附加到您在定義已排程查詢時所指定 IAM 角色的資源 ARN。如需有關擔任角色的相關資訊,請參閱《IAM 使用者指南》中的向使用者授予切換角色的許可

    下列範例顯示在帳戶 123456789012 中擔任 IAM 角色 myRedshiftRole 的許可政策。IAM 角色 myRedshiftRole 也是附加至已排程查詢執行所在叢集或工作群組的 IAM 角色。

    { "Version": "2012-10-17", "Statement": [ { "Sid": "AssumeIAMRole", "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": [ "arn:aws:iam::123456789012:role/myRedshiftRole" ] } ] }

    更新用於排程查詢的 IAM 角色信任政策,以允許 IAM 使用者擔任該角色。

    { "Sid": "AssumeRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/myIAMusername" }, "Action": "sts:AssumeRole" } ] }

針對您指定要允許已排程的查詢執行的 IAM 角色,請使用 IAM 主控台 (https://console.aws.amazon.com/iam/) 編輯 IAM 角色。

  • AmazonRedshiftDataFullAccess和受AmazonEventBridgeFullAccess AWS 管政策附加到 IAM 角色。AmazonRedshiftDataFullAccess 受管政策只會針對標記了索引鍵 RedshiftDataFullAccess 的 Redshift Serverless 工作群組允許 redshift-serverless:GetCredentials 許可。

驗證已排程的查詢

在排程查詢時,您會在 SQL 執行時使用下列其中一種身分驗證方法。每種方法都需要在查詢編輯器 v2 上使用不同的輸入組合。用於執行 SQL 陳述式的資料 API 支援這些身分驗證方法。

用於執行查詢的資料庫使用者或角色必須具備必要的資料庫權限。例如,若要授予資料表 mytableIAMR:MyRedshiftQEv2Scheduler 權限,請執行下列 SQL 命令。

GRANT all ON TABLE mytable TO "IAMR:MyRedshiftQEv2Scheduler";

若要檢視叢集或工作群組中的資料庫使用者清單,請查詢系統檢視 PG_USER_INFO

注意

您為其排程查詢的任何 Redshift 無伺服器工作群組都會使用關鍵字加上標籤。RedshiftDataFullAccess如需詳細資訊,請參閱 授權 Amazon Redshift 資料 API 的存取

若要替代標記工作群組的做法,您也可以將內嵌政策新增至允許 redshift-serverless:GetCredentials 的 IAM 角色 (隨排程指定)。例如:

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UseTemporaryCredentialsForAllServerlessWorkgroups", "Effect": "Allow", "Action": "redshift-serverless:GetCredentials", "Resource": [ "arn:aws:redshift-serverless:*:*:workgroup/*" ] } ] }
AWS Secrets Manager

使用此方法時,請為儲存在 AWS Secrets Manager中的 secret-arn 提供機密值。此秘密包含用來連線至資料庫的憑證。建立叢集或工作群組時,您可能已使用適當的認證建立密碼。此機密必須標記了索引鍵 RedshiftDataFullAccess。如果標籤鍵不存在,請使用 AWS Secrets Manager 控制台將其添加。如需有關建立密碼的資訊,請參閱建立資料庫連線認證的密碼

如需最基本許可的相關資訊,請參閱《AWS Secrets Manager 使用者指南》中的使用 AWS Secrets Manager建立和管理機密

臨時憑證

使用此方法時,請在連線到叢集中的資料庫時提供您的資料庫名稱資料庫使用者值。您只需要在連線至工作群組中的資料庫時提供資料庫名稱

在連線至叢集時,AmazonRedshiftDataFullAccess 政策會允許名為 redshift_data_api_user 的資料庫使用者獲得 redshift:GetClusterCredentials 的許可。如果您想要使用不同的資料庫使用者來執行 SQL 陳述式,請在附加至叢集的 IAM 角色中新增政策以允許 redshift:GetClusterCredentials。下列範例政策會允許資料庫使用者 awsusermyuser

{ "Version": "2012-10-17", "Statement": [ { "Sid": "UseTemporaryCredentialsForAllDbUsers", "Effect": "Allow", "Action": "redshift:GetClusterCredentials", "Resource": [ "arn:aws:redshift:*:*:dbuser:*/awsuser", "arn:aws:redshift:*:*:dbuser:*/myuser" ] } ] }

設定用來檢視排程查詢歷史記錄的許可

若要允許使用者檢視排程查詢歷史記錄,請編輯 IAM 角色 (隨排程指定) 信任關係以新增許的。

以下是 IAM 角色中的信任政策範例,該政策允許 IAM 使用者 myIAMusername 檢視排程查詢歷史記錄。您不必允許 IAM 使用者獲得 sts:AssumeRole 許可,而是可以選擇允許 IAM 角色獲得此許可。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "redshift-serverless.amazonaws.com" ] }, "Action": "sts:AssumeRole" }, { "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "AssumeRole", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/myIAMusername" }, "Action": "sts:AssumeRole" } ] }

監控已排程的查詢

對於您指定要傳送電子郵件通知的 Amazon SNS 主題,請透過導覽至 SNS 通知區段、開啟監控,然後使用建立 SNS 主題建立主題,以使用查詢編輯器 v2 建立 Amazon SNS 主題。查詢編輯器 v2 會建立 Amazon SNS 主題,並將服務主體新增至 Amazon 的存取政策 EventBridge。以下是在 Amazon SNS 主題中建立的存取政策範例。在此範例中,使用了 AWS 區域 美國西部 -2、 AWS 帳戶 1234567890 12 和 Amazon SNS 主題。select-version-pdx-testunload

{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "Allow_Publish_Events", "Effect": "Allow", "Principal": { "Service": "events.amazonaws.com" }, "Action": "sns:Publish", "Resource": "arn:aws:sns:us-west-2:123456789012:select-version-pdx-testunload" } ] }

排程查詢執行時,Amazon SNS 會傳送 AWS 通知電子郵件。下列範例顯示針對已排程查詢傳送至 myemail@example.com 的電子郵件,該查詢在 12345678 9012 中使用 Amazon SNS 通知主題 May25 AWS 區域 A-SNS 在 AWS 帳戶 歐盟北部 -1 執行。

{"version":"0","id":"8e4323ec-5258-7138-181b-91290e30ff9b","detail-type":"Scheduled Event","source":"aws.events","account":"123456789012","time":"2023-05-25T15:22:00Z", "region":"eu-north-1","resources":["arn:aws:events:eu-north-1:123456789012:rule/QS2-may25a"],"detail":{}} -- If you wish to stop receiving notifications from this topic, please click or visit the link below to unsubscribe: https://sns.eu-north-1.amazonaws.com/unsubscribe.html?SubscriptionArn=arn:aws:sns:eu-north-1:123456789012:may25a-SNS:0c1a3d05-39c2-4507-bc3d-47250513d7b0&Endpoint=myemail@example.com Please do not reply directly to this email. If you have any questions or comments regarding this email, please contact us at https://aws.amazon.com/support

針對排程查詢的設定進行故障診斷

如果您在排程查詢時遇到問題,請考慮下列事項。

查詢未執行

檢查排程中使用的 IAM 角色是否有可取得暫時叢集憑證的許可。已佈建叢集的許可為 redshift:GetClusterCredentialsWithIAM。Redshift Serverless 工作群組的許可為 redshift-serverless:GetCredentials

已排程歷史記錄未顯示

用於登入 AWS 主控台的 IAM 使用者或 IAM 角色未新增到用於排程查詢的 IAM 角色的信任政策中。

使用用 AWS Secrets Manager 於排程查詢連線時,請確認密碼已使用金鑰加上標籤RedshiftDataFullAccess

如果排程查詢使用 AWS Secrets Manager 連線,用於排程查詢的 IAM 角色必須SecretsManagerReadWrite附加至該角色的對等受管政策。

查詢歷史記錄狀態為 Failed

如需查詢失敗原因的詳細資訊,請檢視 SYS_QUERY_HISTORY 系統檢視。常見問題是用來執行查詢的資料庫使用者或角色可能沒有要執行 SQL 所需的權限。如需詳細資訊,請參閱 驗證已排程的查詢

下列 SQL 會查詢 SYS_QUERY_HISTORY 檢視以傳回失敗的查詢。

SELECT user_id, query_id, transaction_id, session_id, database_name, query_type, status, error_message, query_text FROM sys_query_history WHERE status = 'failed';

若要了解特定的失敗已排程查詢的詳細資訊,請參閱尋找已排程查詢的詳細資料 AWS CloudShell

尋找已排程查詢的詳細資料 AWS CloudShell

您可以使用 AWS CloudShell 來尋找有關排程查詢的詳細資訊。您必須擁有適當的權限才能執行下列程序中顯示的 AWS CLI 命令。

檢視已排程查詢的結果
  1. 在 AWS 主控台上,開啟 AWS CloudShell 命令提示字元。若要取得有關的更多資訊 AWS CloudShell,請參閱《AWS CloudShell 使用指南》 AWS CloudShell中的內

  2. 擔任已排程查詢的 IAM 角色。若要擔任該角色,請在查詢編輯器 v2 中尋找與排程查詢相關聯的 IAM 角色,並在中的 AWS CLI 命令中使用該角色 AWS CloudShell。例如,針對角色,scheduler輸入 AWS STS 指令來承擔排程查詢所使用的角色。

    aws sts assume-role —role-arn "arn:aws:iam::123456789012:role/scheduler" —role-session-name "scheduler-test"

    傳回的憑證類似以下內容。

    "Credentials": { "AccessKeyId": "AKIAIOSFODNN7EXAMPLE", "SecretAccessKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY", "SessionToken": "je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY...", "Expiration": "2023-08-18T18:19:44+00:00" }, "AssumedRoleUser": { "AssumedRoleId": "AROA35B2NH6WBTP7ONL4E:scheduler-test", "Arn": "arn:aws:sts::123456789012:assumed-role/scheduler/scheduler-test" } }
  3. AWS CLI 使用假設 IAM 角色所顯示的登入資料,在中建立環境變數。您必須使用這些字符,直到其到期。例如,您可以在中輸入下列內容 AWS CloudShell。

    export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY export AWS_SESSION_TOKEN=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY...
  4. 若要檢視失敗查詢的錯誤,請執行 AWS CLI 命令來描述陳述式。SQL 陳述式的 ID 來自查詢編輯器 v2 中已排程查詢之排程歷史記錄區段中顯示的 ID

    aws redshift-data describe-statement —id 130d2620-05d2-439c-b7cf-815d9767f513

    在此範例中,已排程的 SQL select * from users limit 100 會導致 users 資料表不存在的 SQL 錯誤。

    { "CreatedAt": "2023-08-18T17:39:15.563000+00:00", "Duration": -1, "Error": "ERROR: relation \"users\" does not exist", "HasResultSet": false, "Id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "QueryString": "select * from users limit 100\n—RequestID=a1b2c3d4-5678-90ab-cdef-EXAMPLE22222; TraceID=1-633c5642-4039308d03f3a0ba53dbdf6f", "RedshiftPid": 1073766651, "RedshiftQueryId": 0, "ResultRows": -1, "ResultSize": -1, "Status": "FAILED", "UpdatedAt": "2023-08-18T17:39:16.116000+00:00", "WorkgroupName": "default" }

排程查詢的示範

如需排程查詢的示範,請觀看下列影片。