AWS Redshift允许列中的SUPER
数据类型保存类似json的数据。本指南将解释如何通过COPY
函数或使用INSERT
函数来完成此操作。INSERT
函数要求将JSON_PARSE
函数应用于语句中的列值。就在这里。我如何能够使用pandas.DataFrame.to_sql
函数来实现上述行为?
df.to_sql('table', connection, schema='my_schema', if_exists='append', dtype=type_dict)
上面的用于执行INSERT
语句。我试着用
type_dict = {
'my_json_column' = sqlalchemy.types.JSON,
}
然而,我看到我的红移表有""字符串中的字符。因此,在目标红移表中定义的SUPER
列具有字符串值而不是json。我如何利用pandas.DataFrame.to_sql
功能来实现JSON_PARSE
功能在红移,是不是没有办法写INSERT
查询?
对社区的真诚请求:当你回答这个问题时,请友好,如果你不清楚这个问题,请随时评论。我将重访并重申。
您需要使用SqlAlchemy类型和SqlAlchemy- redshift方言。此外,您需要启用psycopg2
扩展。
import pandas as pd
import sqlalchemy as sa
import sqlalchemy_redshift as sar
from psycopg2.extensions import register_adapter
from psycopg2.extras import Json
register_adapter(dict, Json)
register_adapter(list, Json)
rs_url = 'redshift+psycopg2://username:password@cluser_url.redshift.amazonaws.com:5439/db_name'
dict_types={
'responseID': sa.types.INTEGER(),
'surveyID': sa.types.INTEGER(),
'surveyName': sa.types.NVARCHAR(length=65535),
'timestamp': sa.types.DateTime(),
'location': sar.dialect.SUPER()
}
df = pd.read_json('my_file.json')
df.to_sql('table_name', con='connection_string',
chunksize=100, method='multi', if_exists='replace', index=False, schema='schema_name', dtype=dict_types)