json - 如何使用python将json文件转换为redshift中的表结构
问题描述
如何将 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()
解决方案
Redshift 可以直接将 JSON 吸收到 COPY 到你的表中。(虽然效率不高)。
在您的情况下,将 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 文件中的键。
复制示例中的更多详细信息
推荐阅读
- c# - 如何在 Startup.cs 中添加 HTTPS 重定向豁免?(ASP.NET 核心 2.1)
- swift - iBeacon swift 在检测 Beacon 时需要“requestWhenInUseAuth”吗?
- angular - 角度如何为模板驱动表单的交叉字段验证编写指令
- amp-html - 有没有办法在 AMP 上创建一个超链接,点击后会跳转到同一 AMP 页面上的某个部分?
- c++ - 如何在不重复代码的情况下转发到两个重载之一?
- python - 在 Django rest 框架中检索详细信息对象时更改模型中的字段
- javascript - jQuery Total 和 subtotal 给出 NaN
- c# - 为什么“非法”声明另一个类中的变量可以编译成功?
- excel - 使用不同工作表的 Vlookup
- npm - 浏览器同步 - 对 .scss 的更改未出现在浏览器中但出现在 .css 中