Power BI查询Delta.io表返回「The table has no visible columns」问题咨询
排查解决思路
- 首先校验Spark Thrift Server的Delta核心配置,确保
spark-defaults.conf中已添加以下配置,重启Thrift Server后重试:
缺少上述配置时,Thrift Server处理spark.sql.extensions=io.delta.sql.DeltaSparkSessionExtension spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCataloggetColumns元数据请求会直接读取Hive Metastore存储的静态schema,不会解析Delta事务日志获取最新表结构,刚好匹配你日志中Power BI触发SparkGetColumnsOperation请求但拿不到列的特征。 - 验证Hive Metastore中Delta表的元数据完整性:登录Thrift Server执行
DESC FORMATTED <你的表名>;,检查返回的列信息是否完整。如果此处返回列为空,说明建表时未将Delta schema同步到Hive Metastore,可执行MSCK REPAIR TABLE <你的表名>;或重建表时指定schema并开启schema自动同步。 - 调整Power BI侧的Spark ODBC驱动配置:你使用的Simba Spark ODBC驱动默认元数据读取方式为从catalog获取,可在ODBC数据源配置中,将「Metadata retrieval method」修改为「Get Schema with SQL Query」,修改后Power BI会采用和Tableau一致的逻辑,通过
SELECT * LIMIT 0请求获取表结构,跳过有兼容问题的getColumns元数据接口。 - 临时验证方案:在Power BI连接Spark时,不使用导航器选择表,直接输入自定义SQL语句
SELECT * FROM <你的表名> LIMIT 10,如果可以正常返回数据,可确认问题出在元数据读取环节,与查询逻辑无关。 - 校验版本兼容性:确认你使用的Delta版本和Spark版本严格匹配,Delta 0.8对应Spark 3.0,Delta 1.0对应Spark 3.1,版本不匹配会导致元数据解析异常。
内容的提问来源于stack exchange,提问作者Vincent JOLIVET
相关产品推荐
相关产品推荐

