從 Amazon DynamoDB 資料表載入資料 - Amazon Redshift

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

從 Amazon DynamoDB 資料表載入資料

您可以使用 COPY 命令,從單一 Amazon DynamoDB 資料表載入具有資料的資料表。

重要

除非您使用REGION選項指定 Amazon DynamoDB 表格所在的 AWS 區域,否則提供資料的 Amazon DynamoDB 表必須建立在與叢集相同的 AWS 區域中。

COPY 命令會使用 Amazon Redshift 大量平行處理 (MPP) 架構,從 Amazon DynamoDB 資料表平行讀取和載入資料。您可以藉由在 Amazon Redshift 資料表上設定配送樣式來善加利用平行處理。如需詳細資訊,請參閱 使用資料分佈樣式

重要

當 COPY 命令從 Amazon DynamoDB 資料表讀取資料時,產生的資料傳輸為該資料表佈建的輸送量的一部分。

若要避免耗用過量的佈建的讀取輸送量,建議您不要從位在生產環境中的 Amazon DynamoDB 資料表載入資料。如果您的確從生產資料表載入資料,建議您將 READRATIO 選項設定為低於未使用佈建的輸送量平均百分比。較低的 READRATIO 設定將有助於減少節流問題。若要使用整個佈建的 Amazon DynamoDB 資料表輸送量,請將 READRATIO 設定為 100。

COPY 命令會使用下列規則,將擷取自 DynamoDB 資料表的項目中的屬性名稱,與現有 Amazon Redshift 資料表中的資料欄名稱比對:

  • Amazon Redshift 資料表資料欄與 Amazon DynamoDB 項目屬性為不區分大小寫的比對。如果 DynamoDB 資料表中的項目包含只有大小寫差異的多個屬性,例如 Price 和 PRICE,則 COPY 命令將會失敗。

  • 取決於在 COPY 命令中搭配 EMPTYASNULL 選項指定的值,不符合 Amazon DynamoDB 資料表中屬性的 Amazon Redshift 資料表資料欄會以 NULL 或空白形式載入。

  • 不符合 Amazon Redshift 資料表中資料欄的 Amazon DynamoDB 屬性則會遭捨棄。屬性是在比對之前讀取,因此即使是捨棄的屬性也會使用資料表佈建的輸送量的一部分。

  • 僅支援具有純量 STRING 和 NUMBER 資料類型的 Amazon DynamoDB 屬性。不支援 Amazon DynamoDB BINARY 和 SET 資料類型。如果 COPY 命令嘗試載入具有不支援資料類型的屬性,命令將會失敗。如果屬性不符合 Amazon Redshift 資料表資料欄,COPY 不會嘗試載入它,也不會引發錯誤。

COPY 命令使用下列語法來從 Amazon DynamoDB資料表載入資料:

copy <redshift_tablename> from 'dynamodb://<dynamodb_table_name>' authorization readratio '<integer>';

授權值是存取 Amazon DynamoDB 表格所需的 AWS 登入資料。如果這些登入資料對應於某個使用者,該使用者必須具備許可能夠 SCAN 和 DESCRIBE 要載入的 Amazon DynamoDB 資料表。

授權值提供叢集存取 Amazon DynamoDB 表所需的 AWS 授權。許可必須包含要載入之 Amazon DynamoDB 資料表的 SCAN 和 DESCRIBE。如需所需許可的相關資訊,請參閱COPY、UNLOAD 和 CREATE LIBRARY 的 IAM 許可。身分驗證的偏好方法是指定 IAM_ROLE 參數,並提供 IAM 角色的 Amazon Resource Name (ARN) 所需的許可。如需詳細資訊,請參閱 角色類型存取控制

若要使用 IAM_ROLE 參數進行驗證,請參閱 < aws-account-id >,並<role-name>如下列語法所示。

IAM_ROLE 'arn:aws:iam::<aws-account-id>:role/<role-name>'

下列範例顯示使用 IAM 角色進行身分驗證。

copy favoritemovies from 'dynamodb://ProductCatalog' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole';

如需其他授權選項的相關資訊,請參閱授權參數

如果想要驗證您的資料而不實際載入資料表,請使用 NOLOAD 選項搭配 COPY 命令。

下列範例會以 DynamoDB 表格中的資料載入「我的最愛影片」表格。 my-favorite-movies-table讀取活動可能耗用最多 50% 的佈建輸送量。

copy favoritemovies from 'dynamodb://my-favorite-movies-table' iam_role 'arn:aws:iam::0123456789012:role/MyRedshiftRole' readratio 50;

為了讓輸送量達到最大,COPY 命令會跨叢集中的運算節點,從 Amazon DynamoDB 資料表平行載入資料。

具備自動壓縮的佈建輸送量

依預設,每當您指定空白的目標資料表而沒有壓縮編碼時,COPY 命令會套用自動壓縮。自動壓縮分析最初會從 Amazon DynamoDB 資料表取樣大量資料列。樣本大小是基於 COMPROWS 參數的值。預設值為每個配量 100,000 個資料列。

取樣之後,會捨棄樣本資料列並載入整個資料表。因此,許多資料列會讀取兩次。如需自動壓縮運作方式的相關資訊,請參閱利用自動壓縮載入資料表

重要

當 COPY 命令從 Amazon DynamoDB 資料表讀取資料時,包括用於取樣的資料列,產生的資料傳輸為該資料表佈建的輸送量的一部分。

從 Amazon DynamoDB 載入多位元組資料

如果資料包含非 ASCII 多位元組字元 (例如中文或斯拉夫文字元),您必須將資料載入 VARCHAR 欄。VARCHAR 資料類型支援四位元組 UTF-8 字元,但 CHAR 資料類型只接受單位元組 ASCII 字元。您無法將五位元組或更長的字元載入 Amazon Redshift 資料表。如需 CHAR 和 VARCHAR 的相關資訊,請參閱資料類型