我尝试将从API返回的数据保存为JSON,保存在Redshift上一个表的SUPER类型列中。
我的要求:
data = requests.get(url=f'https://economia.awesomeapi.com.br/json/last/USD-BRL'
我有一个插入数据的函数,运行如下:
QUERY = f"""INSERT INTO {schema}.{table}(data) VALUES (%s)"""
conn = self.__get_conn()
cursor = conn.cursor()
print('INSERT DATA')
cursor.execute(query=QUERY, vars=([data, ]))
conn.commit()
当尝试使用data.json()
插入数据时,我得到以下错误:所以我使用json.dumps(data.json())
来序列化和输入它。
但是当我查看数据库时,数据包含如下转义字符:"{\"code\": \"USD\", \"codein\": \"BRL\", \"name\": \"Dólar Americano/Real Brasileiro\", \"high\": \"5.2768\", \"low\": \"5.1848\", \"varBid\": \"-0.0264\", \"pctChange\": \"-0.5\", \"bid\":
我想使用DBT来构造这个数据集,使用JSON_PARSE()
和红移上的CTE,但是这些转义字符挡住了我的路。
我错过了什么?有别的方法吗?
表DDL:
CREATE TABLE IF NOT EXISTS public.raw_currency
(
id BIGINT DEFAULT "identity"(105800, 0, '1,1'::text) ENCODE az64
,"data" SUPER ENCODE zstd
,stored_at TIMESTAMP WITHOUT TIME ZONE ENCODE az64
,error_log VARCHAR(65535) ENCODE lzo
)
1条答案
按热度按时间eh57zj3b1#
INSERT
是具有红移的反模式;基本上,插入是非常慢的。2在这个例子中,是JSON和字符串的相互转换让你感觉到了什么。在大容量插入数据时,您需要使用
COPY
。Redshift的COPY
带有一个format
参数,JSON是许多受支持的格式之一。请注意,要被复制,数据需要在S3中,并且您的红移集群需要访问您正在复制的S3中的键。