Amazon S3 與 AWS Glue 整合



使用 AWS Glue 將資料儲存在 Amazon S3 中

Amazon S3 (簡單儲存服務) 是一種靈活可靠的儲存服務,非常適合管理大型資料集。AWS Glue 是一種提取、轉換和載入 (ETL) 服務,當 Amazon S3 與其整合時,資料的管理和處理變得非常容易。

使用 AWS Glue 將資料儲存在 Amazon S3 中的優勢

以下是使用 AWS Glue 將資料儲存在 Amazon S3 中的關鍵優勢:

  • 使用 AWS Glue 將資料儲存在 S3 中,可以輕鬆訪問儲存在 S3 儲存桶中的資料。我們可以直接對 S3 資料執行 ETL 作業,並將其轉換為有意義的格式。
  • 藉助 Glue 爬蟲,AWS Glue 可以自動檢測儲存在 S3 儲存桶中的資料的模式。這使我們能夠更快、更高效地查詢資料。
  • 使用 AWS Glue 的內建 Apache Spark 環境,我們可以轉換儲存在 Amazon S3 儲存桶中的資料。

如何使用 AWS Glue 儲存和處理 Amazon S3 中的資料?

請按照以下步驟使用 AWS Glue 儲存和處理 S3 儲存桶中的資料:

步驟 1:設定您的 Amazon S3 儲存桶 - 在使用 AWS Glue 之前,必須將資料儲存在 Amazon S3 儲存桶中。您可以透過兩種方式將資料集上傳到 S3 儲存桶:手動或透過檔案傳輸等自動化流程。

步驟 2:建立 Glue 爬蟲 - 將資料放入 S3 儲存桶後,您可以設定一個 Glue 爬蟲,它將掃描您的 S3 儲存桶,提取元資料並將其儲存到 Glue 資料目錄中。

步驟 3:定義和執行 ETL 作業 - 建立元資料後,您現在可以在 AWS Glue 中建立一個 ETL 作業來處理儲存在 S3 儲存桶中的資料。

步驟 4:查詢和分析資料 - 資料處理完成後,您可以使用 Amazon Athena 等 AWS 服務查詢資料。您還可以將其載入到 Amazon Redshift 等資料倉庫中以進行進一步分析。

使用 Amazon S3 管理 AWS Glue 作業中的分割槽

在使用 Amazon S3 時,管理 AWS Glue 中的分割槽對於最佳化效能和降低處理成本非常重要。

分割槽顧名思義,是根據特定鍵(例如日期、區域或產品)將資料集劃分為更小、更易於管理的部分。換句話說,分割槽是將大型資料集組織成較小的邏輯段的一種方法。

例如:

s3://your-bucket-name/data/year=2023/month=09/day=27/

在此示例中,資料按年、月和日進行分割槽。

在 AWS Glue 中設定分割槽

請按照以下步驟在 AWS Glue 中設定分割槽:

步驟 1:在 Amazon S3 中分割槽資料 - 使用基於分割槽鍵(例如,年、月、日)的目錄結構在 Amazon S3 中組織您的資料。例如,s3://my-bucket/sales_data/year=2023/month=09/day=27/。

步驟 2:配置 AWS Glue 爬蟲 - 將分割槽資料放入 S3 後,建立並配置 AWS Glue 爬蟲。爬蟲將自動識別資料夾結構並將分割槽資訊新增到 Glue 資料目錄中。

步驟 3:建立或修改 Glue 作業 - 您可以建立或修改 Glue ETL 作業。在這兩種情況下,都從 Glue 資料目錄中引用分割槽資料。AWS Glue 將使用此資訊僅處理必要的分割槽。

使用 DynamicFrames 管理分割槽

為了輕鬆管理分割槽資料,AWS Glue 提供了DynamicFrames。您可以使用from_catalog 函式載入分割槽資料,並使用filter 函式處理特定分割槽。讓我們看下面的示例:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session

# Load partitioned data from Glue Data Catalog
dynamic_frame = glueContext.create_dynamic_frame.from_catalog(database="my_database", table_name="sales_data")

# Filter data for a specific year and month
filtered_frame = dynamic_frame.filter(f => f["year"] == "2023" and f["month"] == "09")

# Continue with the ETL process
-----------------

上述指令碼將根據年份和月份過濾資料。然後,它執行 ETL 流程中定義的轉換或操作。最終輸出將寫入您的 Amazon S3 儲存桶。

廣告
© . All rights reserved.