本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Delta Lake 和 Lake Formation
当你使用 Spark 读取和写入数据时,亚马逊EMR版本6.15.0及更高版本支持基于 AWS Lake Formation Delta Lake的精细访问控制。SQLAmazon 通过 Delta Lake EMR 支持表、行、列和单元级别的访问控制。使用此功能,您可以对 copy-on-write 表运行快照查询,以在给定的提交或压缩时刻查询表的最新快照。
要将 Delta Lake 与 Lake Formation 配合使用,请运行以下命令。
spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension,com.amazonaws.emr.recordserver.connector.spark.sql.RecordServerSQLExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \ --conf spark.sql.catalog.spark_catalog.lf.managed=true
如果你希望 Lake Formation 使用记录服务器来管理你的 Spark 目录,请设置spark.sql.catalog.<managed_catalog_name>.lf.managed
为 true。
以下支持矩阵列出了 Delta Lake 及 Lake Formation 的部分核心功能:
写入时复制 | 读取时合并 | |
---|---|---|
快照查询-Spark SQL |
✓ |
✓ |
读取优化查询-Spark SQL |
✓ |
✓ |
递增查询 |
不支持 |
不支持 |
时间旅行查询 |
不支持 |
不支持 |
元数据表 |
✓ |
✓ |
DML |
✓ |
✓ |
DDL命令 |
||
Spark Datasource 查询 |
||
Spark Datasource 写入 |
在 AWS Glue 数据目录中创建 Delta Lake 表
EMR带有 Lake Formation 的 Amazon 不支持DDL命令和 Delta 表创建。按照以下步骤在 Glue 数据 AWS 目录中创建表。
-
使用以下示例创建 Delta 表。确保您的 S3 位置存在。
spark-sql \ --conf "spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension" \ --conf "spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog" > CREATE DATABASE if not exists
<DATABASE_NAME>
LOCATION 's3://<S3_LOCATION>
/transactionaldata/native-delta/<DATABASE_NAME>
/'; > CREATE TABLE<TABLE_NAME>
(x INT, y STRING, z STRING) USING delta; > INSERT INTO<TABLE_NAME>
VALUES (1, 'a1', 'b1'); 要查看您的表格的详细信息,请转至https://console.aws.amazon.com/glue/
。 在左侧导航栏中,展开数据目录,选择表,然后选择您创建的表。在 “架构” 下,您应该会看到使用 Spark 创建的 Delta 表将所有列存储在 Glue
array<string>
中的数据类型 AWS 中。要在 Lake Formation 中定义
col
列级和单元级筛选器,请从架构中移除该列,然后添加表架构中的列。在此示例中,添加x
y
、和z
。