在 AWS Glue 中使用 Delta Lake
这篇博客文章解释了如何在 AWS Glue Data Catalog 中注册 Delta 表,并使用 Amazon Athena、Amazon Redshift 和 Amazon EMR 等引擎查询数据。
您将了解为什么将 Delta 表注册到 AWS Glue 对特定工作流有益,以及使用 Delta Lake 表的优势。
让我们首先在 AWS S3 中创建一个 Delta 表,然后注册该表。
在 AWS Glue Data Catalog 中注册 Delta Lake 表
AWS Glue Data Catalog 是您可以注册表的地方,这样它们就可以在各种服务中轻松访问。
您可以在 AWS Glue Data Catalog 中注册 Delta 表,然后通过 Amazon Athena、Amazon Redshift、AWS Lambda 和 EMR 轻松查询它。
让我们看看如何使用 AWS Glue Crawler 在 AWS Glue Data Catalog 中注册一些 Delta 表。
Delta Lake AWS Glue Crawler
让我们首先使用 PySpark 在 AWS S3 中创建一个 Delta 表。
df = spark.createDataFrame(
[
("4", "Roger", "Federer", "Switzerland"),
("3","Rafael", "Nadal", "Spain"),
("2","Djokovic", "Novak", "Serbia"),
("1","Alcaraz", "Carlos", "Spain")
]
).toDF("cust_id","first_name", "last_name", "country")
(df.write
.format("delta")
.option("path", "s3://one-env/kj_delta_ext_location/ext_top_mens_tennis_players")
.saveAsTable("ext_top_mens_tennis_players"))
现在向表中追加更多数据
df1 = spark.createDataFrame(
[
("5", "Daniil", "Medvedev", "Russia"),
("6","Jannik", "Sinner", "Italy")
]
).toDF("cust_id","first_name", "last_name", "country")
(df1.write
.format("delta")
.mode("append")
.saveAsTable("ext_top_mens_tennis_players"))
让我们使用 AWS Glue Crawler 在 AWS Glue Data Catalog 中注册这个 Delta 表。
查看 AWS Glue Data Catalog 中注册的表,确保它已注册。
现在,让我们看看如何查询已注册的 Delta 表。
查询在 AWS Glue Data Catalog 中注册的 Delta Lake 表
您也可以使用 AWS Athena 轻松查询此 Delta 表。请看以下示例:
您可以根据在 AWS Glue Data Catalog 中注册的名称查询数据。您无需记住 Delta 表在 AWS S3 中的路径。按名称引用它要容易得多。
将 Delta 表注册到 AWS Glue Data Catalog 可以方便地通过多个 Amazon 服务进行查询。
让我们探讨将此表注册到 AWS Glue Data Catalog 的其他优势。
在 AWS Glue Data Catalog 中注册 Delta 表的优势
AWS Glue Data Catalog 以目录/数据库/表层次结构组织 Delta 表,因此您可以创建不同的数据库来分组相关表。您可以为表分配权限,以便某些用户可以访问某些表而不能访问其他表。
如前所述,用户可以轻松地从各种 AWS 服务读取在 AWS Glue Data Catalog 中注册的表。许多组织将有一个团队负责创建表,另一个团队负责生成报告和分析表。
读取表的团队不需要知道它们存储在哪里或权限详细信息。他们只需读取表即可完成工作。
也可以在多个目录中注册 Delta 表。
在 AWS Glue Data Catalog 和 Unity Catalog 中注册 Delta Lake 表
您可以在多个目录中注册 Delta 表,例如 AWS Glue Data Catalog 和 Unity Catalog。
您可能有一个在 Unity Catalog 中注册的 Delta 表,并且每分钟都会通过基于 Spark 的 ETL 进程进行更新。您也可以在 AWS Glue Data Catalog 中注册此表,以便使用 AWS Athena 轻松查询该表。
以下是如何在 AWS Glue Data Catalog 中注册已在 Unity Catalog 中注册的表。首先创建表。
%sql
--Registering a table to unity catalog
--catalog : kj
--schema : gluetest
--table : ext_delta_catalog_returns
CREATE TABLE kj.gluetest.ext_delta_catalog_returns
LOCATION 's3://one-env-uc-external-location/kjosyula/gluetest/ext_delta_catalog_returns'
as select * from pqt_vw;
%sql
select count(*) from kj.gluetest.ext_delta_catalog_returns
7975662
现在使用 Glue Delta Crawler 将表注册到 Glue Catalog
您现在可以从 Athena 查询表
SELECT count(*) FROM "AwsDataCatalog"."keerthi_josyula"."1711ext_delta_catalog_returns";
--7975662
您可以使用现有工作负载将数据附加到 Delta 表
%sql
insert into kj.gluetest.ext_delta_catalog_returns
select * from pqt_vw limit 1000;
只需重新运行爬虫即可更新 AWS Glue Data Catalog 中的 Delta 表
重新运行 Athena 中的表计数查询
SELECT count(*) FROM "AwsDataCatalog"."keerthi_josyula"."1711ext_delta_catalog_returns";
--7976662
请务必注意,当您使用多个引擎时,您需要管理并发控制。
Delta 表可以在多个目录中注册。
结论
在 AWS Glue Data Catalog 中注册 Delta 表并从 AWS 生态系统中的各种数据工具中查询它们非常容易。有关使用 AWS Glue Crawler 爬取 Delta Lake 表的更多详细信息,请参阅这篇博客文章。
您还可以观看这个关于在 AWS 上使用 AWS Glue、Amazon Athena 和 Amazon Redshift 处理 Delta Lake 表的精彩视频
将 Delta 表注册到多个目录(例如 AWS Glue Data Catalog 和 Unity Catalog)也很容易。当不同的执行环境查询数据,或者您需要利用在一个目录中可用而在另一个目录中不可用的功能时,在多个目录中注册表非常重要。