从azure databricks所有表的数据库列获取值

omqzjyyz  于 2023-01-14  发布在  其他
关注(0)|答案(1)|浏览(149)

我正在尝试从数据库中的数据库的每个表中获取最小和最大日期。
我已经从以下内容开始:

results =[]

tables_list = spark.sql('show tables in table')

for row in tables_list.collect():
  tablename = row.tableName
  min_update = spark.sql(f"SELECT MIN(date) FROM table.{tablename}").collect()[0][0]
  max_update = spark.sql(f"SELECT MAX(date) FROM table.{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()时,我只得到了最后一个表,其中我希望有60个表,每个表的每行都有最大和最小日期。

w1jd8yoj

w1jd8yoj1#

  • 由于您希望从所有表中获取最大和最小日期,因此需要在for循环中包含append操作。
  • 请看下面我修改了相同代码并得到了所需结果的地方。下面是执行show tables后的 Dataframe :
results =[]
tables_list = spark.sql('show tables in default')
tables_list.show()

  • 现在我已经在循环中对result数组使用了append操作,并得到了预期的结果。
for row in tables_list.collect():
    tablename = row.tableName
    #default is the name of my database and dt is date column
    min_update = spark.sql(f"SELECT MIN(dt) FROM default.{tablename}").collect()[0][0]
    max_update = spark.sql(f"SELECT MAX(dt) FROM default.{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()

相关问题