用于Elasticsearch的DBAPI和SQLAlchemy方言

elasticsearch-dbapi的Python项目详细描述


弹性搜索DBAPI

Build StatusPyPI versionCoverage Status

elasticsearch-dbapi实现了DBAPI(PEP-249)和SQLAlchemy方言, 它在elasticsearch群集上启用SQL访问,以便只进行查询访问。 使用弹性X-PackSQL API

我们目前正在为AWS ES构建对opendistro/_sqlAPI的支持

此库支持Elasticsearch 7.X版本。在

安装

$ pip install elasticsearch-dbapi

安装AWS ES支架:

^{pr2}$

用法:

使用DBAPI:

fromes.elastic.apiimportconnectconn=connect(host='localhost')curs=conn.cursor()curs.execute("select * from flights LIMIT 10")print([rowforrowincurs])

使用SQLAlchemy执行:

fromsqlalchemy.engineimportcreate_engineengine=create_engine("elasticsearch+http://localhost:9200/")rows=engine.connect().execute("select * from flights LIMIT 10")print([rowforrowinrows])

使用SQLAlchemy:

fromsqlalchemyimportfunc,selectfromsqlalchemy.engineimportcreate_enginefromsqlalchemy.schemaimportMetaData,Tableengine=create_engine("elasticsearch+http://localhost:9200/")logs=Table("flights",MetaData(bind=engine),autoload=True)count=select([func.count("*")],from_obj=logs).scalar()print(f"COUNT: {count}")

使用SQLAlchemy反射:

fromsqlalchemy.engineimportcreate_enginefromsqlalchemy.schemaimportTable,MetaDataengine=create_engine("elasticsearch+http://localhost:9200/")logs=Table("flights",MetaData(bind=engine),autoload=True)print(engine.table_names())metadata=MetaData()metadata.reflect(bind=engine)print([tablefortableinmetadata.sorted_tables])print(logs.columns)

连接参数:

elasticsearch-py 是用来建立连接和传输的,这是官方的 弹性python库。Elasticsearch构造函数接受多个可选参数 它可用于在安全性、性能等方面正确配置连接 以及高可用性。这些可选参数可以在连接字符串中设置,用于 示例:

   elasticsearch+http://localhost:9200/?http_compress=True&timeout=100

将传输设置为使用gzip(http_compress)并将超时设置为10秒。在

有关配置选项的详细信息,请参阅elasticsearch-py的文档:

RFC-1738后面的连接字符串,为了支持多个节点,您应该使用sniff_*参数

尺寸

默认情况下,单个查询获取的最大行数 限制在10000。{cd6>可以通过 参数:

fromes.elastic.apiimportconnectconn=connect(host='localhost')curs=conn.cursor(fetch_size=1000)

如果要获取超过10000行 max_result_window 也必须适应。在

测试

运行unittest launch elasticsearch和kibana(kibana确实不是必需的,但拥有kibana很好)

$ docker-compose up -d
$ nosetests -v

sql opendistro端点(AWS ES)的特殊情况

AWS ES公开了opendistro SQL插件,它使用了不同的SQL方言。 由于方言和API响应的差异,我们对opendistro SQL提供了有限的支持 在此包上使用odelasticsearch驱动程序:

fromsqlalchemy.engineimportcreate_engineengine=create_engine("odelasticsearch+https://search-SOME-CLUSTER.us-west-2.es.amazonaws.com:443/")rows=engine.connect().execute("select count(*), Carrier from flights GROUP BY Carrier")print([rowforrowinrows])

或使用DBAPI:

fromes.opendistro.apiimportconnectconn=connect(host='localhost',port=9200,path="",scheme="http")curs=conn.cursor().execute("select * from flights LIMIT 10")print([rowforrowincurs])

已知限制

此库尚不支持以下功能:

  • 不支持数组类型列。Elaticsearch SQL也不支持它们。 SQLAlchemyget_columns将排除它们。在
  • objectnested列类型不受良好支持,它们被转换为字符串
  • 名称以.开头的索引
  • 地理点当前没有得到很好的支持,已转换为字符串
  • 对AWS ES的支持非常有限,例如还没有AWS授权

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java更改WSO2 IS证书会导致登录失败   安卓 Java随机行读取   JavaJComboBox留下了一条线索   用于嵌套对象的java Jasper报告   java动态生成Id值时,如何检索复选框的值   “拼接(a,b,…”的Java等价方法在JavaScript方法中   java在有子面板的jPanel上绘图   java生成时,在包“安卓”中找不到属性“text color”的资源标识符   java如何使用maven插件正确地构建Spring引导远jar?   readUTF中的java EOFEException   在Java中,按星期一到星期天进行排序   java MultiFormatReader无法读取qr,尽管qr是可扫描的   替换java字符串中未知数量的值   java将MySQL连接到Apache nutch   Java从3个不同的枚举中获取随机值   java我需要将多个JRadioButtongGroup和一个jcombobox连接到一个jbutton   java Android sqlite异常。无法实例化活动   如何使用单流创建Map<String,List<Long>>Java8?