AWS¶
设置¶
首先,您需要一些AWS凭证。没有这些,您只能访问公共S3存储桶。一旦您拥有了它们,S3交互就可以工作了。对于其他服务,例如Redshift,设置会更复杂一些。
一旦您拥有了AWS凭证,就需要将它们放入配置文件中。Boto有一个很好的文档页面,介绍了如何进行设置。
现在您已经有了 boto 配置,我们可以开始与 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上挂起