繁体   English   中英

AWS Glue 可以爬取 Delta Lake 表数据吗?

[英]Can AWS Glue crawl Delta Lake table data?

根据 Databricks 的文章,可以将 Delta Lake 与 AWS Glue 集成。 但是,我不确定是否也可以在 Databricks 平台之外进行。 有人这样做过吗? 另外,是否可以使用 Glue 爬虫添加 Delta Lake 相关元数据?

这是不可能的。 虽然您可以在 databrics 平台之外爬取 S3 增量文件,但您不会在表中找到数据。

根据文档,它在下面说:

警告

不要在位置上使用 AWS Glue Crawler 来定义 AWS Glue 中的表。 Delta Lake 维护着多个版本的表对应的文件,查询所有被 Glue 爬取的文件会产生不正确的结果。

我目前正在使用一种解决方案来使用 Apache Spark ( https://docs.delta.io/latest/presto-integration.html#language-python ) 生成 Delta 表的清单。

我使用以下方法为每个 Delta 表生成一个清单文件:

deltaTable = DeltaTable.forPath(<path-to-delta-table>)
deltaTable.generate("symlink_format_manifest")

然后使用下面的示例创建表。 下面的 DDL 还在 Glue Catalog 中创建了表; 然后,您可以使用 Glue 数据目录从 AWS Glue 访问数据。

CREATE EXTERNAL TABLE mytable ([(col_name1 col_datatype1, ...)])
[PARTITIONED BY (col_name2 col_datatype2, ...)]
ROW FORMAT SERDE 
'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '<path-to-delta-table>/_symlink_format_manifest/'  -- location of 
the generated manifest

如果您能通过说“将 delta Lake 与 AWS Glue 集成”来澄清您的意思会更好。

目前,没有直接的 Glue API 支持 Delta Lake,但是您可以使用 Delta Lake 库编写自定义代码,将 output 保存为 Delta Lake。

要使用 Crawler 将 Delta 湖泊的元数据添加到 Catalog,这是一种解决方法。 解决方法并不漂亮,有两个主要部分。

1) 获取 Delta Lake 引用文件的清单。 你可以参考 Delta Lake 源码,或者玩弄 _delta_log 中的日志,或者使用粗暴的方法比如

import org.apache.spark.sql.functions.input_file_name

spark.read.format("delta")
  .load(<path-to-delta-lake>)
  .select(input_file_name)
  .distinct

2) 使用 Scala 或 Python 胶水 API和清单在目录中创建或更新表。

终于可以使用 AWS Glue 爬虫来检测和编目增量表。

这是一篇博客文章,解释了如何做到这一点。

AWS Glue Crawler 允许我们将元数据从增量表事务日志更新到 Glue Metastore。 参考 - https://docs.aws.amazon.com/glue/latest/dg/crawler-configuration.html#crawler-delta-lake

但它有一些缺点 -

  • 它在 Glue Metastore 中创建一个符号链接表
  • 这种基于符号链接的方法在表的多个版本的情况下效果不佳,因为清单文件将指向最新版本
  • 胶水元数据中没有标识符来识别给定表是否为 Delta,以防元存储中有不同类型的表
  • 任何通过清单文件访问增量表的执行引擎都不会使用事务日志中的其他辅助数据,如列统计信息

是的,这是可能的,但只是最近。

有关此刚刚宣布的功能的详细信息,请参阅随附的 AWS 博客条目。

https://aws.amazon.com/blogs/big-data/introducing-native-delta-lake-table-support-with-aws-glue-crawlers/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM