gpt4 book ai didi

apache-spark - 如何使用 Spark SQL 列出数据库中的所有表?

转载 作者:行者123 更新时间:2023-12-03 09:24:28 28 4
gpt4 key购买 nike

我有一个到外部数据库的 SparkSQL 连接:

from pyspark.sql import SparkSession

spark = SparkSession \
.builder \
.appName("Python Spark SQL basic example") \
.getOrCreate()

如果我知道表的名称,就很容易查询。
users_df = spark \
.read.format("jdbc") \
.options(dbtable="users", **db_config) \
.load()

但是有没有一种列出/发现表的好方法?

我想要相当于 SHOW TABLES在 mysql 中,或 \dt在 postgres 中。

我正在使用 pyspark v2.1,以防万一。

最佳答案

这个问题的答案实际上并不是特定于 Spark 的。你只需要加载 information_schema.tables .

信息模式由一组 View 组成,这些 View 包含有关当前数据库中定义的对象的信息。信息模式在 SQL 标准中定义,因此可以预期是可移植的并保持稳定——与系统目录不同,系统目录特定于 RDBMS,并在实现问题后建模。

我将使用 MySQL 作为我的代码片段,其中包含 enwiki我要列出表的数据库:

# read the information schema table 
spark.read.format('jdbc'). \
options(
url='jdbc:mysql://localhost:3306/', # database url (local, remote)
dbtable='information_schema.tables',
user='root',
password='root',
driver='com.mysql.jdbc.Driver'). \
load(). \
filter("table_schema = 'enwiki'"). \ # filter on specific database.
show()
# +-------------+------------+----------+----------+------+-------+----------+----------+--------------+-----------+---------------+------------+----------+--------------+--------------------+-----------+----------+---------------+--------+--------------+-------------+
# |TABLE_CATALOG|TABLE_SCHEMA|TABLE_NAME|TABLE_TYPE|ENGINE|VERSION|ROW_FORMAT|TABLE_ROWS|AVG_ROW_LENGTH|DATA_LENGTH|MAX_DATA_LENGTH|INDEX_LENGTH| DATA_FREE|AUTO_INCREMENT| CREATE_TIME|UPDATE_TIME|CHECK_TIME|TABLE_COLLATION|CHECKSUM|CREATE_OPTIONS|TABLE_COMMENT|
# +-------------+------------+----------+----------+------+-------+----------+----------+--------------+-----------+---------------+------------+----------+--------------+--------------------+-----------+----------+---------------+--------+--------------+-------------+
# | def| enwiki| page|BASE TABLE|InnoDB| 10| Compact| 7155190| 115| 828375040| 0| 975601664|1965031424| 11359093|2017-01-23 08:42:...| null| null| binary| null| | |
# +-------------+------------+----------+----------+------+-------+----------+----------+--------------+-----------+---------------+------------+----------+--------------+--------------------+-----------+----------+---------------+--------+--------------+-------------+

注:此解决方案可以应用于具有尊重语言约束的 scala 和 java。

关于apache-spark - 如何使用 Spark SQL 列出数据库中的所有表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42880119/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com