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

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

從遠端主機 COPY (SSH)

您可以使用 COPY 命令從一或多台遠端主機平行載入資料,例如 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 物件金鑰,此資訊清單檔案提供讓 COPY 用來開啟 SSH 連線和執行遠端命令的資訊。

重要

如果存放資訊清單檔案的 S3 儲存貯體所在區域與叢集的 AWS 區域不是同一個,您必須使用 REGION 參數來指定儲存貯體所在的區域。

語法

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 會透過每個主機連線執行命令,然後將命令的輸出平行載入資料表。s3://copy_from_ssh_manifest_file 引數會指定資訊清單檔案的 Amazon S3 物件金鑰,此清單檔案會提供讓 COPY 用來開啟 SSH 連線和執行遠端命令的資訊。

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

's3://mybucket/ssh_manifest.txt'

資訊清單檔案是 JSON 格式的文字檔案,供 Amazon Redshift 用來連接至主機。資訊清單檔案指定 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),而不是斜向或「智慧型」引號。唯一不需要雙引號字元的值是 "mandatory" 欄位的布林值 truefalse

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

端點

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

command

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

publickey

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

mandatory

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

用戶名

(選用) 用來登入主機系統並執行遠端命令的使用者名稱。使用者登入名稱與用來將 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