.. image:: https://github.com/capitalone/locopy/workflows/Python%20package/badge.svg :target: https://github.com/capitalone/locopy/actions .. image:: https://img.shields.io/badge/code%20style-black-000000.svg :target: https://github.com/ambv/black
locopy:使用Python进行数据加载和复制
一个Python库,用于协助ETL处理:
- Amazon Redshift(
COPY
、UNLOAD
) - Snowflake(
COPY INTO <table>
、COPY INTO <location>
)
此外:
- 该库支持Python 3.9至3.11版本
- 与数据库驱动程序(适配器)无关。使用符合
DB-API 2.0 <https://www.python.org/dev/peps/pep-0249/>
_的任何驱动程序 - 提供下载和上传数据到S3存储桶以及内部存储(Snowflake)的功能
快速安装
.. code-block:: bash
pip install locopy
或从conda-forge安装
.. code-block:: bash
conda config --add channels conda-forge
conda install locopy
安装说明
强烈建议使用虚拟或conda环境
.. code-block:: bash
$ virtualenv locopy
$ source locopy/bin/activate
$ pip install --upgrade setuptools pip
$ pip install locopy
Python数据库API规范2.0
locopy
倾向于保持中立,而不是使用特定的Python数据库驱动程序/适配器(支持Amazon Redshift或Snowflake)。作为最终用户,您可以使用任何符合Python数据库API规范2.0的包。
以下包已经过测试:
psycopg2
pg8000
snowflake-connector-python
您可以通过导入包并将其传递给构造函数输入dbapi
来使用您喜欢的任何一个。
使用方法
您需要将连接参数存储在YAML文件中(或直接传入)。YAML文件应包含以下项目:
.. code-block:: yaml
# 连接到Redshift所需的参数
host: my.redshift.cluster.com
port: 5439
database: db
user: userid
password: password
## dbapi连接器的可选额外参数
sslmode: require
another_option: 123
如果您不加载数据,则不需要设置AWS令牌。Redshift连接(Redshift
)可以这样使用:
.. code-block:: python
import pg8000
import locopy
with locopy.Redshift(dbapi=pg8000, config_yaml="config.yml") as redshift:
redshift.execute("SELECT * FROM schema.table")
df = redshift.to_dataframe()
print(df)
如果您想通过S3将数据加载到Redshift,Redshift
类继承自S3
:
.. code-block:: python
import pg8000
import locopy
with locopy.Redshift(dbapi=pg8000, config_yaml="config.yml") as redshift:
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中:
.. code-block:: python
my_profile = "some_profile_with_valid_tokens"
with locopy.Redshift(dbapi=pg8000, config_yaml="config.yml", profile=my_profile) as redshift:
##如果您还想将导出的数据复制到平面文件,可以选择提供export参数
redshift.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角色相关的凭证。
高级用法
有关更详细的使用说明和示例(包括Snowflake),请参阅文档 <https://capitalone.github.io/locopy/>
_。
贡献者
我们欢迎并感谢您的贡献!在我们接受任何贡献之前,我们请您务必签署贡献者许可协议(CLA) <https://cla-assistant.io/capitalone/locopy>
_。
本项目遵守开源行为准则 <https://developer.capitalone.com/resources/code-of-conduct/>
_。参与本项目即表示您同意遵守该准则。
路线图
路线图详情可在此处 <https://github.com/capitalone/locopy/blob/develop/ROADMAP.rst>
_找到。