如何在Databricks中显示所有数据库中的所有表

Joh*_*ohn 4 apache-spark databricks

以下可用于分别显示当前模式或指定模式中的表:

show tables;

show tables in my_schema;
Run Code Online (Sandbox Code Playgroud)

此处记录: https://docs.databricks.com/spark/latest/spark-sql/language-manual/show-tables.html

有没有办法显示所有数据库中的所有表?

Databricks/Spark 中是否有元数据表(类似于 Oracle 中的 all_ 或 dba_ 表或 MySql 中的 information_schema)?有没有办法对 Databricks 中的数据库对象进行更具体的查询?像这样的东西:

select * from i_dont_know_what where lower(table_name) like '%gold%' and schema = 'myschema';
Run Code Online (Sandbox Code Playgroud)

Mar*_*ski 8

我尝试了不同的方法来获取所有模式中的所有表,但以下是Python中最快、最有效的方法

databases = [
    db.databaseName 
    for db in spark.sql('show databases').collect()
]
tables = [
    f"{row['database']}.{row['tableName']}" #<schema>.<table> format
    for db_rows in [
        spark.sql(f'show tables in {db}').collect() for db in databases
    ] 
    for row in db_rows
]
print(tables)
Run Code Online (Sandbox Code Playgroud)

使用大约 160 个模式(总共大约 3300 个表)对其进行了测试,在r5n.xlarge集群上花费了大约 7 秒。