從遠端主機 COPY (SSH) - Amazon Redshift

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

從遠端主機 COPY (SSH)

您可以使用 COPY 命令從一或多台遠端主機 parallel 載入資料,例如 Amazon Elastic Compute Cloud (Amazon EC2) 執行個體或其他電腦。COPY 會使用 Secure Shell (SSH) 連接至遠端主機,然後在遠端主機運行命令來產生文字輸出。遠端主機可以是 EC2 Linux 實例,或另一台配置為接受 SSH 連線的 Unix 或 Linux 電腦。Amazon Redshift 可以連接至多台主機,也可以打開至每台主機的多個 SSH 連線。Amazon Redshift 會透過每個連線傳送唯一命令,以產生文字輸出來傳到主機的標準輸出,接著會像讀取文字 Amazon Redshift 案一樣讀取此輸出。

使用 FROM 子句來指定 Amazon S3 資訊清單檔案的 Amazon S3 資料金鑰,此資訊清單檔案提供讓 COPY 用來開啟 SSH 連線和運行遠端命令的資訊。

重要

如果保存清單文件的 S3 存儲桶不位於同一AWS區域作為叢集,您必須使用 REGION 參數來指定儲存貯體所在的區域。

Syntax (語法)

FROM 's3://'ssh_manifest_file' } authorization SSH | optional-parameters

範例

下列範例使用資訊清單檔案,以利用 SSH 從遠端主機載入資料。

copy sales from 's3://mybucket/ssh_manifest' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' ssh;

參數

FROM

載入的資料來源。

's3://copy_from_ssh_manifest_file'

COPY 命令可以使用 SSH 來連接至多台主機,也可以對每台主機建立多個 SSH 連線。COPY 會透過每個主機連線運行命令,然後將命令的輸出 parallel 載入資料表。所以此s3://copy_from_ssh_manifest_file參數會指定 Amazon S3 資訊清單檔案的 Amazon S3 資料金鑰,此資訊清單檔案提供讓 COPY 用來開啟 SSH 連線和運行遠端命令的資訊。

所以此s3://copy_from_ssh_manifest_file引數必須明確參考單一檔案;不能是金 key prefix。如下列範例所示:

's3://mybucket/ssh_manifest.txt'

資訊清單檔案是 JSON 格式的文字檔案,Amazon Redshift 會使用此 JSON 格式來連接至主機。資訊清單檔案指定 SSH 主機端點,以及要在主機上運行以將資料傳回給 Amazon Redshift 的命令。您可以選擇在每個項目中包含主機公有金鑰、登入使用者名稱及 mandatory 旗標。下列範例顯示的資訊清單檔案會建立兩個 SSH 連線:

{ "entries": [ {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "<host_user_name>"}, {"endpoint":"<ssh_endpoint_or_IP>", "command": "<remote_command>", "mandatory":true, "publickey": "<public_key>", "username": "<host_user_name>"} ] }

資訊清單檔案包含一個 "entries" 結構來含括每個 SSH 連線。您可以對單一主機建立多個連線,也可以對多台主機建立多個連線。如上所示,欄位名稱和值都需要雙引號字元。 引號字元必須是簡單引號 (0x22),而不是斜向或「智慧型」引號。唯一不需要雙引號字元的值是布林值true或者false(針對)"mandatory"欄位。

下列清單描述資訊清單檔案中的欄位。

endpoint

主機的 URL 地址或 IP 地址 — 例如"ec2-111-222-333.compute-1.amazonaws.com", 或"198.51.100.0"

command

主機運行的命令,會產生文字輸出或 gzip、lzop、bzip2 或 zstd 格式的二進位輸出。命令可以是使用者 "host_user_name" 有許可執行的任何命令。命令可能像是列印檔案這麼簡單,也可能是查詢資料庫或啟動指令碼。輸出 (文字檔案、gzip 二進位檔案、lzop 二進位檔案) 必須採用 Amazon Redshift COPY 命令可擷取的格式。如需詳細資訊,請參閱 準備您的輸入資料

publickey

(選用) 主機的公有金鑰。如果提供公有金鑰,Amazon Redshift 會使用此金鑰來識別主機。如果未提供公有金鑰,Amazon Redshift 不會嘗試識別主機。例如,若遠端主機的公有金鑰是 ssh-rsa AbcCbaxxx…Example root@amazon.com,請在公有金鑰欄位中輸入下列文字:"AbcCbaxxx…Example"

mandatory

(選用) 此子句指出如果嘗試連線失敗,COPY 命令是否就應該失敗。預設為 false。如果 Amazon Redshift 未成功建立至少一個連線,則 COPY 命令會失敗。

username

(選用) 用來登入主機系統並運行遠端命令的使用者名稱。使用者登入名稱與用來將 Amazon Redshift 叢集公有金鑰新增至主機授權金鑰檔案的登入必須相同。預設使用者名稱為 redshift

如需建立資訊清單檔案的詳細資訊,請參閱載入資料程序

若要從遠端主機進行 COPY,則必須使用 COPY 命令指定 SSH 參數。如果未指定 SSH 參數,COPY 會假設 FROM 指定的檔案是資料檔案,而且將會失敗。

如果您使用自動壓縮,COPY 命令會執行兩次資料讀取操作,也就是會運行遠端命令兩次。第一次讀取操作會提供資料樣本進行壓縮分析,第二次讀取操作就會實際載入資料。如果遠端命令的兩次執行可能造成問題,請停用自動壓縮。若要停用自動壓縮,請在執行 COPY 命令時將 COMPUPDATE 參數設為 OFF。如需詳細資訊,請參閱 利用自動壓縮載入資料表

關於使用從 SSH COPY 的詳細程序,請參閱從遠端主機載入資料

authorization

COPY 命令需要取得授權來存取另一個AWS資源中,包括在 Amazon S3、Amazon EMR、Amazon DynamoDB 和 Amazon EC2 中。您可以通過引用AWS Identity and Access Management(IAM) 角色 (角色型存取控制),或將存取登入資料提供給 IAM 使用者 (金鑰型存取控制)。為了提高安全性和彈性,建議使用 IAM 角色型存取控制。如需詳細資訊,請參閱 授權參數

SSH

此子句指定從使用 SSH 通訊協定的遠端主機載入資料。如果指定 SSH,則還必須使用 s3://copy_from_ssh_manifest_file 引數提供資訊清單檔案。

注意

如果您使用 SSH 從位在遠端 VPC 使用私有 IP 地址的主機複製,該 VPC 必須已啟用增強型 VPC 路由。如需增強型 VPC 路由的詳細資訊,請參閱 Amazon Redshift 增強型 VPC 路由

選用參數

從 SSH COPY 時,您可以選擇性指定下列參數:

不支援的參數

從 SSH COPY 時,您不能使用下列參數:

  • ENCRYPTED

  • MANIFEST

  • READRATIO