將資料從 Amazon Aurora 我的資料SQL庫叢集儲存到 Amazon S3 儲存貯體中的文字檔 - Amazon Aurora

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

將資料從 Amazon Aurora 我的資料SQL庫叢集儲存到 Amazon S3 儲存貯體中的文字檔

您可以使用該SELECT INTO OUTFILE S3陳述式查詢 Amazon Aurora 我的資料SQL庫叢集中的資料,並將其儲存到存放在 Amazon S3 儲存貯體的文字檔案中。在 Aurora My 中SQL,檔案會先存放在本機磁碟上,然後匯出至 S3。匯出完成後,會刪除本機檔案。

您可以使用 Amazon S3 受管金鑰 (SSE-S3) 或 (SSE-KMS: AWS 受管金鑰 或 AWS KMS key 客戶受管金鑰) 加密 Amazon S3 儲存貯體。

LOAD DATA FROM S3陳述式可以使用陳SELECT INTO OUTFILE S3述式建立的檔案,將資料載入 Aurora DB 叢集。如需詳細資訊,請參閱將資料從 Amazon S3 儲存貯體中的文字檔案載入 Amazon Aurora 我的資料SQL庫叢集

注意

Aurora Serverless v1 資料庫叢集不支援此功能。Aurora Serverless v2 資料庫叢集支援它。

您也可以使用 AWS Management Console、 AWS CLI或 Amazon 將資料庫叢集資料和資料庫叢集快照資料儲存到 Amazon S3 RDS API。如需詳細資訊,請參閱 將資料庫叢集資料匯出至 Amazon S3將資料庫叢集快照資料匯出至 Amazon S3

授予 Aurora 我對 Amazon S3 的SQL訪問權限

在將資料儲存到 Amazon S3 儲存貯體之前,您必須先授與 Aurora 我的資料SQL庫叢集存取 Amazon S3 的權限。

給 Aurora 我SQL訪問 Amazon S3
  1. 建立可提供儲存貯體和物件許可的 AWS Identity and Access Management (IAM) 政策,讓您的 Aurora My SQL DB 叢集存取 Amazon S3。如需說明,請參閱 建立存取 Amazon S3 資源的IAM政策

    注意

    在 Aurora My 3.05 SQL 版及更高版本中,您可以使用 AWS KMS 客戶管理的金鑰加密物件。若要這麼做,請在您的IAM政策中包含kms:GenerateDataKey權限。如需詳細資訊,請參閱建立 IAM 政策來存取 AWS KMS 資源

    您不需要此權限即可使用 AWS 受管金鑰 或 Amazon S3 受管金鑰 (SSE-S3) 加密物件。

  2. 建立IAM角色,並將您在中建立的IAM策略附加建立存取 Amazon S3 資源的IAM政策到新IAM角色。如需說明,請參閱 建立 IAM 角色以允許 Amazon Aurora 存取 AWS 服務

  3. 對於 Aurora 我的SQL版本 2,請將aurora_select_into_s3_role或資aws_default_s3_role料庫叢集參數設定為新IAM角色的 Amazon 資源名稱 (ARN)。如果未為指定IAM角色aurora_select_into_s3_role,Aurora 會使用中指定的IAM角色aws_default_s3_role

    對於 Aurora 我的SQL版本 3,使用aws_default_s3_role

    如果叢集屬於 Aurora 全球資料庫,請為全球資料庫中的每個 Aurora 叢集設定此參數。

    如需資料庫叢集參數的詳細資訊,請參閱 Amazon Aurora 資料庫叢集和資料庫執行個體參數

  4. 若要允許 Aurora My SQL DB 叢集中的資料庫使用者存取 Amazon S3,請將您在中建立的角色建立 IAM 角色以允許 Amazon Aurora 存取 AWS 服務與資料庫叢集建立關聯。

    對於 Aurora 全球資料庫,請將此角色與全球資料庫中的每個 Aurora 叢集建立關聯。

    如需將IAM角色與資料庫叢集產生關聯的資訊,請參閱將 IAM 角色與 Amazon Aurora MySQL 資料庫叢集建立關聯

  5. 設定您的 Aurora 我的SQL資料庫叢集,以允許對 Amazon S3 的輸出連線。如需說明,請參閱「啟用從 Amazon Aurora 到其他 AWS 服務的網路通訊」。

    對於 Aurora 全球資料庫,請對全球資料庫中的每個 Aurora 叢集啟用傳出連線。

授與在我的 Aurora 中儲存資料的權限 SQL

發出 SELECT INTO OUTFILE S3 陳述式的資料庫使用者必須具備特定的角色或權限。在 Aurora 我的SQL版本 3 中,您授予AWS_SELECT_S3_ACCESS角色。在 Aurora 我的SQL版本 2 中,您授予SELECT INTO S3權限。根據預設,會將適當的角色或權限授予資料庫叢集的管理使用者。您可以使用下列其中一個陳述式,將此權限授予另一個使用者。

針對我的SQL版本 3 的 Aurora 使用下列陳述式:

GRANT AWS_SELECT_S3_ACCESS TO 'user'@'domain-or-ip-address'
提示

當您在 Aurora My SQL 版本 3 中使用角色技術時,也可以使用SET ROLE role_nameSET ROLE ALL陳述式來啟動角色。如果您不熟悉 My SQL 8.0 角色系統,可以在中深入瞭解角色型權限模型。如需詳細資訊,請參閱「我的SQL參考手冊」中的使用角色」。

此僅適用於目前的作用中工作階段。重新連線時,您必須再次執行SET ROLE陳述式以授與權限。如需詳細資訊,請參閱「我的SQL參考手冊」中的SETROLE陳述式

您可以使用 activate_all_roles_on_login 資料庫叢集參數,在使用者連線至資料庫執行個體時自動啟動所有角色。設定此參數時,您通常不需要明確呼叫SET ROLE陳述式即可啟用角色。如需詳細資訊,請參閱「我的參考手冊」中的「啟動」。SQL

不過,當不同的使用者呼叫預存程序時,您必須在預存程序開頭SET ROLE ALL明確呼叫,才能啟動角色。

針對我的SQL版本 2 的 Aurora 使用下列陳述式:

GRANT SELECT INTO S3 ON *.* TO 'user'@'domain-or-ip-address'

AWS_SELECT_S3_ACCESS角色和SELECT INTO S3權限專屬於 Amazon Aurora MySQL,不適用於我的SQL資料庫或我的RDS資料SQL庫執行個體。如果您已將 Aurora My SQL DB 叢集設定為複寫來源,並將 My SQL 資料庫設定為複寫用戶端之間的複寫,則該角色或權限的GRANT陳述式會導致複寫停止並出現錯誤。您可以放心略過此錯誤並繼續複寫。若要略過 [我的SQL資料庫執行個體] RDS 的錯誤,請使用 mysql _rds_skip_repl_error 程序。若要略過外部我的SQL資料庫上的錯誤,請使用 slave_skip_ error 系統變數 (Aurora 我的SQL版本 2) 或系統變數 (Aurora 我的版本 3)。SQL

指定 Amazon S3 儲存貯體的路徑

指定路徑將資料和資訊清單存放在 Amazon S3 儲存貯體的語法,類似於 LOAD DATA FROM S3 PREFIX 陳述式中使用的語法,如下所示。

s3-region://bucket-name/file-prefix

路徑包含以下值:

  • region(選擇性) — 包含要將資料儲存到的 Amazon S3 儲存貯體的 AWS 區域。此值是選用的。如果未指定 region 值,Aurora 會將檔案儲存至資料庫叢集所在同一個區域中的 Amazon S3。

  • bucket-name – 供儲存資料的 Amazon S3 儲存貯體的名稱。支援表示虛擬資料夾路徑的物件字首。

  • file-prefix – Amazon S3 物件字首,指出要儲存在 Amazon S3 中的檔案。

SELECT INTO OUTFILE S3語句創建的數據文件使用以下路徑,其中 00000 代表 5 位數、從零開始的整數。

s3-region://bucket-name/file-prefix.part_00000

例如,假設 SELECT INTO OUTFILE S3 陳述式指定 s3-us-west-2://bucket/prefix 做為路徑來存放資料檔案,並建立三個資料檔案。指定的 Amazon S3 儲存貯體包含下列資料檔案。

  • s3-us-west-2://bucket/prefix.part_00000

  • s3-us-west-2://bucket/prefix.part_00001

  • s3-us-west-2://bucket/prefix.part_00002

建立資訊清單以列出資料檔案

您可以將SELECT INTO OUTFILE S3陳述式與MANIFEST ON選項搭配使用,以列出陳述JSON式建立的文字檔案的格式建立資訊清單檔案。LOAD DATA FROM S3陳述式可以使用資訊清單檔案將資料檔案重新載入 Aurora My SQL DB 叢集。如需使用資訊清單將資料檔案從 Amazon S3 載入 Aurora My SQL DB 叢集的詳細資訊,請參閱使用資訊清單指定要載入的資料檔案

SELECT INTO OUTFILE S3 陳述式所建立的資訊清單中包含的資料檔案,依陳述式建立它們的順序列出。例如,假設 SELECT INTO OUTFILE S3 陳述式指定 s3-us-west-2://bucket/prefix 做為路徑來存放資料檔案,並建立三個資料檔案和一個資訊清單檔案。指定的 Amazon S3 儲存貯體包含名為 s3-us-west-2://bucket/prefix.manifest 的資訊清單檔案,其中包含下列資訊。

{ "entries": [ { "url":"s3-us-west-2://bucket/prefix.part_00000" }, { "url":"s3-us-west-2://bucket/prefix.part_00001" }, { "url":"s3-us-west-2://bucket/prefix.part_00002" } ] }

SELECTINTOOUTFILES3

您可以使用 SELECT INTO OUTFILE S3 陳述式從資料庫叢集查詢資料,然後將資料直接儲存至 Amazon S3 儲存貯體中存放的分隔文字檔案。

不支援壓縮檔案。從 Aurora 我的SQL版本 2.09.0 開始,支持加密文件。

語法

SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [PARTITION partition_list] [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] INTO OUTFILE S3 's3_uri' [CHARACTER SET charset_name] [export_options] [MANIFEST {ON | OFF}] [OVERWRITE {ON | OFF}] [ENCRYPTION {ON | OFF | SSE_S3 | SSE_KMS ['cmk_id']}] export_options: [FORMAT {CSV|TEXT} [HEADER]] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ]

參數

SELECT INTO OUTFILE S3 陳述式會使用下列必要和選用參數,這些參數專供 Aurora 使用。

s3-uri

指定URI要使用的 Amazon S3 前綴。使用 指定 Amazon S3 儲存貯體的路徑 中描述的語法。

FORMAT {CSV|TEXT} [HEADER]

(可選)以CSV格式保存數據。

此選TEXT項為預設值,並產生現有的「我的」SQL 匯出格式。

CSV 選項會產生逗號分隔的資料值。CSV格式遵循 RFC-4 180 中的規格。如果您指定選用的關鍵字 HEADER,則輸出檔包含一個標題列。標題列的標籤對應於 SELECT 陳述式中的欄名稱。您可以使用這些CSV檔案來訓練資料模型,以搭配 AWS ML 服務使用。如需將匯出的 Aurora 資料與 AWS ML 服務搭配使用的詳細資訊,請參閱將資料匯出到 Amazon S3 進行 SageMaker 模型訓練 (進階)

MANIFEST{開啟 |OFF}

指出是否在 Amazon S3 中建立資訊清單檔案。資訊清單檔案是 JavaScript 物件符號 (JSON) 檔案,可用來透過LOAD DATA FROM S3 MANIFEST陳述式將資料載入 Aurora DB 叢集。如需有關 LOAD DATA FROM S3 MANIFEST 的詳細資訊,請參閱 將資料從 Amazon S3 儲存貯體中的文字檔案載入 Amazon Aurora 我的資料SQL庫叢集

如果在查詢中指定 MANIFEST ON,則在建立和上傳所有資料檔案之後,就會在 Amazon S3 中建立資訊清單檔案。資訊清單檔案是使用下列路徑來建立:

s3-region://bucket-name/file-prefix.manifest

如需資訊清單檔案之內容格式的詳細資訊,請參閱建立資訊清單以列出資料檔案

OVERWRITE{開啟 |OFF}

指出是否覆寫所指定 Amazon S3 儲存貯體中的現有檔案。如果OVERWRITE ON已指定,則會覆寫符合中URI指定之檔案前綴的現s3-uri有檔案。否則會發生錯誤。

ENCRYPTION{上 | OFF | SSE _S3 | SSE _ KMS ['cmk_id']}

指出是否將伺服器端加密與 Amazon S3 受管金鑰 (SSE-S3) 或 AWS KMS keys (SSE-KMS,包括 AWS 受管金鑰 和客戶受管金鑰) 搭配使用。SSE_S3SSE_KMS設置可在 Aurora 我的SQL版本 3.05 及更高版本中使用。

您也可以使用 aurora_select_into_s3_encryption_default 工作階段變數,而不是如下列範例所示的 ENCRYPTION 子句。使用SQL子句或會話變量,但不能同時使用兩者。

set session set session aurora_select_into_s3_encryption_default={ON | OFF | SSE_S3 | SSE_KMS};

SSE_S3SSE_KMS設置可在 Aurora 我的SQL版本 3.05 及更高版本中使用。

當您將 aurora_select_into_s3_encryption_default 設定為下列值時:

  • OFF – 會遵循 S3 儲存貯體的預設加密政策。aurora_select_into_s3_encryption_default 的預設值為 OFF

  • ON或者 SSE_S3 — S3 物件使用 Amazon S3 受管金鑰 (SSE-S3) 加密。

  • SSE_KMS— S3 物件使用 AWS KMS key.

    在這種情況下,您還須包括工作階段變數 aurora_s3_default_cmk_id,例如:

    set session aurora_select_into_s3_encryption_default={SSE_KMS}; set session aurora_s3_default_cmk_id={NULL | 'cmk_id'};
    • aurora_s3_default_cmk_idNULL,S3 物件會使用 AWS 受管金鑰進行加密。

    • aurora_s3_default_cmk_id 是非空字串 cmk_id,S3 物件會使用客戶受管金鑰進行加密。

      cmk_id 的值不可以是空字串。

當您使用 SELECT INTO OUTFILE S3 命令時,Aurora 會按下列方式確定加密:

  • 如果子ENCRYPTION句存在於SQL命令中,則 Aurora 僅依賴的值ENCRYPTION,而不會使用工作階段變數。

  • 如果 ENCRYPTION 子句不存在,Aurora 會依賴工作階段變數的值。

如需詳細資訊,請參閱 Amazon S3 受管金鑰 (SSE-S3) 搭配使用伺服器端加密和 Amazon 簡單儲存服務使用者指南中的AWS KMS 金鑰使用伺服器端加密 (SSE-KMS)

您可以在我的SQL文件中,在SELECT陳述式和LOADDATA陳述式中找到有關其他參數的詳細資訊。

考量事項

寫入 Amazon S3 儲存貯體的檔案數量取決於SELECT INTO OUTFILE S3陳述式選取的資料量,以及 Aurora My 的檔案大小閾值SQL。預設的檔案大小臨界值為 6 GB。如果陳述式所選取的資料小於檔案大小臨界值,則只會建立單一檔案,否則會建立多個檔案。關於此陳述式所建立的檔案,其他考量包括:

  • Aurora 我SQL保證資料檔案中的資料列不會跨越檔案邊界分割。若為多個檔案,每個資料檔案 (最後一個檔案除外) 的大小通常接近檔案大小臨界值。不過,偶爾低於檔案大小臨界值會導致一列分割在兩個資料檔案中。在這種情況下,Aurora My 會SQL建立一個資料檔,使資料列保持不變,但可能大於檔案大小閾值。

  • 因為 Aurora My 中的每個SELECT陳述式都是以原子交易的形式SQL執行,所以選取大型資料集的SELECT INTO OUTFILE S3陳述式可能會執行一段時間。如果陳述式由於任何原因而失敗,您可能需要重新開始發出陳述式。不過,如果陳述式失敗,則已上傳至 Amazon S3 的檔案仍然留在指定的 Amazon S3 儲存貯體中。您可以使用另一個陳述式來上傳剩餘的資料,而不必重新開始。

  • 如果要選取的資料量很大 (超過 25 GB),建議您使用多個 SELECT INTO OUTFILE S3 陳述式將資料儲存至 Amazon S3。每個陳述式應該選取不同的資料部分來儲存,也應該在 file_prefix 參數中指定不同的 s3-uri,以便於儲存資料檔案時使用。使用多個陳述式來分割要選取的資料,可以更輕鬆地從某個陳述式中的錯誤中復原。如果某個陳述式發生錯誤,則只需要重新選取部分資料並上傳至 Amazon S3。使用多個陳述式也有助於避免單一長時間執行的交易,可提升效能。

  • 如果多個 SELECT INTO OUTFILE S3 陳述式平行執行來選取資料給 Amazon S3,而且在 file_prefix 參數中使用相同的 s3-uri,則無法確定行為。

  • 中繼資料 (例如資料表結構描述或檔案中繼資料) 不會由 Aurora My 上傳SQL至 Amazon S3。

  • 在某些情況下,您可能需要重新執行 SELECT INTO OUTFILE S3 查詢,例如從失敗中復原。在這些情況下,您必須從 Amazon S3 儲存貯體中移除具有相同檔案字首 (在 s3-uri 中指定) 的任何現有資料檔案,或在 OVERWRITE ON 查詢中包含 SELECT INTO OUTFILE S3

SELECT INTO OUTFILE S3陳述式會傳回一般的 My SQL 錯誤編號,以及成功或失敗時的回應。如果您無法存取我的SQL錯誤編號和回應,判斷何時完成的最簡單方法是在陳述式MANIFEST ON中指定。資訊清單檔案是陳述式寫入的最後一個檔案。換言之,如果您有資訊清單檔案,就表示陳述式已完成。

目前,無法直接監控 SELECT INTO OUTFILE S3 陳述式在執行時的進度。不過,假設您使用此陳述式SQL將大量資料從 Aurora My 寫入 Amazon S3,而且您知道陳述式選取的資料大小。在此情況下,您可以監控 Amazon S3 中建立資料檔案的情形,以估計進度。

在作法上,您知道陳述式選取的資料大約每 6 GB,就會在指定的 Amazon S3 儲存貯體中建立一個資料檔案。將選取的資料大小除以 6 GB,即可估計要建立的資料檔案數目。然後,您可以監控陳述式執行時上傳至 Amazon S3 的檔案數目,以估計陳述式的進度。

範例

下列陳述式會選取employees表格中的所有資料,並將資料儲存到與 Aurora My SQL DB 叢集位於不同區域的 Amazon S3 儲存貯體。在此陳述式所建立的資料檔案中,每個欄位的結尾是逗號 (,) 字元,而每一列的結尾是換行 (\n) 字元。如果符合 sample_employee_data 檔案字首的檔案存在於指定的 Amazon S3 儲存貯體中,此陳述式會傳回錯誤。

SELECT * FROM employees INTO OUTFILE S3 's3-us-west-2://aurora-select-into-s3-pdx/sample_employee_data' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n';

下列陳述式會選取employees表格中的所有資料,並將資料儲存至與 Aurora My SQL DB 叢集位於相同區域的 Amazon S3 儲存貯體。在此陳述式所建立的資料檔案中,每個欄位的結尾是逗號 (,) 字元,而每一列的結尾是換行 (\n) 字元,此外也建立一個資訊清單檔案。如果符合 sample_employee_data 檔案字首的檔案存在於指定的 Amazon S3 儲存貯體中,此陳述式會傳回錯誤。

SELECT * FROM employees INTO OUTFILE S3 's3://aurora-select-into-s3-pdx/sample_employee_data' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' MANIFEST ON;

下列陳述式選取 employees 資料表中的所有資料,並將資料儲存至不是位於 Aurora 資料庫叢集所在區域中的 Amazon S3 儲存貯體。在此陳述式所建立的資料檔案中,每個欄位的結尾是逗號 (,) 字元,而每一列的結尾是換行 (\n) 字元。此陳述式會覆寫指定的 Amazon S3 儲存貯體中任何符合 sample_employee_data 檔案字首的現有檔案。

SELECT * FROM employees INTO OUTFILE S3 's3-us-west-2://aurora-select-into-s3-pdx/sample_employee_data' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' OVERWRITE ON;

下列陳述式會選取employees表格中的所有資料,並將資料儲存至與 Aurora My SQL DB 叢集位於相同區域的 Amazon S3 儲存貯體。在此陳述式所建立的資料檔案中,每個欄位的結尾是逗號 (,) 字元,而每一列的結尾是換行 (\n) 字元,此外也建立一個資訊清單檔案。此陳述式會覆寫指定的 Amazon S3 儲存貯體中任何符合 sample_employee_data 檔案字首的現有檔案。

SELECT * FROM employees INTO OUTFILE S3 's3://aurora-select-into-s3-pdx/sample_employee_data' FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' MANIFEST ON OVERWRITE ON;