Blaze(七):URI strings

Blaze使用strings指定数据源,使用时非常简单。

1. 例子

与一组CSV文件或一个SQL数据库交互

# coding: utf-8

from blaze import *
from blaze.utils import example

t = data(example('accounts_*.csv'))
print(t.peek())

t1 = data('sqlite:///%s::iris' % example('iris.db'))
print(t1.peek())

迁移CSV文件数据到SQL数据库

from blaze.utils import example
from odo import odo

print(odo(example('iris.csv'), 'sqlite:///myfile.db::iris'))

Blaze支持的URIs的种类:

  • 磁盘上文件的路径,包含如下扩展:

    • .csv
    • .json
    • .csv.gz/json.gz
    • .hdf5(使用h5py)
    • .hdf5::/datapath
    • hdfstore://filename.hdf5(使用pandas.HDFStore格式)
    • .bcolz
    • .xls(x)
  • 如下的SQLAlchemy strings

    • sqlite:////absolute/path/to/myfile.db::tablename
    • sqlite:////absolute/path/to/myfile.db
    • postgresql://username:password@hostname:port
    • impala://hostname(使用impala)
    • 其余被SQLAlchemy支持的
  • 如下格式的MongoDB连接strings

    mongodb://username:password@hostname:port/database_name::collection_name

  • 如下格式的Blaze server strings

    blaze://hostname:port(默认端口号6363)

如果对于传统的URI需要额外的一个位置或者一个表名,可以在URI末尾使用::分割并跟在其后面。

2. 如何工作的

Blaze依赖于odo库来处理URI。URI是由resource函数管理的,而resource函数是基于正则表达式分发的。例如下面处理.json文件的一个简单的resource函数(尽管Blaze实际的解决方法比它更全面):

from blaze import resource
import json

@resource.register('.+\.json')
def resource_json(uri):
    with open(uri):
        data = json.load(uri)
    return data

3. 可以扩展到自己的类型吗?

当然可以。正如2. 如何工作的部分所展示的那样导入和扩展resource,剩下的blaze将自动接受你的更改。


转载请注明: 墨香 Blaze(七):URI strings

目录