Azure Databricks获取全表最小最大日期时仅返回最后一张表的问题
问题解决:获取Databricks数据库所有表的最小/最大日期
你的代码核心问题是缩进错误:results.append((tablename,min_update,max_update))这条语句没有放在for循环的代码块里,循环遍历60张表时,只有最后一次循环的变量值被添加到列表,所以最终DataFrame只显示最后一张表的数据。
修正后的基础代码
把append语句缩进,放到for循环内部:
results =[] tables_list = spark.sql('show tables in your_database_name') # 替换为你的实际数据库名 for row in tables_list.collect(): tablename = row.tableName # 查询当前表的最小、最大日期 min_update = spark.sql(f"SELECT MIN(date) FROM your_database_name.{tablename}").collect()[0][0] max_update = spark.sql(f"SELECT MAX(date) FROM your_database_name.{tablename}").collect()[0][0] # 缩进:将当前表的结果添加到列表 results.append((tablename,min_update,max_update)) df_update = spark.createDataFrame(results, schema = ['tablename', 'min_update', 'max_update']) df_update.display()
优化建议:减少Spark查询次数
原代码每个表要执行两次spark.sql查询,效率较低。可以合并成一次查询同时获取min和max:
results =[] tables_list = spark.sql('show tables in your_database_name') for row in tables_list.collect(): tablename = row.tableName # 一次查询获取两个聚合值 agg_result = spark.sql(f"SELECT MIN(date) as min_update, MAX(date) as max_update FROM your_database_name.{tablename}").collect()[0] results.append((tablename, agg_result.min_update, agg_result.max_update)) df_update = spark.createDataFrame(results, schema = ['tablename', 'min_update', 'max_update']) df_update.display()
注意:代码里的your_database_name要替换成你实际的数据库名称,避免和关键字混淆。
内容的提问来源于stack exchange,提问作者budding pro
相关产品推荐
相关产品推荐

