2016-10-10 2 views
0

У меня есть этот скрипт в Python, который задает переменную с результатом запроса, который запускается в Google Bigquery (некоторая библиотека, которую я здесь не использую, но я тестировал преобразование json в CSV-файл):Данные ETL от Bigquery до Redshift с использованием Python

import httplib2 
import datetime 
import json 
import csv 
import sys 
from oauth2client.service_account import ServiceAccountCredentials 
from bigquery import get_client 


#Set DAY - 1 
yesterday = datetime.datetime.now() - datetime.timedelta(days=1) 
today = datetime.datetime.now() 

#Format to Date 
yesterday = '{:%Y-%m-%d}'.format(yesterday) 
today = '{:%Y-%m-%d}'.format(today) 


# BigQuery project id as listed in the Google Developers Console. 
project_id = 'project' 

# Service account email address as listed in the Google Developers Console. 
service_account = '[email protected]' 


scope = 'https://www.googleapis.com/auth/bigquery' 

credentials = ServiceAccountCredentials.from_json_keyfile_name('/path/to/file/.json', scope) 

http = httplib2.Http() 
http = credentials.authorize(http) 


client = get_client(project_id, credentials=credentials, service_account=service_account) 

#Synchronous query 
try: 
    _job_id, results = client.query("SELECT * FROM dataset.table WHERE CreatedAt >= PARSE_UTC_USEC('" + yesterday + "') and CreatedAt < PARSE_UTC_USEC('" + today + "') limit 1", timeout=1000) 
except Exception as e: 
    print e 

print results 

Возвращаемый результат в переменной результаты что-то вроде этого:

[ 
{u'Field1': u'Msn', u'Field2': u'00000000000000', u'Field3': u'jsdksf422552d32', u'Field4': u'00000000000000', u'Field5': 1476004363.421, 
u'Field5': u'message', u'Field6': u'msn', 
u'Field7': None, 
u'Field8': u'{"user":{"field":"j23h4sdfsf345","field":"Msn","field":"000000000000000000","field":true,"field":"000000000000000000000","field":"2016-10-09T09:12:43.421Z"}}', u'Field9': 1476004387.016} 
] 

Мне нужно, чтобы загрузить его на Amazon Redshift, но в этом формате я не могу запустить копировать с s3 с помощью .json, который он генерирует ...

Есть ли способ, которым я могу изменить этот json для Redshift для загрузки? Или верните .csv напрямую? Я не очень много знаю из этой библиотеки из bigquery или python вообще (один из моих первых скриптов).

Большое спасибо!

ответ

0

Чтобы удалить 'и' перед полями:

results = json.dumps(results) 

Затем, чтобы преобразовать переменную JSon в файле CSV, я создал:

#Transform json variable to csv 
results = json.dumps(results) 

results = json.loads(results) 

f = csv.writer(open("file.csv", "w"), delimiter='|') 

f.writerow(["field","field","field","field","field","field","field", "field", "field", "field"]) 

for results in results: 
    f.writerow([results["field"], 
      results["field"], 
      results["field"], 
       results["field"], 
      results["field"], 
      results["field"], 
      results["field"], 
      results["field"], 
      results["field"], 
      results["field"]]) 

После этого, я был в состоянии загрузите файл в Redshift.

Смежные вопросы