如何在Databricks中使用Secrets存储的GCP凭据从BigQuery读取数据到DataFrame
在Databricks中通过Secrets读取BigQuery数据到DataFrame
前提准备
- 已在Databricks中创建Secret Scope,并将GCP服务账号的完整JSON凭据字符串存入该Scope下的某个Secret(例如密钥名为
gcp_service_account_json) - 集群已安装BigQuery Spark连接器(可通过Maven坐标
com.google.cloud.spark:spark-bigquery-with-dependencies_2.12:0.31.1安装,版本需匹配你的Spark版本) - GCP服务账号已拥有目标BigQuery表的读取权限(如
BigQuery Data Viewer角色)
方法1:直接在读取时传递凭据
从Secrets中获取凭据JSON,然后通过credentials选项传入读取配置:
# 从Secrets获取GCP服务账号JSON gcp_creds = dbutils.secrets.get(scope="your_secret_scope", key="gcp_service_account_json") # 读取BigQuery表到DataFrame df = spark.read.format("bigquery") \ .option("credentials", gcp_creds) \ .option("parentProject", "your_gcp_project_id") \ .option("table", "your_project.your_dataset.your_table") \ .load()
方法2:配置Spark全局凭据(推荐)
将凭据配置到Spark Conf中,后续所有BigQuery操作可直接复用,无需重复传递:
# 从Secrets获取GCP服务账号JSON gcp_creds = dbutils.secrets.get(scope="your_secret_scope", key="gcp_service_account_json") # 配置Spark全局GCP凭据 spark.conf.set("google.cloud.auth.service.account.json.keyfile", gcp_creds) # 读取BigQuery表(无需再传credentials选项) df = spark.read.format("bigquery") \ .option("parentProject", "your_gcp_project_id") \ .option("table", "your_project.your_dataset.your_table") \ .load()
注意事项
- 确保存入Secrets的服务账号JSON是完整且格式正确的字符串,不要包含多余的换行或空格
parentProject需填写你的GCP项目ID(即服务账号所属的项目)- 如果使用旧版连接器,可能需要将Spark Conf的键改为
spark.hadoop.google.cloud.auth.service.account.json.keyfile
内容的提问来源于stack exchange,提问作者crazy DE
相关产品推荐
相关产品推荐

