我想列出所有三角洲表在數據庫和檢索列如下:“totalsizeinbyte”、“sizeinbyte”(即去年亂射的大小尺寸)和“created_by”(“lastmodified_by”也可以工作)。檢查網上我遇到了下麵的文章,你幾乎可以實現這一任務的scala沒有用戶信息:https://stackoverflow.com/a/73893361/6903605。
問題是我想要的結果使用的python (“sql”也可以工作)。
嚐試# 1:“scala使用上麵的文章檢索的解決方案totalsizeinbyte”、“sizeinbyte“而不是”created_by”。這是scala,不是python。
% scala com.databricks.sql.transaction.tahoe進口。_ val databasePath =開始“dbfs: / user /蜂巢/數據庫名。db“def大小(路徑:字符串):長= dbutils.fs.ls(路徑)。地圖{fi = >如果(fi.isDir)大小(fi.path) fi。大小}。和瓦爾表= dbutils.fs.ls (databasePath)開始.par。地圖{fi = > val totalSize =大小(fi.path) val snapshotSize = DeltaLog。forTable .snapshot(火花,fi.path)。sizeInBytes (fi.name totalSize snapshotSize)} (tables.seq.sorted顯示。toDF(“名字”、“total_size_in_byte”、“snapshotSize_in_byte”)) / / df.write.toTable(“<表名稱>”)
嚐試# 2:
使用python的循環的sql查詢。在這裏,總大小和created_by不見了。
從functools從pyspark進口減少。sql進口DataFrame db_name =“數據庫名”#創建最初的數據庫中的所有表tbl_lst df =火花。sql({}“顯示表”.format (db_name)) tbl_lst.createOrReplaceTempView (tbl_lst) #創建的所有數據庫表table_array =火花。sql(“選擇collect_list(表)從tbl_lst isTemporary = =‘假’”).collect () [0] [0] # For循環來描述細節為每個表數組中的sql_lst = {db_name} [f”描述細節。{表}”表table_array] all_tbls =[] = 0成功失敗= 0的sql sql_lst:試題:all_tbls.append (spark.sql (sql)成功=成功+ 1除了:打印(“錯誤:“sql)失敗=失敗+ 1 #多個dataframe結合到一個tbl_details =減少(dataframe。unionAll all_tbls) tbl_details.createOrReplaceTempView (“db_tbls_detail”)顯示(tbl_details)