gpt4 book ai didi

python - Redshift 未通过 Python 脚本连接到主机

转载 作者:行者123 更新时间:2023-12-05 08:51:51 27 4
gpt4 key购买 nike

我目前在 S3 存储桶中有一个 .csv 文件,我想使用 Python 脚本将该文件附加到 Redshift 数据库中的表。我有一个单独的文件解析器并上传到 S3,工作正常。

我用于连接到/复制到表中的代码在下面。我收到以下错误消息:

OperationalError: (psycopg2.OperationalError) could not connect to server: Connection timed out (0x0000274C/10060) Is the server running on host "redshift_cluster_name.unique_here.region.redshift.amazonaws.com" (18.221.51.45) and accepting TCP/IP connections on port 5439?

我可以确认以下内容:

  • 端口是5439

  • 未加密

  • 集群名/数据库名/用户名/密码都正确

  • 公开访问设置为"is"

我应该修复什么以确保我可以将 S3 中的文件连接到 Redshift?感谢大家提供的任何帮助。

我还查看了 Stack Overflow 和 ServerFault但这些似乎要么适用于 MySQL 到 Redshift,要么解决方案(如链接的 ServerFault CIDR 解决方案)不起作用。

感谢您的帮助!

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 客户端连接相同的连接。

我创建了一个新集群,以便为您记录该过程。

这是我采取的步骤:

  • 创建了一个 VPC,CIDR 为 10.0.0.0/16。我真的不需要创建另一个 VPC,但我想避免先前配置出现任何问题。
  • 在 VPC 中创建了一个子网,CIDR 为 10.0.0.0/24
  • 创建了一个互联网网关并将其附加到 VPC。
  • 编辑默认路由表以将0.0.0.0/0 流量发送到互联网网关。 (我只是创建一个公共(public)子网,所以不需要私有(private)子网的路由表。)
  • 使用我创建的单个子网创建了一个 Redshift 集群子网组
  • 在集群子网组中启动一个单节点 Redshift 集群可公开访问 = 是,默认安全组。
  • 返回 VPC 控制台编辑默认安全组。添加了 Redshift from Anywhere 的入站规则。
  • 等待集群准备就绪。
  • 然后我使用了DbVisualizer登录到数据库。 成功!

上述步骤创建了一个公开可用的 Redshift 集群,我通过互联网从我的计算机连接到它。

关于python - Redshift 未通过 Python 脚本连接到主机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58399974/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com