使用python加载/卸载到amazon redshift

locop的Python项目详细描述


https://travis-ci.org/capitalone/Data-Load-and-Copy-using-Python.svg?branch=masterhttps://img.shields.io/badge/code%20style-black-000000.svg

locopy:使用python加载和复制数据

一个python库,用于协助etl处理:

  • 亚马逊红移(COPYUNLOAD
  • 雪花(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_IDAWS_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。 通过参与,你应该遵守这个准则。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何在Android上选择/强制使用移动数据(或wifi)进行网络通话?   java与多线程并行运行多个测试   java如何修复javax。加密。IllegalBlockSizeException:在安卓中输入必须小于64字节?   java未找到适合jdbc:ucanaccess://(从终端运行)的驱动程序   将所有类嵌套在单个公共类中的java优缺点   尝试将字符串格式的日期转换为java时获取意外日期。util。日期   java在Jackson的改装请求中插入注释   java错误:日期为的对象验证失败   java FirebaseError异常电子邮件/密码身份验证   java在ApacheTika中MediaType和MimeType类之间有什么区别?   java双精度损失   java Android:应用程序处于后台时,未从BroadcastReceiver调用活动   仅当填写了所有字段时,java才使用JAXB将JSON转换为对象   java抽象模式类型“User_Book”未知   java如何将spring属性值直接读入xml文件   xpath中的java搜索   当使用相同的连接创建PreparedStatement时,java Derby获取RETURN_生成的_键似乎不是线程安全的   为什么泛型超类型的Java类型推断在此中断?