如何将Jupyter Ipython Notebook连接到Amazon Redshift

8

我正在使用Mac Yosemite系统。 我已经使用conda install "包名"安装了postgresql、psycopg2和simplejson等包。 安装完成后,我导入了这些包。然后我尝试使用我的亚马逊Redshift凭据创建一个JSON文件。

{
    "user_name": "YOUR USER NAME",
    "password": "YOUR PASSWORD",
    "host_name": "YOUR HOST NAME",
    "port_num": "5439",
    "db_name": "YOUR DATABASE NAME"
}

我使用了“with”关键字。
open("Credentials.json") as fh:
    creds = simplejson.loads(fh.read())

但是这里出现了错误。这些是在一个网站上给出的指令。我尝试搜索其他网站,但没有一个网站给出了很好的解释。

请告诉我连接Jupyter到Amazon Redshift的方法。


你是否已经打开了集群上的安全组,以允许来自你的IP地址的连接? - Guy
它给你什么错误? - Thomas K
对于任何遇到证书错误的人,请使用以下连接参数:engine = sa.create_engine('redshift+redshift_connector://user:passwordv@host:port/db',connect_args={'sslmode': "allow"}) - GGGforce
3个回答

7
这里有一份来自RJMetrics的好指南:"使用Jupyter Notebook和AWS Redshift设置您的分析堆栈"。它使用了ipython-sql
这很有效,可以在网格中显示结果。
In [1]:
import sqlalchemy
import psycopg2
import simplejson
%load_ext sql
%config SqlMagic.displaylimit = 10

在 [2]:

with open("./my_db.creds") as fh:
    creds = simplejson.loads(fh.read())

connect_to_db = 'postgresql+psycopg2://' + \
                creds['user_name'] + ':' + creds['password'] + '@' + \
                creds['host_name'] + ':' + creds['port_num'] + '/' + creds['db_name'];
%sql $connect_to_db

在 [3]:

% sql SELECT * FROM my_table LIMIT 25;

6
以下是我的做法:
----INSERT IN CELL 1-----
import psycopg2
redshift_endpoint = "<add your endpoint>"
redshift_user = "<add your user>"
redshift_pass = "<add your password>"
port = <your port>
dbname = "<your db name>"

----INSERT IN CELL 2-----
from sqlalchemy import create_engine
from sqlalchemy import text
engine_string = "postgresql+psycopg2://%s:%s@%s:%d/%s" \
% (redshift_user, redshift_pass, redshift_endpoint, port, dbname)
engine = create_engine(engine_string)

----INSERT IN CELL 3 - THIS EXAMPLE WILL GET ALL TABLES FROM YOUR DATABASE-----
sql = """
select schemaname, tablename from pg_tables order by schemaname, tablename;
"""

----LOAD RESULTS AS TUPLES TO A LIST-----
tables = []
output = engine.execute(sql)
for row in output:
    tables.append(row)
tables

--IF YOU'RE USING PANDAS---
raw_data = pd.read_sql_query(text(sql), engine)

1
另一个答案 https://dev59.com/4Znga4cB1Zd3GeqPeNNq#48792314 将凭据隐藏在一个单独的文件中,这比以明文形式存储它们要好得多。 - Davos

1

最简单的方法是使用这个扩展 - https://github.com/sat28/jupyter-redshift

示例笔记本演示了如何将redshift实用程序加载为IPython Magic。

编辑1

还添加了对写回redshift数据库的支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接