Sử dụng AWS Glue ETL để thực hiện kết hợp dữ liệu (merge), phát triển phân vùng (partition) và phát triển lược đồ (schema) trên Apache Iceberg

by Satyanarayana Adimula | on 04 MAR 2024 | in Amazon Athena, Amazon Simple Storage Service (S3), AWS Glue, AWS Lake Formation, Best Practices, Customer Solutions, Experience-Based Acceleration, Expert (400), Technical How-to | Permalink |  Comments |  Share

Khi doanh nghiệp thu thập số lượng dữ liệu ngày càng tăng từ nhiều nguồn, cấu trúc và tổ chức dữ liệu thường cần thay đổi theo thời gian để đáp ứng nhu cầu phân tích ngày càng tăng. Tuy nhiên, việc thay đổi lược đồ (schema) và phân vùng bảng (partition) trong các hồ dữ liệu truyền thống (traditional data lakes) có thể là một công việc gây gián đoạn và tốn thời gian, đòi hỏi phải phải đổi tên hoặc tạo lại toàn bộ bảng và xử lý lại các tập dữ liệu lớn. Điều này gây tốn thời gian để có thể tìm hiểu sâu vào dữ liệu.

Quá trình phát triển của schema cho phép thêm, xóa, đổi tên hoặc sửa đổi các cột mà không cần phải ghi lại dữ liệu hiện có. Điều này rất quan trọng đối với các doanh nghiệp phát triển nhanh trong việc tăng cường cấu trúc dữ liệu để hỗ trợ các trường hợp sử dụng mới. Ví dụ: một công ty thương mại điện tử có thể thêm các thuộc tính nhân khẩu học của khách hàng mới hoặc cờ trạng thái đơn hàng để làm phong phú thêm dữ liệu phân tích. Apache Iceberg quản lý những thay đổi schema này một cách tương thích với phiên bản trước thông qua kiến trúc đổi mới về metadata table.

Tương tự, quá trình phát triển phân vùng (partition) cho phép thêm, xóa hoặc chia phân vùng một cách liền mạch. Ví dụ: một thị trường thương mại điện tử ban đầu có thể phân vùng dữ liệu đơn hàng theo ngày. Khi số đơn hàng tăng lên và việc truy vấn theo ngày trở nên không hiệu quả,  họ có thể chia thành phân vùng theo ngày và ID khách hàng. Phân vùng bảng tổ chức bộ dữ liệu lớn một cách hiệu quả nhất cho hiệu suất truy vấn. Iceberg mang lại cho doanh nghiệp sự linh hoạt để điều chỉnh phân vùng theo từng phần thay vì yêu cầu vất vả tạo lại partition. Phân vùng mới có thể được thêm vào một cách tương thích hoàn toàn mà không gây downtime hoặc không cần viết lại các tệp dữ liệu hiện có.

Bài đăng này trình bày cách bạn có thể khai thác Iceberg, Amazon Simple Storage Service (Amazon S3), AWS Glue, AWS Lake FormationAWS Identity and Access Management (IAM) để triển khai một transactional data lake hỗ trợ sự phát triển liền mạch. Bằng cách cho phép điều chỉnh lược đồ (schema) và phân vùng (partition) một cách dễ dàng khi thông tin chi tiết về dữ liệu thay đổi/phát triển, bạn có thể tận dụng tính linh hoạt của Iceberg để đạt được thành công trong kinh doanh.

Tổng quan về giải pháp

Trong ví dụ dưới đây của chúng tôi, một công ty thương mại điện tử lớn (hư cấu) xử lý hàng nghìn đơn đặt hàng mỗi ngày. Khi đơn hàng được nhận, cập nhật, hủy, vận chuyển, giao hoặc trả lại, các thay đổi sẽ được thực hiện trong hệ thống on-premises của họ và những thay đổi đó cần được sao chép (replicate) sang hồ dữ liệu (data lake) S3 để các nhà phân tích dữ liệu có thể chạy truy vấn thông qua Amazon Athena. Những thay đổi cũng có thể chứa các sự thay đổi về lược đồ (schema). Do yêu cầu bảo mật của các tổ chức khác nhau, họ cần quản lý kiểm soát truy cập chi tiết cho các nhà phân tích thông qua Lake Formation.

Sơ đồ sau minh họa kiến ​​trúc giải pháp.

Quy trình sẽ gồm các bước sau:

  1. Nhập dữ liệu từ on premises vào Dropzone bằng cách sử dụng ingestion pipeline.
  2. Merge dữ liệu từ Dropzone vào Iceberg sử dụng AWS Glue.
  3. Truy vấn dữ liệu bằng Athena.

Yêu cầu chuẩn bị

Một số điều kiện cần chuẩn bị trước:

Thiết lập cơ sở hạ tầng với AWS CloudFormation

Để thiết lập cơ sở hạ tầng bằng AWS CloudFormation template, thực hiện các bước sau:

  1. Đăng nhập vào tài khoản AWS của bạn với tư cách administrator.
  2. mở giao diện AWS CloudFormation console.
  3. Chọn Launch Stack:
  4. Tại Stack name, nhập tên (trong post này, stack name là icebergdemo1).
  5. Chọn Next.
  6. Cung cấp thông tin cho các thông số (parameters) sau:
    1. DatalakeUserName
    2. DatalakeUserPassword
    3. DatabaseName
    4. TableName
    5. DatabaseLFTagKey
    6. DatabaseLFTagValue
    7. TableLFTagKey
    8. TableLFTagValue
  7. Chọn Next.
  8. Tiếp tục chọn Next.
  9. Tại mục Review, xem lại các thông tin bạn đã nhập.
  10. Chọn I acknowledge that AWS CloudFormation might create IAM resources with custom names và chọn Submit.

Đợi vài phút, trạng thái của stack sẽ chuyển qua CREATE_COMPLETE.

Bạn có thể chuyển đến tab Outputs của stack để xem tất cả các tài nguyên mà nó đã cung cấp. Các tài nguyên có tiền tố là tên stack mà bạn đã cung cấp (icebergdemo1).

Tạo Iceberg table bằng Lambda và cấp quyền truy cập bằng Lake Formation

Để tạo Iceberg table và gán quyền truy cập vào bảng đó, thực hiện theo các bước sau:

  1. Điều hướng tới tab Resources của stack CloudFormation Icebergdemo1 và tìm kiếm Logical ID có tên LambdaFunctionIceberg.
  2. Truy cập link được liên kết với Physical ID.

Bạn sẽ được điều hướng tới Lambda function icebergdemo1-Lambda-Create-Iceberg-and-Grant-access.

  1. Tại tab Configuration, chọn Environment variables ở phía bên phải thanh điều hướng.
  2. Tại tab Code, bạn có thể kiểm tra function code.

Function này sử dụng AWS SDK for Python (Boto3) APIs để cung cấp tài nguyên. Nó đảm nhận role admin của data lake hồ dữ liệu để thực hiện các tác vụ sau:

  • Cấp quyền truy cập DATA_LOCATION_ACCESS vào vị trí data lake đã đăng ký
  • Tạo Lake Formation Tags (LF-Tags)
  • Tạo database trong AWS Glue Data Catalog bằng cách dùng API AWS Glue create_database
  • Gán LF-Tags cho database
  • Cấp quyền DESCRIBE vào database bằng cách sử dụng LF-Tags cho data lake IAM user và AWS Glue ETL IAM role
  • Tạo Iceberg table sử dụng API AWS Glue create_table:
response_create_table = glue_client.create_table(DatabaseName= ‘icebergdb1’,OpenTableFormatInput= {  ‘IcebergInput’: {  ‘MetadataOperation’: ‘CREATE’, ‘Version’: ‘2’ }},TableInput={    ‘Name’: ‘ecomorders’,    ‘StorageDescriptor’: {        ‘Columns’: [            {‘Name’: ‘ordernum’, ‘Type’: ‘int’},            {‘Name’: ‘sku’, ‘Type’: ‘string’},            {‘Name’: ‘quantity’,’Type’: ‘int’},            {‘Name’: ‘category’,’Type’: ‘string’},            {‘Name’: ‘status’,’Type’: ‘string’},            {‘Name’: ‘shipping_id’,’Type’: ‘string’}        ],          ‘Location’: ‘s3://icebergdemo1-s3bucketiceberg-vthvwwblrwe8/iceberg/’    },    ‘TableType’: ‘EXTERNAL_TABLE’    })
  • Gán LF-Tags vào table
  • Cấp quyền DESCRIBE SELECT vào Iceberg table LF-Tags cho data lake IAM user
  • Cấp quyền ALL, DESCRIBE, SELECT, INSERT, DELETE, và ALTER và Iceberg table LF-Tags cho AWS Glue ETL IAM role
  1. Tại tab Test, chọn Test để chạy function.

Khi function chạy thành công, bạn sẽ thấy tin nhắn “Executing function: succeeded.

Lake Formation giúp bạn quản lý tập trung, bảo mật và chia sẻ dữ liệu trên toàn cầu phục vụ việc phân tích và học máy. Với Lake Formation, bạn có thể quản lý kiểm soát truy cập chi tiết cho dữ liệu trong data lake của mình trên Amazon S3 và metadata của nó trong Data Catalog.

Để thêm Amazon S3 location làm bộ lưu trữ Iceberg trong kho dữ liệu của bạn, hãy register the location với Lake Formation. Sau đó, bạn có thể sử dụng các quyền của Lake Formation để kiểm soát quyền truy cập chi tiết vào các Data Catalog objects trỏ đến vị trí này và dữ liệu cơ bản ở vị trí đó.

CloudFormation stack đã đăng ký data lake location.

Data location permissions trong Lake Formation cho phép tạo và thay đổi tài nguyên Data Catalog trỏ đến các Amazon S3 locations đã đăng ký được chỉ định. Quyền vị trí dữ liệu hoạt động cùng với data permissions Lake Formation để bảo mật thông tin trong hồ dữ liệu của bạn.

Lake Formation tag-based access control (LF-TBAC) là một chiến lược ủy quyền xác định các quyền dựa trên thuộc tính. Trong Lake Formation, những thuộc tính này được gọi là LF-Tags. Bạn có thể đính kèm LF-Tags vào tài nguyên trong Data Catalog, Lake Formation principals và các cột trong bảng. Bạn có thể chỉ định và thu hồi quyền đối với tài nguyên Lake Formation bằng cách sử dụng các LF-Tags này. Lake Formation cho phép thực hiện các thao tác trên các tài nguyên đó khi tag khớp với tag tài nguyên.

Xác minh Iceberg table từ Lake Formation console

Để xác minh Iceberg table, thực hiện theo các bước sau:

  1. Tại giao diện Lake Formation console, chọn Databases ở thanh điều hướng.
  2. Click chọn database icebergdb1 để xem thông tin chi tiết.

Bạn có thể thấy database LF-Tags.

  1. Chọn Tables tại thanh điều hướng.
  2. Chọn table ecomorders để xem thông tin chi tiết.

Tại mục Table details, bạn có thể thấy các thông tin sau:

  • Table formatApache Iceberg
  • Table managementManaged by Data Catalog
  • Location liệt kê vị trí data lake của Iceberg table

Tại mục LF-Tags, bạn có thể thấy table LF-Tags.

Tại mục Table details, mở rộng Advanced table properties bạn sẽ thất thông tin sau:

  • metadata_location trỏ đến vị trí file metadata của Iceberg table
  • table_type là ICEBERG

Tại tab Schema, bạn có thể thấy các cột được định nghĩa trong Iceberg table.

Tích hợp Iceberg với AWS Glue Data Catalog và Amazon S3

Iceberg theo dõi các tệp dữ liệu riêng lẻ trong một bảng thay vì trong các thư mục. Khi có một lệnh commit rõ ràng (explicit commit) trên bảng, Iceberg sẽ tạo các tệp dữ liệu và thêm chúng vào bảng. Iceberg duy trì trạng thái table trong file metadata. Bất kỳ thay đổi nào về trạng thái table sẽ tạo ra một file metadata mới thay thế metadata cũ. Các file Metadata theo dõi bảng schema, cấu hình partitioning và các thuộc tính khác.

Iceberg yêu cầu các hệ thống tệp (file systems) hỗ trợ hoạt động phải tương thích với các kho đối tượng (object store) như Amazon S3.

Iceberg tạo snapshot cho nội dung bảng. Mỗi snapshot là một tập hợp đầy đủ các file dữ liệu trong bảng tại một thời điểm. File dữ liệu trong snapshot được lưu trữ trong một hoặc nhiều file manifest chứa bản ghi cho mỗi file dữ liệu trong bảng, partition data và metrics của bảng.

Sơ đồ sau đây minh họa hệ thống phân cấp này.

Khi bạn tạo bảng Iceberg, trước tiên, bảng này sẽ tạo thư mục metadata và file metadata trong thư mục metadata . Thư mục data được tạo khi bạn load dữ liệu vào bảng Iceberg.

Nội dung của file Iceberg metadata

File Iceberg metadata gồm một vài thông tin sau:

  • format-version –Version của bảng Iceberg
  • Location – Amazon S3 location của bảng
  • Schemas – Tên và kiểu dữ liệu (data type) của các cột trong bảng
  • partition-specs – Các cột được đánh Partitioned
  • sort-orders – Sắp xếp thứ tự các cột
  • properties – Thuộc tính bảng
  • current-snapshot-id – Snapshot hiện tại
  • refs – Bảng tham chiếu
  • snapshots – Danh sách các snapshots, mỗi snapshot sẽ gồm các thông tin sau:
    • sequence-number – Số thứ tự (sequence number) của snapshots được đánh theo thứ tự thời gian (số lớn nhất là snapshot hiện tại, số 1 là snapshot đầu tiên)
    • snapshot-id – Snapshot ID
    • timestamp-ms – Timestamp khi mà snapshot được commit
    • summary – Tóm tắt về các thay đổi đã commit
    • manifest-list – Danh sách các manifests; tên file này bắt đầu bằng snap-< snapshot-id >
  • schema-id – Số thứ tự của schema theo thứ tự thời gian (số lớn nhất là schema hiện tại)
  • snapshot-log – Danh sách các snapshots theo thứ tự thời gian
  • metadata-log – Danh sách các file metadata theo thứ tự thời gian

File metadata lưu tất cả các lịch sử thay đổi đối với dữ liệu và shema của bảng. Việc xem lại trực tiếp nội dung trên metafile có thể là một công việc tốn thời gian. May mắn thay, bạn có thể truy vấn Iceberg metadata sử dụng Athena.

Iceberg framework trong AWS Glue

AWS Glue 4.0 hỗ trợ các bảng Iceberg được đăng ký với Lake Formation. Trong các job AWS Glue ETL, bạn cần có đoạn code sau để enable the Iceberg framework:

from awsglue.context import GlueContextfrom pyspark.context import SparkContextfrom pyspark.conf import SparkConfaws_account_id = boto3.client(‘sts’).get_caller_identity().get(‘Account’)
args = getResolvedOptions(sys.argv, [‘JOB_NAME’,’warehouse_path’]    # Set up configuration for AWS Glue to work with Apache Icebergconf = SparkConf()conf.set(“spark.sql.extensions”, “org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions”)conf.set(“spark.sql.catalog.glue_catalog”, “org.apache.iceberg.spark.SparkCatalog”)conf.set(“spark.sql.catalog.glue_catalog.warehouse”, args[‘warehouse_path’])conf.set(“spark.sql.catalog.glue_catalog.catalog-impl”, “org.apache.iceberg.aws.glue.GlueCatalog”)conf.set(“spark.sql.catalog.glue_catalog.io-impl”, “org.apache.iceberg.aws.s3.S3FileIO”)conf.set(“spark.sql.catalog.glue_catalog.glue.lakeformation-enabled”, “true”)conf.set(“spark.sql.catalog.glue_catalog.glue.id”, aws_account_id)
sc = SparkContext(conf=conf)glueContext = GlueContext(sc)spark = glueContext.spark_session

Để có quyền đọc/ghi dữ liệu, ngoài các quyền Lake Formation, AWS Glue IAM role để chạy các job Glue ETL đã được cấp quyền lakeformation: GetDataAccess. Với quyền này, Lake Formation sẽ cấp thông tin xác thực tạm thời để truy cập dữ liệu.

CloudFormation stack đã cung cấp bốn job AWS Glue ETL cho bạn. Tên của mỗi job bắt đầu bằng tên stack của bạn (icebergdemo1). Hoàn thành các bước sau để xem các job:

  1. Đăng nhập vào tài khoản AWS với quyền administrator.
  2. Tại AWS Glue console, chọn ETL jobs tại thanh điều hướng.
  3. Tìm kiến job với tên icebergdemo1.

Hợp nhất dữ liệu từ Dropzone vào bảng Iceberg

Đối với trường hợp của chúng tôi, công ty nhập dữ liệu đơn đặt hàng thương mại điện tử hàng ngày từ vị trí on-prem của họ vào vị trí Dropzone của Amazon S3. CloudFormation stack đã tải ba file với các đơn đặt hàng mẫu trong 3 ngày, như minh họa trong hình sau. Bạn xem dữ liệu ở Dropzone location s3://icebergdemo1-s3bucketdropzone-kunftrcblhsk/data.

Job Glue ETL icebergdemo1-GlueETL1-merge sẽ chạy hàng ngày để merge dữ liệu vào bảng Iceberg. Logic xử lý để thêm hoặc cập nhật dữ liệu trên Iceberg như sau:

  • Tạo Spark DataFrame từ dữ liệu đầu vào:
df = spark.read.format(dropzone_dataformat).option(“header”, True).load(dropzone_path)df = df.withColumn(“ordernum”, df[“ordernum”].cast(IntegerType())) \    .withColumn(“quantity”, df[“quantity”].cast(IntegerType()))df.createOrReplaceTempView(“input_table”)
  • Với đơn hàng mới, thêm đơn hàng đó vào bảng
  • Nếu bảng có đơn hàng trùng khớp, cập nhật trạng thái và shipping_id:
stmt_merge = f”””    MERGE INTO glue_catalog.{database_name}.{table_name} AS t    USING input_table AS s     ON t.ordernum= s.ordernum    WHEN MATCHED             THEN UPDATE SET                 t.status = s.status,                t.shipping_id = s.shipping_id    WHEN NOT MATCHED THEN INSERT *    “””spark.sql(stmt_merge)

Hoàn thành các bước sau để chạy job Glue merge dữ liệu:

  1. Tại AWS Glue console, chọn ETL jobs trên thanh điều hướng.
  2. Chọn job ETL icebergdemo1-GlueETL1-merge.
  3. Tại menu dropdown Actions, chọn Run with parameters.
  4. Tại trang Run parameters, chọn Job parameters.
  5. Với tham số –dropzone_path, cung cấp S3 location nơi chứa dữ liệu đầu vào (icebergdemo1-s3bucketdropzone-kunftrcblhsk/data/merge1).
  6. Chạy job để thêm các đơn hàng mới: 1001, 1002, 1003, and 1004.
  7. Với tham số –dropzone_path, thay đổi S3 location thành icebergdemo1-s3bucketdropzone-kunftrcblhsk/data/merge2.
  8. Chạy job lại lần nữa để thêm các đơn hàng 2001 và 2002, và cập nhật các đơn hàng 1001, 1002, và 1003.
  9. Với tham số –dropzone_path, thay đổi S3 location thành icebergdemo1-s3bucketdropzone-kunftrcblhsk/data/merge3.
  10. Chạy job lại lần nữa để thêm đơn hàng 3001 và cập nhật các đơn hàng 1001, 1003, 2001, and 2002.

Vào thư mục data của bảng để xem các file data được ghi bởi Iceberg khi bạn merge dữ liệu vào bảng bằng các job Glue ETL icebergdemo1-GlueETL1-merge.

Truy vấn Iceberg sử dụng Athena

CloudFormation stack đã tạo IAM user iceberguser1 có quyền đọc bảng Iceberg bằng việc sử dụng LF-Tags. Để truy vấn Iceberg bằng Athena thông qua user này, bạn thực hiện các bước sau:

  1. Đăng nhập với tài khoản iceberguser1 vào AWS Management Console.
  2. Tại Athena console, chọn Workgroups tại thanh điều hướng.
  3. Xác định vị trí workgroup CloudFormation đã cung cấp (icebergdemo1-workgroup)
  4. Xác thực Athena engine phiên bản 3.

Athena engine version 3 hỗ trợ Iceberg file formats, bao gồm Parquet, ORC, và Avro.

  1. Truy cập Athena query editor.
  2. Chọn workgroup icebergdemo1-workgroup tại dropdown menu.
  3. Mục Database, chọn icebergdb1. Bạn sẽ thấy bảng ecomorders.
  4. Chạy câu truy vấn sau để xem dữ liệu bảng Iceberg:
SELECT * FROM “icebergdb1″.”ecomorders” ORDER BY ordernum ;
  1. Chạy câu truy vấn sau để xem các partition hiện tại của bảng:
DESCRIBE icebergdb1.ecomorders ;

Partition-spec mô tả cách phân vùng bảng. Trong ví dụ này, không có trường nào được đánh partition vì bạn chưa xác định bất kỳ partition nào trên bảng.

Sự phát triển partition Iceberg

Bạn có thể cần thay đổi cấu trúc phân vùng (partition) của mình; ví dụ: do sự thay đổi xu hướng của các mẫu truy vấn (query pattern) phổ biến trong phân tích quy hồi (downstream analytics). Thay đổi cấu trúc phân vùng (partition) cho các bảng truyền thống là một thao tác quan trọng đòi hỏi phải sao chép toàn bộ dữ liệu.

Iceberg làm cho điều này trở nên đơn giản hơn. Khi thay đổi cấu trúc phân vùng trên Iceberg, bạn không cần phải ghi lại các file dữ liệu. Dữ liệu cũ đã được ghi với các phân vùng trước đó sẽ không thay đổi. Dữ liệu mới được ghi sẽ sử dụng các thiết lập mới. Metadata cho từng phiên bản phân vùng sẽ được lưu giữ riêng biệt.

Hãy thêm danh mục trường phân vùng vào bảng Iceberg sử dụng job Glue ETL icebergdemo1-GlueETL2-partition-evolution:

ALTER TABLE glue_catalog.icebergdb1.ecomorders    ADD PARTITION FIELD category ;

Tại AWS Glue console, chạy job ETL icebergdemo1-GlueETL2-partition-evolution. Sau khi job thực thi thành công, bạn có thể truy vấn partitions bằng Athena.

DESCRIBE icebergdb1.ecomorders ;
SELECT * FROM “icebergdb1″.”ecomorders$partitions”;

Bạn có thể xem danh mục các trường phân vùng, nhưng giá trị phân vùng là rỗng. Không có file dữ liệu mới nào trong thư mục data, vì sự thay đổi phân vùng là một thao tác metadata và không ghi lại các file data. Khi bạn thêm hoặc cập nhật dữ liệu, bạn sẽ thấy các giá trị phân vùng tương ứng được điền vào.

Sự phát triển Iceberg schema

Iceberg hỗ trợ quá trình phát triển bảng tại chỗ. Bạn có thể phát triển table schema giống như SQL. Cập nhật Iceberg schema là sự thay đổi về metadata, vì vậy sẽ không cần phải ghi lại file data khi thực hiện cập nhật schema.

Để khám phá quá trình phát triển Iceberg schema, chạy job ETL icebergdemo1-GlueETL3-schema-evolution thông qua AWS Glue console. Job sẽ chạy các câu lệnh SparkSQL sau:

ALTER TABLE glue_catalog.icebergdb1.ecomorders    ADD COLUMNS (shipping_carrier string) ;
ALTER TABLE glue_catalog.icebergdb1.ecomorders    RENAME COLUMN shipping_id TO tracking_number ;
ALTER TABLE glue_catalog.icebergdb1.ecomorders    ALTER COLUMN ordernum TYPE bigint ;

Tại Athena query editor, chạy lệnh truy vấn sau:

SELECT * FROM “icebergdb1″.”ecomorders” ORDER BY ordernum asc ;

Bạn có thể xác minh các thay đổi schema đối với bảng Iceberg:

  • Một cột mới đã được thêm vào có tên shipping_carrier
  • Cột shipping_id đã được đổi tên thành tracking_number
  • Kiểu dữ liệu của cột ordernum được đổi từ int sang bigint
DESCRIBE icebergdb1.ecomorders;

Cập nhật Positional

Dữ liệu trong trường tracking_number chứa mã vận chuyển nối tiếp với số tracking. Giả sử chúng ta muốn tách dữ liệu này để giữ mã vận chuyển trong trường shipping_carrier và số tracking trong trường tracking_number.

Tại AWS Glue console, chạy job ETL icebergdemo1-GlueETL4-update-table. Job sẽ chạy câu lệnh SparkSQL sau:

UPDATE glue_catalog.icebergdb1.ecomordersSET shipping_carrier = substring(tracking_number,1,3),    tracking_number = substring(tracking_number,4,50)WHERE tracking_number != ” ;

Truy vấn bảng Iceberg để xác minh dữ liệu đã bị thay đổi tại trường tracking_number và trường shipping_carrier.

SELECT * FROM “icebergdb1″.”ecomorders” ORDER BY ordernum ;

Now that the data has been updated on the table, you should see the partition values populated for category:

Như vậy dữ liệu đã được cập nhật trên bảng, bạn sẽ thấy các giá trị phân vùng được điền cho danh mục:

SELECT * FROM “icebergdb1”.”ecomorders$partitions”ORDER BY partition;

Dọn dẹp

Để tránh phát sinh chi phí trong tương lai, hãy dọn dẹp các tài nguyên mà bạn đã tạo:

  1. Tại Lambda console, mở trang thông tin chi tiết của function icebergdemo1-Lambda-Create-Iceberg-and-Grant-access.
  2. Tại mục Environment variables, chọn key Task_To_Perform và update giá trị thành CLEANUP.
  3. Chạy function để thực hiện drops database, table, và các LF-Tags liên kết.
  4. Tại AWS CloudFormation console, xóa stack icebergdemo1.

Tổng kết

Trong bài đăng này, bạn đã tạo bảng Iceberg bằng API AWS Glue và sử dụng Lake Formation để kiểm soát quyền truy cập vào bảng Iceberg trong transactional data lake. Với các job Glue ETL, bạn đã merge dữ liệu vào bảng Iceberg và thực hiện thay đổi schema cũng như cập nhật partition mà không cần viết lại hoặc tạo lại bảng Iceberg. Với Athena, bạn đã truy vấn dữ liệu và siêu dữ liệu (metadata) của Iceberg.

Dựa trên các khái niệm và minh họa từ bài đăng này, giờ đây bạn có thể xây dựng transactional  data lake trong doanh nghiệp bằng cách sử dụng Iceberg, AWS Glue, Lake Formation và Amazon S3.


Về tác giả

Satya Adimula is a Senior Data Architect at AWS based in Boston. With over two decades of experience in data and analytics, Satya helps organizations derive business insights from their data at scale.

Link blog tiếng Anh:
Use AWS Glue ETL to perform merge, partition evolution, and schema evolution on Apache Iceberg | AWS Big Data Blog (amazon.com)

Leave a comment