You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySpark读取BigQuery的__TABLES__系统表时报INTERNAL内部错误如何解决?

根因说明

2021年6月BigQuery侧对系统表的元数据访问接口做了兼容性调整,你使用的0.18.1版本spark-bigquery连接器针对系统表的元数据预请求格式不再适配新的接口规则,因此仅在查询__TABLES__这类系统表时报错,普通表查询不受影响。

解决方案

  • 方案1:升级spark-bigquery连接器到0.21.0及以上版本,该版本已经修复了系统表查询兼容问题。注意依赖版本要和你环境的Scala版本匹配,Spark 3.x对应Scala 2.12的依赖包为com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.21.0,Spark 2.4.x对应Scala 2.11的依赖包为com.google.cloud.spark:spark-bigquery-with-dependencies_2.11:0.21.0
  • 方案2:如果暂时无法升级连接器,可以改用SQL查询的方式绕开元数据预校验逻辑,代码示例如下:
spark.read.format('bigquery')\
            .option("credentials", my_key)\
            .option("project", 'my-parent-project') \
            .option("query", "SELECT * FROM `my-dataset.__TABLES__`") \
            .option("viewsEnabled", "true") \
            .load()

该方案在0.18.1版本连接器下可正常返回__TABLES__的查询结果。

排查建议

  • 先通过bq命令行工具执行bq query "SELECT * FROM my-dataset.__TABLES__",确认当前使用的服务账号权限正常,排除权限变更导致的问题
  • 确认服务账号被授予了数据集级的bigquery.tables.list权限,该权限是查询__TABLES__系统表的必要权限,和普通表的读权限相互独立
  • 开启Spark的DEBUG日志级别,可以拿到更详细的请求错误信息,方便定位具体异常点

内容的提问来源于stack exchange,提问作者Vzzarr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 09:54:05