Как преобразовать файл JSON в структуру таблицы в красное смещение с помощью Python - PullRequest
0 голосов
/ 06 июля 2018

Как я могу преобразовать файл JSON в структуру таблицы в Redshift? Я попробовал приведенный ниже код Python.

import boto3
import json
import os
import sys
import psycopg2
import csv
from collections import defaultdict

def jsonfile(path):
    session = boto3.Session(
        aws_access_key_id='dfjfkgj',
        aws_secret_access_key='sdfg',
        region_name='us-west-2')
    s3 = session.resource('s3')
    bucket= s3.Bucket('ag-redshift-poc')
    with open(path, 'rb') as data:
        res=json.load(data)
        f = open('data.csv','wb')
        output = csv.writer(f) 
        output.writerow(res[0].keys())
        for row in res:
           output.writerow(row.values()) 


    bucket.put_object(Key=('C:\Python27\data.csv'),Body=res)
    print 'success'

def redshift():
    co=psycopg2.connect(dbname= 'redshiftpoc', host='shdjf', 
    port= '5439', user= 'admin', password= 'snd')
    curr = co.cursor()
    curr.execute("""copy sample from 's3://ag-redshift-poc/testfile/json.txt'
                CREDENTIALS 'aws_access_key_id=fdfd;aws_secret_access_key=sxhd'
                """)
    co.commit()
    print 'success'
    curr.close()
    co.close()

jsonfile('C:\Python27\json.txt')
redshift()

1 Ответ

0 голосов
/ 06 июля 2018

Redshift может напрямую поглощать JSON для копирования в ваш стол. (Хотя и не очень эффективно).

В вашем случае измените запрос COPY на

COPY sample FROM 's3://<bucket_name>/<path_to_json>'
CREDENTIALS 'aws_access_key_id=xxxx;aws_secret_access_key=xxxx'
JSON 'auto' ACCEPTINVCHARS;

Обратите внимание JSON 'auto' в запросе. Это сопоставляет каждый столбец в таблице с ключами в файле JSON.

Более подробно здесь, в КОПИИ примеров

...