AWS

设置

首先,您需要一些AWS凭证。没有这些,您只能访问公共S3存储桶。一旦您拥有了它们,S3交互就可以工作了。对于其他服务,例如Redshift,设置会更复杂一些

一旦您拥有了AWS凭证,就需要将它们放入配置文件中。Boto有一个很好的文档页面,介绍了如何进行设置。

现在您已经有了 boto 配置,我们可以开始与 AWS 交互了。

接口

odo 提供对以下 AWS 服务的访问

URI

要访问S3密钥,只需提供以 s3:// 为前缀的S3密钥路径即可

>>> csvfile = resource('s3://bucket/key.csv')

S3通常使用 prefix 来限制操作到密钥的子集。我们可以通过将 prefix* 字符结合来模拟密钥的全局匹配

>>> csv_glob = resource('s3://bucket/prefix*.csv')

这将匹配所有以 prefix 开头并以 .csv 扩展名结尾的密钥。结果 csv_glob 可以像本地磁盘上的文件全局匹配一样使用。

访问 Redshift 数据库与通过 SQLAlchemy 访问它相同

>>> db = resource('redshift://user:pass@host:port/database')

要访问单个表,只需追加 :: 加上表名

>>> table = resource('redshift://user:pass@host:port/database::table')

转换

odo 可以利用 Redshift 快速的 S3 COPY 命令。它透明地工作。例如,要将名为 users.csv 的本地 CSV 文件上传到 Redshift 表

>>> table = odo('users.csv', 'redshift://user:pass@host:port/db::users')

请记住,这些只是 odo 网络中的附加节点,因此它们能够利用转换为未明确定义路径的类型。这使我们能够将 S3 CSV 转换为 pandas DataFrame 等操作

>>> import pandas as pd
>>> from odo import odo
>>> df = odo('s3://mybucket/myfile.csv', pd.DataFrame)

待办事项

  • 大文件分段上传
  • GZIP压缩文件
  • JSON到Redshift(JSONLines会很容易)
  • boto get_bucket 在Windows上挂起