在Databricks的PySpark中获取最新创建的表名用于后续查询
获取Databricks中最新output_YYYYMMDD表并自动复用
方法1:利用information_schema查询元数据(推荐)
Databricks的表元数据存储在information_schema.tables中,可直接获取创建时间,筛选目标表后取最新:
-- 替换为你的目标数据库名 USE your_target_db; WITH latest_output AS ( SELECT table_name, creation_time FROM information_schema.tables WHERE table_name LIKE 'output_%' AND table_schema = current_database() ORDER BY creation_time DESC LIMIT 1 ) SELECT table_name INTO @latest_table FROM latest_output; -- 验证变量 SELECT @latest_table;
后续查询可直接复用该变量:
SELECT * FROM @latest_table;
如果用Databricks Notebook的Python代码实现:
# 替换为你的数据库名 db_name = "your_target_db" # 查询最新表名 latest_table = spark.sql(f""" SELECT table_name FROM information_schema.tables WHERE table_name LIKE 'output_%' AND table_schema = '{db_name}' ORDER BY creation_time DESC LIMIT 1 """).collect()[0][0] # 使用表名执行后续查询 df = spark.sql(f"SELECT * FROM {db_name}.{latest_table}") df.display()
方法2:通过表名日期后缀排序(无元数据权限时用)
如果无法访问information_schema,可直接解析表名中的日期部分排序:
USE your_target_db; WITH output_tables AS ( SELECT table_name, -- 提取表名的日期部分并转成日期类型 to_date(substring(table_name, 8, 8), 'yyyyMMdd') AS table_date FROM (SHOW TABLES LIKE 'output_%') ) SELECT table_name INTO @latest_table FROM output_tables ORDER BY table_date DESC LIMIT 1; -- 后续查询示例 SELECT * FROM @latest_table;
注意事项
- 确保账号拥有
information_schema的读取权限,这是最可靠的方式(避免表名日期与实际创建时间不符) - 若表名严格遵循
output_YYYYMMDD格式,方法2也可正常工作,但优先级低于方法1
内容的提问来源于stack exchange,提问作者Lou Radwan
相关产品推荐
相关产品推荐

