利用python将elasticsearch的数据存储至MySQL

由于elasticsearch不存在表的概念,其查询结果返回的是json格式的数据,在将数据插入MySQL之前需要将数据解析出来。数据逻辑:读取MySQL数据->解析->存储至MySQL数据库。

创建MySQL数据库连接以及elasticsearch连接

from elasticsearch import Elasticsearch
import pandas as pd
from sqlalchemy import create_engine


##创建es连接
es = Elasticsearch(hosts = 'host:port',http_auth=('username','password'))
##创建mysql连接
con_to_mysql = create_engine("mysql+pymysql://username:password@host:port/database",encoding = 'utf-8')   

接下来就是从es中获取数据并解析数据了;

获取数据闭并解析

这里定义一个函数,实现获取数据并解析数据的功能

def get_data(index,body,scroll):     
    data = es.search(index = index,body = body,scroll = scroll)
    #获取数据标签
    scrollid = data['_scroll_id']
    #数据总量
    total_num = data['hits']['total']
    json_data = data['hits']['hits']
    for i in range(round(total_num / 10000) + 1):
        res = es.scroll(scroll_id=scrollid, scroll='5m')
        json_data += res['hits']['hits']
    
    data_dataframe = pd.DataFrame(json_data)
    detail_data = data_dataframe['_source']
    detail_Data_Dataframe = pd.DataFrame(list(detail_data))
    return detail_Data_Dataframe

因为elasticsearch无法全量查询数据,所以需要创建游标,类似于书签,每次查询10000条数据,es中返回的每条数据可能顺序不一,因此在解析的时候直接将json数据转换成dataframe。

创建主函数,将数据写入MySQL数据库

if __name__ == '__main__':
    
    body = {
  "size": 10000,
  "query": {
    "match_all": {}
  }
}
    gas_bottle = get_data('gas-bottle',body,'5m')
#    Dataframe数据框写入MySQL
    gas_bottle.to_sql('gas-bottle',con = con_to_mysql,if_exists = 'replace',index = False)
    es.close()          #关闭es连接
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用多线程的方法将MySQL中的数据同步到Elasticsearch(ES)中。以下是可能的实现步骤: 1. 创建一个MySQL数据库的连接,以便读取数据。你可以使用Python的`mysql-connector-python`库或其他适合你的语言和环境的库来建立连接。 2. 创建一个Elasticsearch的连接,以便将数据写入ES。你可以使用Python的`elasticsearch`库或其他适合你的语言和环境的库来建立连接。 3. 查询MySQL数据库中的数据,并将其存储在适当的数据结构中(如列表、字典等)。 4. 使用多线程的方法,将数据MySQL中读取并写入ES。你可以将数据分成多个批次,并使用多个线程同时处理每个批次的数据。 - 每个线程可以负责处理一个批次的数据。 - 在每个线程中,循环遍历批次中的数据,并使用ES连接将数据写入ES。 5. 在写入数据到ES之前,可以根据需要对数据进行一些转换、清洗或格式化操作。 6. 确保在使用多线程时处理并发访问数据库和ES的问题。你可以使用锁或其他同步机制来确保数据的一致性和完整性。 7. 在所有数据写入ES之后,关闭数据库和ES的连接。 请注意,以上步骤只是一种可能的实现方式。具体实现可能因你使用的编程语言、库和环境而有所不同。在实际应用中,你还需要考虑错误处理、日志记录、性能优化等方面的问题。同时,确保你的代码安全可靠,并遵循最佳实践,以保护敏感数据和防止潜在的安全风险。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值