python - 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()
解决方案
您使用了错误的客户端对象。您尝试使用 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')
推荐阅读
- javascript - echarts饼图不能在laravel刀片上渲染?
- java - Android 应用程序在应用程序的启动时设置为 SilentMode
- sql - 如果数据从不一起访问,那么将两个一对一的表组合在一起是否有意义?
- php - 如何在php中按分钟获取单独的数字
- javascript - 使用 node / express.js 的模块中的全局变量
- python-3.x - 使用'key'在python 3中按其频率对列表进行排序
- javascript - 将图像和 json 对象写入剪贴板
- sql - 从数组中查找包含属性组合的所有记录
- r - r 是否可以进行任何更改来加速我的并行化代码,这些代码组合了栅格、执行一些栅格代数并写出结果
- r - 创建列表的所有组合的数据框