Redshift Not Connecting to Host via Python Script(RedShift未通过Python脚本连接到主机)
本文介绍了RedShift未通过Python脚本连接到主机的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前在S3存储桶中有一个.csv文件,我想使用Python脚本将其附加到RedShift数据库中的表中。我有一个单独的文件解析器并上传到S3,工作正常。我拥有的用于连接/复制到表中的代码如下所示。我收到以下错误消息:
OperationalError:(ological copg2.OperationalError)无法连接到服务器:连接超时(0x0000274C/10060) 服务器是否在主机"redshift_cluster_name.unique_here.region.redshift.amazonaws.com"(18.221.51.45)上运行并接受 端口5439上的TCP/IP连接?
我可以确认以下几点:
端口为5439
未加密
群集名称/数据库名称/用户名/密码均正确
可公开访问设置为"是"
我还查看了堆栈溢出和ServerFault,但这些似乎要么是针对MySQL的RedShift,要么是解决方案(如链接的ServerFaultCIDR解决方案)不起作用。
感谢您的帮助!
DATABASE = "db"
USER = "user"
PASSWORD = "password"
HOST = "redshift_cluster_name.unique_here.region.redshift.amazonaws.com"
PORT = "5439"
SCHEMA = "public"
S3_FULL_PATH = 's3://bucket/file.csv'
#ARN_CREDENTIALS = 'arn:aws:iam::aws_id:role/myRedshiftRole'
REGION = 'region'
############ CONNECTING AND CREATING SESSIONS ############
connection_string = f"redshift+psycopg2://{USER}:{PASSWORD}@{HOST}:{PORT}/{DATABASE}"
engine = sa.create_engine(connection_string)
session = sessionmaker()
session.configure(bind=engine)
s = session()
SetPath = f"SET search_path TO {SCHEMA}"
s.execute(SetPath)
###########################################################
############ RUNNING COPY ############
copy_command = f
'''
copy category from '{S3_FULL_PATH}'
credentials 'aws_iam_role={ARN_CREDENTIALS}'
delimiter ',' region '{REGION}';
'''
s.execute(copy_command)
s.commit()
######################################
#################CLOSE SESSION################
s.close()
##############################################
推荐答案
通过Python程序连接需要与从SQL客户端连接相同的连接。
我创建了一个新群集,以便可以为您记录该过程。
以下是我采取的步骤:
- 创建了CIDR为
10.0.0.0/16
的私有网络。我并不需要再创建一个私有网络,但是我希望避免之前的配置出现问题。 - 在私有网络中创建了CIDR为
10.0.0.0/24
的子网。 - 创建网关并附加到私有网络。
- 已编辑默认路由表以将
0.0.0.0/0
流量发送到Internet网关。(我只创建公有子网,私有子网不需要路由表。) - 使用我创建的单个子网创建了红移群集子网组。
- 将单节点红移群集启动到群集子网组。
Publicly accessible = Yes
,默认安全组。 - 返回私有网络控制台编辑默认安全组。添加了从任何位置进行红移的入站规则。
- 等待群集准备就绪。
- 然后我使用DbVisualizer登录到数据库。成功!
以上步骤创建了一个公开可用的RedShift群集,我已从Internet上的计算机连接到该群集。
这篇关于RedShift未通过Python脚本连接到主机的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:RedShift未通过Python脚本连接到主机
基础教程推荐
猜你喜欢
- 症状类型错误:无法确定关系的真值 2022-01-01
- 使用Python匹配Stata加权xtil命令的确定方法? 2022-01-01
- 使用 Google App Engine (Python) 将文件上传到 Google Cloud Storage 2022-01-01
- 如何在 Python 中检测文件是否为二进制(非文本)文 2022-01-01
- 使 Python 脚本在 Windows 上运行而不指定“.py";延期 2022-01-01
- 合并具有多索引的两个数据帧 2022-01-01
- Python 的 List 是如何实现的? 2022-01-01
- 哪些 Python 包提供独立的事件系统? 2022-01-01
- 将 YAML 文件转换为 python dict 2022-01-01
- 如何在Python中绘制多元函数? 2022-01-01