为了账号安全,请及时绑定邮箱和手机立即绑定

使用 python 将嵌套的 BigQuery 数据导出到云存储

使用 python 将嵌套的 BigQuery 数据导出到云存储

喵喵时光机 2021-12-17 16:45:42
尝试将 bigquery 数据导出到存储,但出现错误“400 无法对嵌套架构执行操作。字段:event_params”。下面是我的代码:from google.cloud import bigqueryclient = bigquery.Client()os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = "/Users/Nitin/Desktop/big_query_test/soy-serty-897-ed73.json"bucket_name = "soy-serty-897.appspot.com"project = "soy-serty-897"dataset_id = "analytics_157738"table_id = "events_20190326"destination_uri = 'gs://{}/{}'.format(bucket_name, 'basket.csv')dataset_ref = client.dataset(dataset_id, project=project)table_ref = dataset_ref.table(table_id)extract_job = client.extract_table(    table_ref,    destination_uri,    # Location must match that of the source table.    location='US')  # API requestextract_job.result()  # Waits for job to complete.print('Exported {}:{}.{} to {}'.format(    project, dataset_id, table_id, destination_uri))
查看完整描述

2 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

在 BigQuery导出限制中,提到 CSV 不支持嵌套和重复数据。因此,尝试导出到 Avro 或 JSON:


from google.cloud import bigquery

client = bigquery.Client()

bucket_name = 'your_bucket'

project = 'bigquery-public-data'

dataset_id = 'samples'

table_id = 'shakespeare'


destination_uri = 'gs://{}/{}'.format(bucket_name, '<your_file>')

dataset_ref = client.dataset(dataset_id, project=project)

table_ref = dataset_ref.table(table_id)

configuration = bigquery.job.ExtractJobConfig()

#For AVRO

#configuration.destination_format ='AVRO'

#For JSON

#configuration.destination_format ='NEWLINE_DELIMITED_JSON'


extract_job = client.extract_table(

table_ref,

destination_uri,

job_config=configuration,

location='US')

extract_job.result()

希望能帮助到你。


查看完整回答
反对 回复 2021-12-17
?
手掌心

TA贡献1942条经验 获得超3个赞

现在无法测试,但也许这有效:


from google.cloud import bigquery as bq

ejc = bq.ExtractJobConfig()

ejc.destination_format='NEWLINE_DELIMITED_JSON'

extract_job = client.extract_table(

    table_ref,

    destination_uri,

    # Location must match that of the source table.

    location='US',

    job_config=ejc)  # API request

这个想法是使用 JSON 而不是 CSV,以便您支持嵌套数据。


查看完整回答
反对 回复 2021-12-17
  • 2 回答
  • 0 关注
  • 270 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号