Azure Synapse:Notebook无法访问information_schema的问题
解决Azure Synapse Notebook中Spark SQL查询元数据的报错问题
错误原因
在Synapse专用SQL池中,dataverse_blob_blob是数据库,information_schema.tables是系统视图,所以原查询能正常运行。但Spark Notebook里的%%sql默认使用Spark SQL引擎,dataverse_blob_blob是外部数据源(比如链接Dataverse的Blob存储),并非Spark的catalog或schema,而Spark的spark_catalog只支持单部分命名空间,因此直接用dataverse_blob_blob.information_schema.tables会触发命名空间错误。
解决方法
方法1:切换到SQL池执行原查询
在%%sql中指定你的专用SQL池名称,让查询在SQL池环境中运行,和原逻辑完全一致:
%%sql -d 你的专用SQL池名称 SELECT Table_name FROM dataverse_blob_blob.information_schema.tables WHERE Table_name NOT LIKE '%_partitioned' ORDER BY 1
方法2:在Spark环境中获取并过滤表名
如果需要用Spark处理,直接通过Spark的元数据命令获取表列表再过滤:
Spark SQL方式:
%%sql SELECT tableName FROM (SHOW TABLES IN dataverse_blob_blob) WHERE tableName NOT LIKE '%_partitioned'
PySpark代码方式:
# 获取外部数据源的所有表 tables = spark.catalog.listTables("dataverse_blob_blob") # 过滤掉带_partitioned后缀的表 filtered_tables = [tbl.name for tbl in tables if not tbl.name.endswith("_partitioned")] # 输出结果 for tbl in filtered_tables: print(tbl)
补充说明
为什么USE CATALOG/USE SCHEMA会报错?因为dataverse_blob_blob不是Spark的catalog(Spark默认catalog是spark_catalog,或者你创建的Lakehouse catalog),它是外部数据源,无法通过USE命令切换,只能用SHOW TABLES IN或spark.catalog访问。
内容的提问来源于stack exchange,提问作者xyzzy_plover5
相关产品推荐
相关产品推荐

