查询作业不适用于外部表(链接的谷歌驱动器文件)在 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 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何导出目录中所有文件的谷歌驱动器文件标识符

将谷歌应用程序脚本移动到 v8 文件上传停止从侧边栏工作

在 ruby​​ 中为谷歌驱动器文件创建编辑链接

在存储在谷歌驱动器中的谷歌 Colaboratory 中导入 zip 文件

在xcode的谷歌驱动器文件中搜索文件/文件夹

gcloud 有解析我的谷歌驱动器路径的问题