一 需求背景
大数据环境下,metastore一般都交个hive处理,随着数据库 表 越来越多,进行源数据管理的就会成为痛点,如何能够查询出所有的数据库下的所有表
二 官方文档
Spark 官方文档Tables
-- List all tables from default database matching the pattern `sam*|suj`
SHOW TABLES FROM default LIKE 'sam*|suj';
+-----------+------------+--------------+--+
| database | tableName | isTemporary |
+-----------+------------+--------------+--+
| default | sam | false |
| default | sam1 | false |
| default | suj | false |
+-----------+------------+--------------+--+
官方给的sample中,只能一个库一个库查询,如果有成百上千个库呢?
三 解法1
3.1 DB合集
databases = [
db.databaseName
for db in spark.sql('show databases').collect()
]
3.2 tables合集
tables = [
for db_rows in [
spark.sql(f'show tables in {db}').collect() for db in databases
]
for row in db_rows
]
3.3 result format
targetTables = [
f"{row['database']}.{row['tableName']}"
for db_rows in [
spark.sql(f'show tables in {db}').collect() for db in targetDBList
]
for row in db_rows
]
从 Python 3.6 开始,Python f 字符串可用。 该字符串具有f前缀,并使用{}评估变量
python fyingyong文章来源:https://www.toymoban.com/news/detail-623269.html
四 解法2
%scala
import org.apache.spark.sql.types._
// Create schema for final result
val schema = List(
StructField("database", StringType, true),
StructField("tableName", StringType, true),
StructField("isTemporary", BooleanType, true)
)
// Create an empty Dataframe in Scala using VAR so its mutable
var resultDF = spark.createDataFrame(spark.sparkContext.emptyRDD[Row], StructType(schema))
// Get list of all Databases and store it in a Data frame
val df = spark.sql("show databases")
// Loop through all the databases and get list of all tables using // show tables from database
// using unionAll append the dataframe
df.collect.foreach {db =>
val dbname = db.toString().replaceAll("[\\[\\]]","")
val tbldf=spark.sql(s"show tables from ${dbname}")
resultDF = resultDF.unionAll(tbldf)
}
// display is available in databricks. Traditional spark use show
display(resultDF)
// display.show()
解法2出处文章来源地址https://www.toymoban.com/news/detail-623269.html
到了这里,关于spark sql 查看全部数据库的表的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!