混乱上传从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()
所以当我在python中运行它将运行没有错误,但它不会执行任何操作。有什么建议么? –
你的意思是它不处理任何东西? 'job.state'继续'RUNNING'? –
不,它会让我回到正常的终端,就好像这个工作已经完成,并且没有显示错误,但是我的谷歌云或者查询没有变化 –