如何通过Python Boto3将数据加载到Amazon Redshift?
在AmazonRedshift中,数据从AmazonS3中提取出来,并利用SQLWorkbench/J加载到AmazonRedshift集群中。我想模拟连接到集群并利用SQLWorkbench将样本数据加载到集群中的相同过程 然而,在Redshift的应用中,我找不到一种可以将数据上传到Amazon Redshift集群的方法 我已经能够通过以下代码使用Boto3连接到Redshift:如何通过Python Boto3将数据加载到Amazon Redshift?,python,amazon-web-services,amazon-s3,amazon-redshift,boto3,Python,Amazon Web Services,Amazon S3,Amazon Redshift,Boto3,在AmazonRedshift中,数据从AmazonS3中提取出来,并利用SQLWorkbench/J加载到AmazonRedshift集群中。我想模拟连接到集群并利用SQLWorkbench将样本数据加载到集群中的相同过程 然而,在Redshift的应用中,我找不到一种可以将数据上传到Amazon Redshift集群的方法 我已经能够通过以下代码使用Boto3连接到Redshift: client=boto3.client('redshift')) 但我不确定哪种方法可以让我创建表或将数据
client=boto3.client('redshift'))
但我不确定哪种方法可以让我创建表或将数据上传到Amazon Redshift,就像在中所做的那样。返回到您链接的教程中的步骤4。查看它在何处显示如何获取集群的URL?您必须使用PostgreSQL驱动程序连接到该URL。AWS SDK(如Boto3)提供对AWS API的访问。您需要通过PostgreSQL API连接到红移,就像连接到RDS上的PostgreSQL数据库一样。对,您需要
psycopg2
Python模块来执行COPY命令
我的代码如下所示:
import psycopg2
#Amazon Redshift connect string
conn_string = "dbname='***' port='5439' user='***' password='***' host='mycluster.***.redshift.amazonaws.com'"
#connect to Redshift (database should be open to the world)
con = psycopg2.connect(conn_string);
sql="""COPY %s FROM '%s' credentials
'aws_access_key_id=%s; aws_secret_access_key=%s'
delimiter '%s' FORMAT CSV %s %s; commit;""" %
(to_table, fn, AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY,delim,quote,gzip)
#Here
# fn - s3://path_to__input_file.gz
# gzip = 'gzip'
cur = con.cursor()
cur.execute(sql)
con.close()
我使用boto3/psycopg2编写,使用psycopyg2和获取集群凭据 先决条件-
- 附加到相应用户的IAM角色 具有获取群集凭据策略的IAM角色
- 在云上(EC2)附加适当的IAM角色
[Redshift]
port = 3389
username = please_enter_username
database_name = please_database-name
cluster_id = please_enter_cluster_id_name
url = please_enter_cluster_endpoint_url
region = us-west-2
import logging
import psycopg2
import boto3
import ConfigParser
def db_connection():
logger = logging.getLogger(__name__)
parser = ConfigParser.ConfigParser()
parser.read('config.ini')
RS_PORT = parser.get('Redshift','port')
RS_USER = parser.get('Redshift','username')
DATABASE = parser.get('Redshift','database_name')
CLUSTER_ID = parser.get('Redshift','cluster_id')
RS_HOST = parser.get('Redshift','url')
REGION_NAME = parser.get('Redshift','region')
client = boto3.client('redshift',region_name=REGION_NAME)
cluster_creds = client.get_cluster_credentials(DbUser=RS_USER,
DbName=DATABASE,
ClusterIdentifier=CLUSTER_ID,
AutoCreate=False)
try:
conn = psycopg2.connect(
host=RS_HOST,
port=RS_PORT,
user=cluster_creds['DbUser'],
password=cluster_creds['DbPassword'],
database=DATABASE
)
return conn
except psycopg2.Error:
logger.exception('Failed to open database connection.')
print "Failed"
from Redshift_Connection import db_connection
def executescript(redshift_cursor):
query = "SELECT * FROM <SCHEMA_NAME>.<TABLENAME>"
cur=redshift_cursor
cur.execute(query)
conn = db_connection()
conn.set_session(autocommit=False)
cursor = conn.cursor()
executescript(cursor)
conn.close()
从红移\u连接导入db\u连接
def executescript(红移光标):
query=“选择*自。”
cur=红移光标
当前执行(查询)
conn=db_连接()
conn.set_会话(自动提交=False)
游标=连接游标()
executescript(游标)
康涅狄格州关闭
谢谢我现在正试图找出如何使用SQLAlchemy来代替SQLWorkbenchJ,我在使用SQLWorkbenchJ时遇到了一些困难(我可能会编辑这个问题或创建一个新问题)。如果您有一个新问题,请创建一个新问题。请不要编辑现有问题以询问新问题。请使用Aginity Workbench for Redshift连接到群集。它有更好的用户界面和功能,AWS人员也推荐它。