Logo Zephyrnet

Sử dụng AWS Glue ETL để thực hiện hợp nhất, phát triển phân vùng và phát triển lược đồ trên Apache Iceberg | Dịch vụ web của Amazon

Ngày:

Khi doanh nghiệp thu thập lượng dữ liệu ngày càng tăng từ nhiều nguồn khác nhau, cấu trúc và tổ chức của 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 đồ và phân vùng bảng trong hồ dữ liệu truyền thống 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 đổ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 cản trở sự nhanh nhẹn và thời gian để hiểu biết sâu sắc.

Quá trình phát triển lược đồ 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 phân tích. tảng băng Apache quản lý những thay đổi lược đồ này theo cách tương thích ngược thông qua kiến ​​trúc tiến hóa bảng siêu dữ liệu cải tiến của nó.

Tương tự, quá trình phát triển phân vùng cho phép thêm, thả hoặc chia tách các phân vùng một cách liền mạch. Ví dụ: thị trường thương mại điện tử ban đầu có thể phân chia dữ liệu đơn hàng theo ngày. Khi các đơn hàng tích lũy và việc truy vấn theo ngày trở nên không hiệu quả, chúng có thể bị chia thành các phân vùng ID khách hàng và ngày. Phân vùng bảng tổ chức các bộ dữ liệu lớn một cách hiệu quả nhất để thực hiện truy vấn. Iceberg mang lại cho doanh nghiệp sự linh hoạt trong việc điều chỉnh dần dần các phân vùng thay vì yêu cầu các thủ tục xây dựng lại tẻ nhạt. Các phân vùng mới có thể được thêm vào một cách hoàn toàn tương thích mà không mất thời gian ngừng hoạt động hoặc phải ghi 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, Dịch vụ lưu trữ đơn giản của Amazon (Amazon S3), Keo AWS, Sự hình thành hồ AWSQuản lý truy cập và nhận dạng AWS (IAM) để triển khai hồ dữ liệu giao dịch hỗ trợ quá trình phát triển liền mạch. Bằng cách cho phép điều chỉnh lược đồ và phân vùng một cách dễ dàng khi thông tin chuyên sâu về dữ liệu phát triển, bạn có thể hưởng lợi từ tính linh hoạt phù hợp với tương lai cần thiết để đạt được thành công trong kinh doanh.

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

Trong trường hợp sử dụng ví dụ 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 đặt 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 tại chỗ của họ và những thay đổi đó cần được sao chép sang hồ dữ liệu 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 cập nhật lược đồ. 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 làm việc của giải pháp bao gồm các bước chính sau:

  1. Nhập dữ liệu từ cơ sở vào vị trí Dropzone bằng cách sử dụng đường dẫn nhập dữ liệu.
  2. Hợp nhất dữ liệu từ vị trí Dropzone vào Iceberg bằng AWS Glue.
  3. Truy vấn dữ liệu bằng Athena.

Điều kiện tiên quyết

Đối với hướng dẫn này, bạn nên có các điều kiện tiên quyết sau:

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

Để tạo cơ sở hạ tầng của bạn với một Hình thành đám mây AWS mẫu, hãy hoàn thành các bước sau:

  1. Đăng nhập với tư cách quản trị viên vào tài khoản AWS của bạn.
  2. Mở bảng điều khiển AWS CloudFormation.
  3. Chọn Khởi chạy Stack:
  4. Trong Tên ngăn xếp, nhập tên (đối với bài đăng này, Icebergdemo1).
  5. Chọn Sau.
  6. Cung cấp thông tin cho các tham số sau:
    1. DatalakeUserName
    2. DatalakeUserPassword
    3. DatabaseName
    4. TableName
    5. DatabaseLFTagKey
    6. DatabaseLFTagValue
    7. TableLFTagKey
    8. TableLFTagValue
  7. Chọn Sau.
  8. Chọn Tiếp theo nữa.
  9. Trong tạp chí Đánh giá hãy xem lại các giá trị bạn đã nhập.
  10. Chọn Tôi xác nhận rằng AWS CloudFormation có thể tạo tài nguyên IAM với tên tùy chỉnh Và chọn Gửi.

Trong vài phút nữa, trạng thái ngăn xếp sẽ thay đổi thành CREATE_COMPLETE.

Bạn có thể đi tới Tab đầu ra của ngăn xếp để xem tất cả các tài nguyên mà nó đã cung cấp. Các tài nguyên được bắt đầu bằng tên ngăn xếp mà bạn đã cung cấp (đối với bài đăng này, icebergdemo1).

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

Để tạo bảng Iceberg và cấp quyền truy cập vào bảng đó, hãy hoàn thành các bước sau:

  1. Điều hướng đến Thông tin tab của ngăn xếp CloudFormation Icebergdemo1 và tìm kiếm ID logic có tên LambdaFunctionIceberg.
  2. Chọn siêu liên kết của ID vật lý được liên kết.

Bạn được chuyển hướng đến hàm Lambda icebergdemo1-Lambda-Create-Iceberg-and-Grant-access.

  1. trên Cấu hình tab, chọn Biến môi trường ở khung bên trái.
  1. trên tab, bạn có thể kiểm tra mã chức năng.

Hàm này sử dụng AWS SDK cho Python (Boto3) API để cung cấp tài nguyên. Nó đảm nhận vai trò quản trị viên hồ dữ liệu được cung cấp để thực hiện các tác vụ sau:

  • Cấp DATA_LOCATION_ACCESS quyền truy cập vào vai trò quản trị viên hồ dữ liệu trên vị trí hồ dữ liệu đã đăng ký
  • Tạo Thẻ hình thành hồ (Thẻ LF)
  • Tạo cơ sở dữ liệu trong Danh mục dữ liệu AWS Glue bằng AWS Glue create_database API
  • Gán thẻ LF cho cơ sở dữ liệu
  • Cấp quyền truy cập DESCRIBE trên cơ sở dữ liệu bằng cách sử dụng Thẻ LF cho người dùng IAM kho dữ liệu và vai trò IAM AWS Glue ETL
  • Tạo bảng Iceberg bằng AWS Glue tạo bảng API:
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 thẻ LF vào bảng
  • Cấp MÔ TẢ và CHỌN trên bảng Iceberg Thẻ LF cho người dùng IAM hồ dữ liệu
  • Cấp quyền truy cập TẤT CẢ, MÔ TẢ, CHỌN, CHÈN, XÓA và THAY ĐỔI trên bảng Iceberg Thẻ LF cho vai trò AWS Glue ETL IAM
  1. trên Thử nghiệm tab, chọn Thử nghiệm để chạy chức năng.

Khi chức năng hoàn tất, bạn sẽ thấy thông báo “Chức năng thực thi: đã thành công”.

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â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 hồ dữ liệu của mình trên Amazon S3 và siêu dữ liệu của nó trong Danh mục dữ liệu.

Để thêm vị trí Amazon S3 làm bộ lưu trữ Iceberg trong hồ dữ liệu của bạn, đăng ký địa điểm với sự hình thành hồ. 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 đối tượng Danh mục dữ liệu trỏ đến vị trí này và dữ liệu cơ bản ở vị trí đó.

Ngăn xếp CloudFormation đã đăng ký vị trí hồ dữ liệu.

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

Kiểm soát truy cập dựa trên thẻ Lake Formation (LF-TBAC) là một chiến lược ủy quyền xác định quyền dựa trên các thuộc tính. Trong Lake Formation, những thuộc tính này được gọi là Thẻ LF. Bạn có thể đính kèm Thẻ LF vào tài nguyên Danh mục dữ liệu, nguyên tắc Hình thành Hồ 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 Thẻ LF 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 thẻ của hiệu trưởng khớp với thẻ tài nguyên.

Xác minh bảng Iceberg từ bảng điều khiển Lake Formation

Để xác minh bảng Iceberg, hãy hoàn thành các bước sau:

  1. Trên bảng điều khiển Lake Formation, hãy chọn Cơ sở dữ liệu trong khung điều hướng.
  2. Mở trang chi tiết cho icebergdb1.

Bạn có thể xem cơ sở dữ liệu liên quan đến Thẻ LF.

  1. Chọn Bàn trong khung điều hướng.
  2. Mở trang chi tiết cho ecomorders.

Trong tạp chí Chi tiết bảng phần này, bạn có thể quan sát những điều sau:

  • Định dạng bảng hiển thị như tảng băng Apache
  • Quản lý bảng hiển thị như Được quản lý bởi danh mục dữ liệu
  • Địa Chỉ liệt kê vị trí hồ dữ liệu của bảng Iceberg

Trong tạp chí Thẻ LF phần này, bạn có thể xem bảng LF-Tags được liên kết.

Trong tạp chí Chi tiết bảng phần, mở rộng Thuộc tính bảng nâng cao để xem những nội dung sau:

  • metadata_location trỏ đến vị trí tệp siêu dữ liệu của bảng Iceberg
  • table_type hiển thị như ICEBERG

trên Schema tab, bạn có thể xem các cột được xác định trên bảng Iceberg.

Tích hợp Iceberg với Danh mục dữ liệu AWS Glue và Amazon S3

Iceberg theo dõi các tệp dữ liệu riêng lẻ trong một bảng thay vì các thư mục. Khi có một cam kết rõ ràng 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 bảng trong tệp siêu dữ liệu. Bất kỳ thay đổi nào về trạng thái bảng sẽ tạo ra một tệp siêu dữ liệu mới thay thế nguyên tử siêu dữ liệu cũ hơn. Các tệp siêu dữ liệu theo dõi lược đồ bảng, cấu hình phân vùng và các thuộc tính khác.

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

Iceberg tạo ảnh chụp nhanh cho nội dung bảng. Mỗi ảnh chụp nhanh là một tập hợp đầy đủ các tệp dữ liệu trong bảng tại một thời điểm. Tệp dữ liệu trong ảnh chụp nhanh được lưu trữ trong một hoặc nhiều tệp kê khai chứa một hàng cho mỗi tệp dữ liệu trong bảng, dữ liệu phân vùng và số liệu của nó.

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 siêu dữ liệu và tệp siêu dữ liệu trong thư mục siêu dữ liệu. Thư mục dữ liệu được tạo khi bạn tải dữ liệu vào bảng Iceberg.

Nội dung của tệp siêu dữ liệu Iceberg

Tệp siêu dữ liệu Iceberg chứa nhiều thông tin, bao gồm những thông tin sau:

  • phiên bản định dạng –Phiên bản của bảng Iceberg
  • Địa Chỉ – Vị trí bảng Amazon S3
  • Lược đồ – Tên và kiểu dữ liệu của tất cả các cột trong bảng
  • thông số phân vùng – Các cột được phân vùng
  • thứ tự sắp xếp – Sắp xếp thứ tự các cột
  • tài sản – Thuộc tính bảng
  • id ảnh chụp hiện tại - Ảnh chụp nhanh hiện tại
  • giới thiệu – Bảng tham khảo
  • snapshots – Danh sách các ảnh chụp nhanh, mỗi ảnh chứa thông tin sau:
    • số thứ tự – Số thứ tự các ảnh chụp nhanh theo thứ tự thời gian (số cao nhất thể hiện ảnh chụp nhanh hiện tại, 1 cho ảnh chụp nhanh đầu tiên)
    • ảnh chụp nhanh-id – ID ảnh chụp nhanh
    • dấu thời gian-ms – Dấu thời gian khi ảnh chụp nhanh được thực hiện
    • tóm tắt – Tóm tắt các thay đổi đã cam kết
    • danh sách kê khai – Danh sách các bảng kê khai; tên tệp này bắt đầu bằng snap-< snapshot-id >
  • id lược đồ – Số thứ tự của lược đồ theo thứ tự thời gian (số cao nhất thể hiện lược đồ hiện tại)
  • nhật ký ảnh chụp nhanh – Danh sách các ảnh chụp nhanh theo thứ tự thời gian
  • nhật ký siêu dữ liệu – Danh sách các file siêu dữ liệu theo thứ tự thời gian

Tệp siêu dữ liệu có tất cả các thay đổi lịch sử đối với dữ liệu và lược đồ của bảng. Việc xem lại trực tiếp nội dung trên tệp siêu tệp 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 Siêu dữ liệu tảng băng trôi sử dụng Athena.

Khung tảng băng trôi trong AWS Glue

AWS Glue 4.0 hỗ trợ các bảng Iceberg được đăng ký với Lake Formation. Trong các công việc AWS Glue ETL, bạn cần có đoạn mã sau để kích hoạt khung Iceberg:

from awsglue.context import GlueContext
from pyspark.context import SparkContext
from pyspark.conf import SparkConf
aws_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 Iceberg
conf = 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 truy cập đọc/ghi vào dữ liệu cơ bản, ngoài quyền Lake Formation, vai trò AWS Glue IAM để chạy các tác vụ AWS Glue ETL đã được cấp hồ hình: GetDataAccess sự cho phép của IAM. Với quyền này, Lake Formation cấp yêu cầu cấp thông tin xác thực tạm thời để truy cập dữ liệu.

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

  1. Đăng nhập với tư cách quản trị viên vào tài khoản AWS của bạn.
  2. Trên bảng điều khiển AWS Glue, hãy chọn công việc ETL trong khung điều hướng.
  3. Tìm kiếm việc làm với icebergdemo1 trong tên

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

Đối với trường hợp sử dụng 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í tại chỗ của họ vào vị trí Dropzone của Amazon S3. Ngăn xếp CloudFormation đã tải ba tệp 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 ở vị trí Dropzone s3://icebergdemo1-s3bucketdropzone-kunftrcblhsk/data.

Công việc AWS Glue ETL icebergdemo1-GlueETL1-merge sẽ chạy hàng ngày để hợp nhất dữ liệu vào bảng Iceberg. Nó có logic sau để thêm hoặc cập nhật dữ liệu trên Iceberg:

  • 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")

  • Đối với một đơn hàng mới, hãy thêm nó vào bảng
  • Nếu bảng có thứ tự phù hợp, hãy 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 công việc hợp nhất AWS Glue:

  1. Trên bảng điều khiển AWS Glue, hãy chọn công việc ETL trong khung điều hướng.
  2. Chọn công việc ETL icebergdemo1-GlueETL1-merge.
  3. trên Hoạt động menu thả xuống, chọn Chạy với tham số.
  4. trên Chạy thông số trang, đi tới Thông số công việc.
  5. Đối với --dropzone_path tham số, cung cấp vị trí S3 của dữ liệu đầu vào (icebergdemo1-s3bucketdropzone-kunftrcblhsk/data/merge1).
  6. Chạy công việc để thêm tất cả các đơn hàng: 1001, 1002, 1003 và 1004.
  7. Đối với --dropzone_path parameter, thay đổi vị trí S3 thành icebergdemo1-s3bucketdropzone-kunftrcblhsk/data/merge2.
  8. Chạy lại công việc để thêm đơn hàng 2001 và 2002, đồng thời cập nhật đơn hàng 1001, 1002 và 1003.
  9. Đối với --dropzone_path tham số, thay đổi vị trí S3 thành icebergdemo1-s3bucketdropzone-kunftrcblhsk/data/merge3.
  10. Chạy lại công việc để thêm đơn hàng 3001 và cập nhật đơn hàng 1001, 1003, 2001 và 2002.

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

Truy vấn tảng băng trôi bằng Athena

Ngăn xếp CloudFormation đã tạo người dùng IAM Iceberguser1, người dùng này có quyền truy cập đọc trên bảng Iceberg bằng cách sử dụng Thẻ LF. Để truy vấn Iceberg bằng Athena thông qua người dùng này, hãy hoàn thành các bước sau:

  1. Vào iceberguser1 đến Bảng điều khiển quản lý AWS.
  2. Trên bảng điều khiển Athena, chọn Nhóm làm việc trong khung điều hướng.
  3. Xác định vị trí nhóm làm việc mà CloudFormation đã cung cấp (icebergdemo1-workgroup)
  4. Xác minh công cụ Athena phiên bản 3.

Hỗ trợ công cụ Athena phiên bản 3 Định dạng tệp tảng băng trôi, bao gồm Parquet, ORC và Avro.

  1. Đi tới trình soạn thảo truy vấn Athena.
  2. Chọn nhóm làm việc Icebergdemo1-workgroup trên menu thả xuống.
  3. Trong Cơ sở dữ liệu, chọn icebergdb1. Bạn sẽ thấy bảng ecomorders.
  4. Chạy truy vấn sau để xem dữ liệu trong bảng Iceberg:
    SELECT * FROM "icebergdb1"."ecomorders" ORDER BY ordernum ;

  5. Chạy truy vấn sau để xem các phân vùng hiện tại của bảng:
    DESCRIBE icebergdb1.ecomorders ;

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

Sự phát triển của phân vùng tảng băng trôi

Bạn có thể cần thay đổi cấu trúc phân vùng của mình; ví dụ: do sự thay đổi xu hướng của các mẫu truy vấn phổ biến trong phân tích tiếp theo. Thay đổi cấu trúc phân vùng 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. 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 đó vẫn không thay đổi. Dữ liệu mới được ghi bằng cách sử dụng các thông số kỹ thuật mới trong bố cục mới. Siêu dữ liệu cho từng phiên bản phân vùng đượ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 bằng công việc AWS Glue ETL icebergdemo1-GlueETL2-partition-evolution:

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

Trên bảng điều khiển AWS Glue, hãy chạy tác vụ ETL icebergdemo1-GlueETL2-partition-evolution. Khi công việc hoàn tất, bạn có thể truy vấn các phân vùng bằng Athena.

DESCRIBE icebergdb1.ecomorders ;

SELECT * FROM "icebergdb1"."ecomorders$partitions";

Bạn có thể xem danh mục trường phân vùng, nhưng giá trị phân vùng là rỗng. Không có tệp dữ liệu mới nào trong thư mục dữ liệu vì tiến hóa phân vùng là một thao tác siêu dữ liệu và không ghi lại các tệp dữ liệu. 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.

Sự phát triển của lược đồ tảng băng trôi

Iceberg hỗ trợ quá trình phát triển bảng tại chỗ. Bạn có thể phát triển một lược đồ bảng giống như SQL. Cập nhật lược đồ Iceberg là các thay đổi siêu dữ liệu, do đó không cần phải viết lại tệp dữ liệu để thực hiện quá trình phát triển lược đồ.

Để khám phá sự phát triển của lược đồ Iceberg, hãy chạy công việc ETL icebergdemo1-GlueETL3-schema-evolution thông qua bảng điều khiển AWS Glue. Công việc 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 ;

Trong trình soạn thảo truy vấn Athena, hãy chạy truy vấn sau:

SELECT * FROM "icebergdb1"."ecomorders" ORDER BY ordernum asc ;

Bạn có thể xác minh các thay đổi lược đồ đố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 đã thay đổi từ int thành bigint
    DESCRIBE icebergdb1.ecomorders;

Cập nhật vị trí

Dữ liệu trong tracking_number chứa hãng vận chuyển được nối với số theo dõi. Giả sử rằng chúng ta muốn phân tách dữ liệu này để giữ cho hãng vận chuyển ở lại shipping_carrier trường và số theo dõi trong tracking_number trường.

Trên bảng điều khiển AWS Glue, hãy chạy tác vụ ETL icebergdemo1-GlueETL4-update-table. Công việc chạy câu lệnh SparkSQL sau để cập nhật bảng:

UPDATE glue_catalog.icebergdb1.ecomorders
SET 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 cập nhật trên tracking_numbershipping_carrier.

SELECT * FROM "icebergdb1"."ecomorders" ORDER BY ordernum ;

Bây giờ 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;

Làm sạch

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

  1. Trên bảng điều khiển Lambda, mở trang chi tiết cho hàm icebergdemo1-Lambda-Create-Iceberg-and-Grant-access.
  2. Trong tạp chí Biến môi trường phần, chọn phím Task_To_Perform và cập nhật giá trị thành CLEANUP.
  3. Chạy hàm để loại bỏ cơ sở dữ liệu, bảng và các Thẻ LF liên quan của chúng.
  4. Trên bảng điều khiển AWS CloudFormation, hãy xóa ngăn xếp Icebergdemo1.

Kết luận

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 hồ dữ liệu giao dịch. Với các tác vụ AWS Glue ETL, bạn đã hợp nhất dữ liệu vào bảng Iceberg và thực hiện tiến hóa lược đồ cũng như tiến hóa phân vùng 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 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 hồ dữ liệu giao dịch trong doanh nghiệp bằng cách sử dụng Iceberg, AWS Glue, Lake Formation và Amazon S3.


Lưu ý

Satya Adimula là Kiến trúc sư dữ liệu cấp cao tại AWS có trụ sở tại Boston. Với hơn hai thập kỷ kinh nghiệm về dữ liệu và phân tích, Satya giúp các tổ chức rút ra những hiểu biết sâu sắc về kinh doanh từ dữ liệu của họ trên quy mô lớn.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img