[英]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
但它有一些缺点 -
是的,这是可能的,但只是最近。
有关此刚刚宣布的功能的详细信息,请参阅随附的 AWS 博客条目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.