跳转到主要内容

基于JSON表模式描述符生成ES索引、加载数据和提取数据。

项目描述

tableschema-elasticsearch-py

Travis Coveralls PyPi Github Gitter

基于Table Schema描述符生成和加载数据库索引。

功能

  • 实现 tableschema.Storage 接口

内容

入门指南

安装

该软件包使用语义版本控制。这意味着主要版本可能包含破坏性更改。强烈建议在您的 setup/requirements 文件中指定 package 版本范围,例如 package>=1.0,<2.0

pip install tableschema-elasticsearch

文档

使用概述

import elasticsearch
import jsontableschema_es

INDEX_NAME = 'testing_index'

# Connect to Elasticsearch instance running on localhost
es=elasticsearch.Elasticsearch()
storage=jsontableschema_es.Storage(es)

# List all indexes
print(list(storage.buckets))

# Create a new index
storage.create('test', {
         'fields': [
             {
                 'name': 'num',
                 'type': 'number'
             }
         ]
     }
)

# Write data to index
l=list(storage.write(INDEX_NAME, ({'num':i} for i in range(1000)), ['num']))
print(len(l))
print(l[:10], '...')

l=list(storage.write(INDEX_NAME, ({'num':i} for i in range(500,1500)), ['num']))
print(len(l))
print(l[:10], '...')

# Read all data from index
storage=jsontableschema_es.Storage(es)
print(list(storage.buckets))
l=list(storage.read(INDEX_NAME))
print(len(l))
print(l[:10])

在此驱动程序中,elasticsearch用作数据库包装器。我们可以通过这种方式获得存储

from elasticsearch import Elasticsearch
from jsontableschema_elasticsearch import Storage

engine = Elasticsearch()
storage = Storage(engine)

然后我们可以与存储进行交互(在这种情况下,“bucket”是Elasticsearch索引)

storage.buckets # iterator over bucket names
storage.create('bucket', descriptor,
               reindex=False,
               always_recreate=False,
               mapping_generator_cls=None)
        # reindex will copy existing documents from an existing index with the same name (in case of a mapping conflict)
        # always_recreate will always recreate an index, even if it already exists. default is to update mappings only.
        # mapping_generator_cls allows customization of the generated mapping
storage.delete('bucket')
storage.describe('bucket') # return descriptor, not implemented yet
storage.iter('bucket') # yield rows
storage.read('bucket') # return rows
storage.write('bucket', rows, primary_key,
              as_generator=False)
        # primary_key is a list of field names which will be used to generate document ids

创建索引时,我们总是创建一个具有半随机名称的索引和一个指向它的匹配别名。这允许我们决定在重新创建索引时是否要重新索引文档,或者是否要丢弃现有记录。

映射

创建索引时,将表模式类型转换为ES类型,并为索引生成映射。

模式中的某些特殊属性为生成映射提供了额外信息

  • array类型还需要具有es:itemType属性,该属性指定数组元素的内部数据类型。
  • object类型还需要具有es:schema属性,该属性提供了包含在该对象中的内部文档的tableschema(或具有es:enabled=false以禁用该字段的索引)。

示例

{
  "fields": [
    {
      "name": "my-number",
      "type": "number"
    },
    {
      "name": "my-array-of-dates",
      "type": "array",
      "es:itemType": "date"
    },
    {
      "name": "my-person-object",
      "type": "object",
      "es:schema": {
        "fields": [
          {"name": "name", "type": "string"},
          {"name": "surname", "type": "string"},
          {"name": "age", "type": "integer"},
          {"name": "date-of-birth", "type": "date", "format": "%Y-%m-%d"}
        ]
      }
    },
    {
      "name": "my-library",
      "type": "array",
      "es:itemType": "object",
      "es:schema": {
        "fields": [
          {"name": "title", "type": "string"},
          {"name": "isbn", "type": "string"},
          {"name": "num-of-pages", "type": "integer"}
        ]
      }
    },
    {
      "name": "my-user-provded-object",
      "type": "object",
      "es:enabled": false
    }
  ]
}

自定义映射

通过提供自定义映射生成器类(通过mapping_generator_cls),继承自MappingGenerator类,您应该能够

API参考

存储

Storage(self, es=None)

Elasticsearch表存储。

包实现了Tabular Storage接口(请参阅链接中的完整文档)

Storage

仅记录了附加API

参数

  • es (对象):ElasticSearch实例

storage.create

storage.create(self, bucket, descriptor, reindex=False, always_recreate=False, mapping_generator_cls=None, index_settings=None)

通过模式创建索引。

参数

  • bucket(str):要创建的索引的名称
  • descriptor:要创建的索引的描述符
  • always_recreate:如果已存在,则删除索引(否则仅更新映射)
  • reindex:在映射不匹配的情况下,自动创建新索引并将现有索引迁移到它
  • mapping_generator_cls:MappingGenerator的子类
  • index_settings:用于索引创建的设置

storage.delete

storage.delete(self, bucket=None)

通过模式删除索引。

参数

  • bucket(str):要删除的索引的名称

贡献

该项目遵循Open Knowledge International编码标准

推荐的入门方法是创建并激活项目虚拟环境。要将包和开发依赖项安装到活动环境中

$ make install

要运行具有linting和覆盖率的测试

$ make test

变更日志

此处仅描述破坏性和最重要的更改。有关所有发布版本的完整更改日志和文档,请参阅格式良好的提交历史记录

v1.0

  • 初始驱动程序实现

项目详情


下载文件

下载适合您平台的应用程序。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分发

tableschema-elasticsearch-2.1.0.tar.gz (12.6 kB 查看散列

上传时间

构建分发

tableschema_elasticsearch-2.1.0-py2.py3-none-any.whl (9.4 kB 查看哈希值)

上传时间: Python 2 Python 3

由以下支持