使用python加载/卸载到amazon redshift
locop的Python项目详细描述
locopy:使用python加载和复制数据
一个python库,用于协助etl处理:
- 亚马逊红移(COPY,UNLOAD)
- 雪花(COPY INTO <table>,COPY INTO <location>)
另外:
- 库支持Python3.5+
- DB驱动程序(适配器)不可知。使用您喜爱的符合 DB-API 2.0
- 它提供了将数据下载和上载到s3存储桶和内部阶段(雪花)的功能。
快速安装
pip install locopy
安装说明
强烈建议使用虚拟环境
$ virtualenv locopy
$ source locopy/bin/activate
$ pip install --upgrade setuptools pip
$ pip install locopy
python数据库api规范2.0
而不是为postgres使用特定的python db驱动程序/适配器(它应该支持amazon 红移或雪花),locopy更喜欢不可知论。作为最终用户,您可以使用任何python 数据库API规范2.0包。
以下软件包已经过测试:
- psycopg2
- pg8000
- snowflake-connector-python
您可以通过导入包并传递它来使用您喜欢的任何一个 进入构造函数输入dbapi。
使用量
您需要将连接参数存储在一个yaml文件中(或直接将它们传入)。 yaml将由以下各项组成:
# required to connect to redshifthost:my.redshift.cluster.comport:5439database:dbuser:useridpassword:password## optional extras for the dbapi connectorsslmode:requireanother_option:123
如果不加载数据,则不需要设置aws令牌。 redshift连接(Redshift)可以如下使用:
importpg8000importlocopywithlocopy.Redshift(dbapi=pg8000,config_yaml="config.yml")asredshift:redshift.execute("SELECT * FROM schema.table")df=redshift.to_dataframe()print(df)
如果要通过s3将数据加载到redshift,则Redshift类继承自S3:
importpg8000importlocopywithlocopy.Redshift(dbapi=pg8000,config_yaml="config.yml")asredshift:redshift.execute("SET query_group TO quick")redshift.execute("CREATE TABLE schema.table (variable VARCHAR(20)) DISTKEY(variable)")redshift.load_and_copy(local_file="example/example_data.csv",s3_bucket="my_s3_bucket",table_name="schema.table",delim=",")redshift.execute("SELECT * FROM schema.table")res=redshift.cursor.fetchall()print(res)
如果要将数据从redshift下载到csv,或将其读入python
my_profile="some_profile_with_valid_tokens"withlocopy.Redshift(dbapi=pg8000,config_yaml="config.yml",profile=my_profile)asredshift:##Optionally provide export if you ALSO want the exported data copied to a flat fileredshift.unload_and_copy(query="SELECT * FROM schema.table",s3_bucket="my_s3_bucket",export_path="my_output_destination.csv")
代币注释
要将数据加载到s3,您需要能够生成aws令牌,或者在ec2上承担iam角色 实例。根据运行脚本的位置和 如何处理令牌。一旦你有了你的代币,它们就需要被aws访问 命令行界面。见 http://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html#config-settings-and-precedence 有关详细信息,但您可以:
- 填充环境变量AWS_ACCESS_KEY_ID,AWS_SECRET_ACCESS_KEY, 等
- 利用aws凭据文件。如果配置了多个配置文件 您可以调用locopy.Redshift(profile="my-profile"),或设置 环境变量AWS_DEFAULT_PROFILE。
- 如果您在ec2实例上,则可以采用与附加的iam角色相关联的凭据。
高级使用
参见docs了解 更详细的使用说明和示例,包括雪花。
贡献者
我们欢迎您对Capital One的开源项目(“项目”)感兴趣。 项目的任何贡献者必须接受并签署一份表明同意 许可条款。除了本cla授予capital one和 对于通过Capital One分发的软件的接收者,您保留所有权利、所有权, 以及对您的贡献的兴趣;本cla不影响您 把你自己的贡献用于任何其他目的。
这个项目遵循Open Source Code of Conduct。 通过参与,你应该遵守这个准则。