本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
具有精细访问控制功能的 Apache Delta Lake
当你使用 Spark SQL 读取和写入数据时,亚马逊 EMR 6.15.0 及更高版本支持基于 AWS Lake Formation 三角湖的精细访问控制。Amazon EMR 支持使用 Delta Lake 进行表、行、列和单元格级别的访问控制。使用此功能,您可以对 copy-on-write表运行快照查询,以在给定的提交或压缩时刻查询表的最新快照。
要将 Delta Lake 与 Lake Formation 结合使用,请运行以下命令。
要在 EMR 7.10 及更高版本上使用 Delta Lake 和 Lake Formation,请运行以下命令:
spark-sql \ --conf spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension \ --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog
要在 EMR 6.15 到 7.9 上使用 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 Form 使用记录服务器来管理 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 表
使用 Lake Formation 的 Amazon EMR 不支持 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列,然后添加表架构中的列。在此示例中,添加xy、和z列。