2

我们有一个像这样的表创建数据块脚本,

finalDF.write.format('delta').option("mergeSchema", "true").mode('overwrite').save(table_path)
          spark.sql("CREATE TABLE IF NOT EXISTS {}.{} USING DELTA LOCATION '{}' ".format('GOLDDB', table, table_path))

因此,在第一次加载期间最初在 table_path 中,我们只有 1 个文件。所以它会随着增量和日常文件的累积而运行。所以在 10 次增量加载之后,这需要大约 10 个小时才能完成。您能否帮助我了解如何优化负载?可以合并文件吗?

我只是出于测试目的尝试删除一些文件,但它失败并出现错误,即日志文件中存在的某些文件丢失,并且当您手动删除文件时会发生这种情况..

请就如何优化此查询提出建议

4

1 回答 1

1

而不是write+您可以使用选项 +create table一步完成所有操作:pathsaveAsTable

finalDF.write.format('delta')\
  .option("mergeSchema", "true")\
  .option("path", table_path)\
  .mode('overwrite')\
  .saveAsTable(table_name) # like 'GOLDDB.name'

要清理您需要使用VACUUM命令 ( doc ) 的旧数据,您可能需要从默认的 30 天减少保留期(请参阅有关delta.logRetentionDuration选项的文档)

于 2021-09-15T10:35:03.240 回答