gpt4 book ai didi

python - 增量湖增量 list 文件生成

转载 作者:行者123 更新时间:2023-12-05 05:02:10 30 4
gpt4 key购买 nike

我正在尝试使用开源 delta lake api 在 S3 上设置 delta lake。我的表按日期分区,我必须执行合并(合并也可能更新旧分区)。我正在生成 list 文件,以便我可以使用 AWS Athena 查询 delta lake,但是当我运行 list 文件生成方法时,delta lakes 会为所有分区创建 list 文件。有没有办法生成增量 list 文件,仅为最后更新的分区创建/更新文件,或者您是否可以指定分区来生成 list 文件。

df = spark.read.csv(s3://temp/2020-01-01.csv)
delta_table = DeltaTable.forPath(spark, delta_table_path)

delta_table.alias("source").merge(df.alias("new_data"), condition).whenNotMatchedInsertAll().execute()

delta_table.generate("symlink_format_manifest")

最佳答案

我遇到了同样的问题,在一个有大量分区的大表上运行 list 是一种矫枉过正。我能够通过以下两种方法(解决方法)解决它

  1. 所以简单的方法是,使用 spark 使用 DDL 在 Hive 元存储中创建增量表,提供文件夹 (S3) 的位置以及 TBLPROPERTIES(delta.compatibility.symlinkFormatManifest.enabled=true)。使用 spark 将数据加载到同一位置,这将在附加/覆盖数据后立即为任何分区创建/更新 list 文件。

spark.sql("CREATE TABLE student (id INT, name STRING, age INT) USING delta PARTITIONED BY (age) LOCATION 's3://path/student' TBLPROPERTIES(delta.compatibility.symlinkFormatManifest.enabled=true)")

对于新表,这应该不是问题,但是,以上是针对已创建且需要重新加载的表的解决方法。

  1. 我遵循的另一个选项(一个棘手的选项)是找到并复制元数据文件(hdfs dfs -cat s3://path/student/_delta_log/*.json | grep 'metadata') 在 _delta_log 文件夹中。在 commitInfo-->operationParameters 下添加与上述相同的 TBLPROPERTIES 作为 "properties":"{\"delta.compatibility.symlinkFormatManifest.enabled\":\"true\"}并在 metaData 下作为 "configuration":{"delta.compatibility.symlinkFormatManifest.enabled":"true"} 创建一个新的 .json 并将文件名重命名为 (_delta_log 文件夹中 json 的最后一个序列+1).json 并将其移至 _delta_log。下一次加载后,您会看到它正在自动创建 list 文件。

关于python - 增量湖增量 list 文件生成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62339381/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com