我正在使用 Python 在 Google Cloud 中使用 BigQuery、Dataproc、工作流和云存储。
我有两个 GCP 项目:
gcp-project1: 包含 BigQuery 数据集 gcp-project1.my_dataset.my_table
gcp-project2:包含我的myscript.py和我存储在云存储中的文件
在 myscript.py 中,我尝试从存储在 Cloud Storage (query1=gs://path/bq.sql) 中的文件读取 SQL 查询,并从 gcp-project1 中的 BigQuery 数据集查询数据.
根据文档here,当使用SQL查询从BigQuery读取时,我需要设置属性viewsEnabled=true和materializationDataset=dataset。
以下是我尝试过的方法:
测试1:
spark.conf.set("viewsEnabled", "true")
spark.conf.set("materializationDataset", "my_dataset")
此操作失败,因为它在 gcp-project2 中搜索数据集(其中 myscript.py 正在运行),但我的数据集位于 gcp-project1 中。错误是:未找到:数据集 gcp-project2:在位置中找不到 my_dataset...
测试2:
spark.conf.set("viewsEnabled", "true")
spark.conf.set("materializationDataset", "gcp-project1.my_dataset")
此操作失败,并显示错误:数据集 ID 必须是字母数字(加下划线),并且长度不得超过 1024 个字符。
测试3:
spark.conf.set("viewsEnabled", "true")
spark.conf.set("materializationDataset", "my_dataset")
try:
df = spark.read.format('bigquery') \
.option('project', 'gcp-project1') \ #Adding gcp-project1 contains dataset
.option('query', query1) \
.load()
df.printSchema()
df.show(10)
except Exception as e:
logger.error(f"Failed to read data from BigQuery: {e}")
sys.exit(1)
这也会失败并出现相同的错误:未找到:数据集 gcp-project2:在位置中找不到 my_dataset...
问题:
如何配置 PySpark 脚本以在 gcp-project2 中运行脚本时从 gcp-project1 中的 BigQuery 数据集读取数据?
任何有关与不同 GCP 项目的数据集交互的建议将不胜感激。
提前致谢!
// 阐述评论 如果该表存在并且在访问该表时我们会收到错误:
Not found: Dataset "project.dataset" was not found in location...
,那么它通常是由于数据集的权限问题而发生的。
只需几个步骤即可检查