与 Google Drive 集成时出现凭据错误

Posted

技术标签:

【中文标题】与 Google Drive 集成时出现凭据错误【英文标题】:Credentials Error when integrating Google Drive with 【发布时间】:2016-05-23 01:06:51 【问题描述】:

我正在使用 Google Big Query,我想将 Google Big Query 集成到 Google Drive。在大查询中,我提供了 Google 电子表格 url 来上传我的数据。它更新得很好,但是当我在 google Add-on(OWOX BI Big Query Reports)中编写查询时:

Select * from [datasetName.TableName]

我收到一个错误:

查询失败:tableUnavailable:找不到合适的凭据来访问 Google 云端硬盘。联系表所有者寻求帮助。

【问题讨论】:

我只是给出基本的 sql 查询,例如 -- select * from [datasetname.tablename] ,在 google add-on(OWOX BI Big Query Reports) 中代码是正确的,但我得到一个错误——查询失败:tableUnavailable: 没有合适的凭据发现可以访问 Google Drive。联系表所有者寻求帮助。你能帮我解决一下,如何在console.cloud.google.com/apis/credentials中添加凭据 这使用Federated Data Sources。在关注 these steps 并创建表时,系统会要求您允许 Google Drive View and manage 范围和 BigQuery View and manage 范围。如果您允许这些,那么 BigQuery 表是否正确创建?使用 Web UI 是否有任何错误? 【参考方案1】:

我刚刚在我正在编写的一些代码中遇到了同样的问题 - 它可能不会直接帮助你,因为看起来你不对代码负责,但它可能会帮助其他人,或者你可以问谁确实编写了您用来阅读此内容的代码:-)

所以我不得不做几件事:

    除了 BigQuery 之外,还为我的 Google Cloud Platform 项目启用 Drive API。 确保您的 BigQuery 客户端是使用 BigQuery 范围和 Drive 范围创建的。 确保您希望 BigQuery 访问的 Google 表格与您的 Google Cloud Platform 将自己标识为的“...@appspot.gserviceaccount.com”帐户共享。

之后,我能够在我自己的项目中从 BigQuery 中成功查询 Google Sheets 支持的表。

【讨论】:

【参考方案2】:

前面说的是对的:

    确保您在 BigQuery 中的数据集也与您将用于进行身份验证的服务帐号共享。 确保您的联合 Google 表格也与服务帐户共享。 Drive Api 也应该处于活动状态 使用 OAuthClient 时,您需要同时为 Drive 和 BigQuery 注入作用域

如果你正在编写 Python:

    credentials = GoogleCredentials.get_application_default()(不能注入作用域#我没找到方法:至少

    从头开始构建您的请求:

    范围 = ( 'https://www.googleapis.com/auth/drive.readonly', 'https://www.googleapis.com/auth/cloud-platform')

    credentials = ServiceAccountCredentials.from_json_keyfile_name(
        '/client_secret.json', scopes)
    
    http = credentials.authorize(Http())
    
    bigquery_service = build('bigquery', 'v2', http=http)
    
    query_request = bigquery_service.jobs()
    query_data = 
        'query': (
            'SELECT * FROM [test.federated_sheet]')
    
    
    query_response = query_request.query(
        projectId='hello_world_project',
        body=query_data).execute()
    
    print('Query Results:')
    for row in query_response['rows']:
        print('\t'.join(field['v'] for field in row['f']))
    

【讨论】:

【参考方案3】:

这可能具有与以下相同的根本原因: BigQuery Credential Problems when Accessing Google Sheets Federated Table

访问云端硬盘中的联合表需要额外的 OAuth 范围,并且您的工具可能只请求 bigquery 范围。尝试联系您的供应商以更新他们的应用程序?

【讨论】:

【参考方案4】:

如果您像我一样使用 pd.read_gbq(),那么这将是获得答案的最佳位置:https://github.com/pydata/pandas-gbq/issues/161#issuecomment-433993166

import pandas_gbq
import pydata_google_auth
import pydata_google_auth.cache

# Instead of get_user_credentials(), you could do default(), but that may not
# be able to get the right scopes if running on GCE or using credentials from
# the gcloud command-line tool.
credentials = pydata_google_auth.get_user_credentials(
    scopes=[
        'https://www.googleapis.com/auth/drive',
        'https://www.googleapis.com/auth/cloud-platform',
    ],
    # Use reauth to get new credentials if you haven't used the drive scope
    # before. You only have to do this once.
    credentials_cache=pydata_google_auth.cache.REAUTH,
    # Set auth_local_webserver to True to have a slightly more convienient
    # authorization flow. Note, this doesn't work if you're running from a
    # notebook on a remote sever, such as with Google Colab.
    auth_local_webserver=True,
)

sql = """SELECT state_name
FROM `my_dataset.us_states_from_google_sheets`
WHERE post_abbr LIKE 'W%'
"""

df = pandas_gbq.read_gbq(
    sql,
    project_id='YOUR-PROJECT-ID',
    credentials=credentials,
    dialect='standard',
)

print(df)

【讨论】:

以上是关于与 Google Drive 集成时出现凭据错误的主要内容,如果未能解决你的问题,请参考以下文章

将 android studio 项目与 Firebase 集成以实现 google 登录功能时出现依赖错误

从 Google Apps 脚本访问 GoogleSheet 链接的 BigQuery 表时出现“获取驱动器凭据时权限被拒绝”错误

访问 Google Sheets 联合表时出现 BigQuery 凭据问题

使用 Ivy 在 Nexus 中发布时出现凭据错误

GKE 上的 Google Cloud PubSub:尝试检索凭据时出现 FileNotFoundException

将“com.google.gms.google-services”插件与 android 应用程序集成时出现问题