首页 > 解决方案 > bigquery,extract_table AttributeError:“客户端”对象没有属性“数据集”

问题描述

我的问题是关于提取表的代码从 Bigquery 中提取表并将其保存为 json 文件。我主要通过遵循 gcloud 文档中的教程来编写代码。

我无法隐式设置我的凭据,所以我以明确的方式将其设置为我的 json 文件。但它似乎并没有完全按照我所走的路径获得“客户”对象。

如果有人能澄清我这整个隐式和显式凭证是如何工作的,那也会对我有很大帮助!

我正在使用 python 2.7 和 pycharm。代码如下:

from gcloud import bigquery
from google.cloud import storage
def bigquery_get_rows ():

    json_key = "path/to/my/json_file.json"
    storage_client = storage.Client.from_service_account_json(json_key)
    print("\nPeguei o Cliente\n")

    # Make an authenticated API request
    buckets = list(storage_client.list_buckets())
    print(buckets)
    print(storage_client)

    #Setando ambiente
    bucket_name = 'my_bucket/name'
    print(bucket_name)
    destination_uri = 'gs://{}/{}'.format(bucket_name, 'my_table_json_name.json')
    print(destination_uri)
    #dataset_ref = client.dataset('samples', project='my_project_name')
    dataset_ref = storage_client.dataset('my_dataset_name', project='my_project_id')
    print(dataset_ref)
    table_ref = dataset_ref.table('my_table_to_be_extracted_name')
    print(table_ref)

    job_config = bigquery.job.ExtractJobConfig()
    job_config.destination_format = (
        bigquery.DestinationFormat.NEWLINE_DELIMITED_JSON)

    extract_job = client.extract_table(
        table_ref, destination_uri, job_config=job_config)  # API request
    extract_job.result()  # Waits for job to complete.

bigquery_get_rows()

标签: pythongoogle-bigquerygcloud

解决方案


您使用了错误的客户端对象。您尝试使用 gcs 客户端来处理 bigquery。

代替

dataset_ref = storage_client.dataset('my_dataset_name', project='my_project_id')

它应该是:

bq_client = bigquery.Client.from_service_account_json(
    'path/to/service_account.json')
dataset_ref = bq_client.dataset('my_dataset_name', project='my_project_id')

推荐阅读