查询作业不适用于外部表(链接的谷歌驱动器文件)在 python 中不起作用
Posted
技术标签:
【中文标题】查询作业不适用于外部表(链接的谷歌驱动器文件)在 python 中不起作用【英文标题】:Query job doesn't work from external table (linked google drive file) doesn't work in python 【发布时间】:2017-09-27 09:10:09 【问题描述】:我正在通过做一个小项目来学习带有 bigquery 的 python,但我不知道为什么我的查询在 python 中不起作用,而在 bigquery web gui 中正常工作。如果我从标准数据集表运行任何其他查询,它就可以工作。我已将 google drive scoopes 添加到默认凭据,因为我之前遇到过身份验证错误。只是来自谷歌驱动器的外部表不起作用,我收到错误
google.cloud.exceptions.InternalServerError: 500 执行期间遇到错误。重试可能会解决问题。
我的标准谷歌功能:
def query_shakespeare(query):
client = bigquery.Client()
job_name = str(uuid.uuid4())
query_job = client.run_async_query(job_name, query)
query_job.begin()
query_job.result()
destination_table = query_job.destination
destination_table.reload()
for row in destination_table.fetch_data():
print(row)
我的查询如下所示:
SELECT * FROM [gdocs_names.name_0001]
通过网络运行它 -> 撰写查询最后 3 秒并且有效。 它也可以使用命令行:
bg query "SELECT * FROM [gdocs_names.name_0001]"
【问题讨论】:
我想知道您如何在脚本中指定查询的来源是 google drive doc? @WillianFuks 我没有。我刚刚从 Google 表格(仅限第一个选项卡)创建了一个永久外部表,因此我可以对表运行查询,就好像它是原生 BigQuery 表一样。命令行 bq 查询有效 Web gui 有效 Python 脚本无效 有趣的是,我在 webUI 中创建了一个联合表,当尝试在 CLI 中查询它时,我只收到消息Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found.
。在 google shell 中进行测试时,我得到了和你一样的错误。您是如何使用 CLI 进行查询的?假设您必须在 OAuth 中添加 GDrive 范围,但 --enable-gdrive-access
和 --enable_gdrive=True
都不起作用。
@WillianFuks Web gui 要求您访问谷歌驱动器如果我们谈论控制台我必须运行 gcloud auth application-default login --scopes=googleapis.com/auth/drive,https://www.googleapis.com/auth/…,... (和一些标准 api像邮件信息 + 云)
【参考方案1】:
我花了很多时间在这上面,有一个标志 --enable_gdrive 你需要像这样设置为 true:
bg query --enable_gdrive=true "SELECT * FROM [gdocs_names.name_0001]"
【讨论】:
以上是关于查询作业不适用于外部表(链接的谷歌驱动器文件)在 python 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章