通过 pyspark 在 databricks 上的数据库中查找具有特定列名称的表

use*_*011 4 sql database hive apache-spark pyspark

我想通过 pyspark sql 在 databricks 上的数据库中查找具有特定列的表。

我使用以下代码,但它不起作用。 https://medium.com/@rajnishkumargarg/find-all-the-tables-by-column-name-in-hive-51caebb94832

在 SQL 服务器上我的代码:

   SELECT Table_Name, Column_Name 
   FROM INFORMATION_SCHEMA.COLUMNS
   WHERE TABLE_CATALOG = 'YOUR_DATABASE'
   AND COLUMN_NAME LIKE '%YOUR_COLUMN%'
Run Code Online (Sandbox Code Playgroud)

但是,我不知道如何在 pyspark sql 上做同样的事情?

谢谢

wer*_*ner 5

SparkSession一个属性目录。该目录的方法listTables返回 SparkSession 已知的所有表的列表。通过此列表,您可以使用listColumns查询每个表的所有列

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("test").getOrCreate()

spark.sql("CREATE TABLE tab1 (name STRING, age INT) USING parquet")
spark.sql("CREATE TABLE tab2 (name STRING, age INT) USING parquet")
spark.sql("CREATE TABLE tab3 (street STRING, age INT) USING parquet")

for table in spark.catalog.listTables():
    for column in spark.catalog.listColumns(table.name):
        if column.name == 'name':
            print('Found column {} in table {}'.format(column.name, table.name))
Run Code Online (Sandbox Code Playgroud)

印刷

Found column name in table tab1
Found column name in table tab2
Run Code Online (Sandbox Code Playgroud)

这两种方法都可以,如果您想将搜索限制为单个数据库,则接受数据库名称作为可选参数listTableslistColumns