混乱上传从googlecloud存储一个JSON至BigQuery

问题描述:

你好,这是一个2部分的问题混乱上传从googlecloud存储一个JSON至BigQuery

1)目前,我试图上传从谷歌云存储上的文件通过Python脚本的BigQuery时。我试图按照谷歌帮助网站给出的步骤。

https://cloud.google.com/bigquery/docs/loading-data-cloud-storage#bigquery-import-gcs-file-python

def load_data_from_gcs(dataset_name, table_name, source): 
    bigquery_client = bigquery.Client() 
    dataset = bigquery_client.dataset(dataset_name) 
    table = dataset.table(table_name) 
    job_name = str(uuid.uuid4()) 

    job = bigquery_client.load_table_from_storage(
     job_name, table, source) 

    job.begin() 

    wait_for_job(job) 

    print('Loaded {} rows into {}:{}.'.format(
     job.output_rows, dataset_name, table_name)) 

我不知道要放什么东西在“load_data_from_gcs”的第一线,因为在谷歌云有没有表,那么我想上传的JSON文件。 “表格”部分是我尝试创建的表格的名称还是它正在谈论的存储桶,因为没有指定我想从哪个存储桶取出的部分。

这是我到目前为止的代码。

import json 
import argparse 
import time 
import uuid 

from google.cloud import bigquery 
# from google.cloud import storage 

def load_data_from_gcs('dataworks-356fa', table_name, 'pullnupload.json'): 
    bigquery_client = bigquery.Client('dataworks-356fa') 
    dataset = bigquery_client.dataset('FirebaseArchive') 
    table = dataset.table(table_name) 
    job_name = str(uuid.uuid4()) 

    job = bigquery_client.load_table_from_storage(
     job_name, table, source) 

    job.begin() 

    wait_for_job(job) 

    print('Loaded {} rows into {}:{}.'.format(
     job.output_rows, dataset_name, table_name)) 

部分2) 我想这个脚本每周运行,并能要么删除旧表,并建立在非重复数据的新的一个或任何只过滤器。无论哪个更容易。

谢谢你的帮助。

不知道你有什么问题,但从GCS文件加载到BigQuery的数据正是你已经做的。

如果你有这个模式的表:

[{"name": "id", "type": "INT64"}, {"name": "name", "type": "STRING"}] 

如果你有在此GCS文件(位于例如在 “GS://bucket/json_data.json”):

{"id": 1, "name": "test1"} 
{"id": 2, "name": "test2"} 

你只现在需要设置job对象来处理JSON文件作为输入,就像这样:

def load_data_from_gcs('dataworks-356fa', table_name, 'pullnupload.json'): 
    bigquery_client = bigquery.Client('dataworks-356fa') 
    dataset = bigquery_client.dataset('FirebaseArchive') 
    table = dataset.table(table_name) 
    job_name = str(uuid.uuid4()) 

    job = bigquery_client.load_table_from_storage(
     job_name, table, "gs://bucket/json_data.json") 

    job.source_format = 'NEWLINE_DELIMITED_JSON' 
    job.begin() 

而就在我吨。

(如果你有一个CSV文件,那么你必须相应地设置你的job对象)。

至于第二个问题,这实际上是一个尝试不同方法并查看最适合您的方法。

要删除表,你只需要运行:

table.delete() 

从表中删除重复数据的一种可能性是写一个查询,删除重复和结果保存到同一表。像这样:

query_job = bigquery_client.run_async_query(query=your_query, job_name=job_name) 
query_job.destination = Table object 
query_job.write_disposition = 'WRITE_TRUNCATE' 
query_job.begin() 
+0

所以当我在python中运行它将运行没有错误,但它不会执行任何操作。有什么建议么? –

+0

你的意思是它不处理任何东西? 'job.state'继续'RUNNING'? –

+0

不,它会让我回到正常的终端,就好像这个工作已经完成,并且没有显示错误,但是我的谷歌云或者查询没有变化 –