python批量插入数据到es和读取es数据
一、插入数据
1、首先准备类似如下数据
{"_type": "type1", "_id": 1, "_index": "test", "_source": {"JOBNAME0": "guba_eastmoney_com_265162", "JOBNAME1": "guba_eastmoney_com_265162"}}
2、调用es相关模块插入数据到es中
#!/usr/bin/python
import threading
import queue
import json
import time
from elasticsearch import Elasticsearch
from elasticsearch import helpers
import os
import sys # # host_list = [
# {"host":"10.58.7.190","port":9200},
# {"host":"10.58.55.191","port":9200},
# {"host":"10.58.55.192","port":9200},
# ]
#
host_list = [
{"host":"10.87.7.190","port":9200},
] # create a es clint obj
client = Elasticsearch(host_list) with open(os.path.join(os.path.dirname(os.path.abspath(__file__)),"insert.json"),"r") as f:
for line in f:
actions = []
actions.append(json.loads(line))
try:
for k, v in helpers.parallel_bulk(client=client, thread_count=1, actions=actions):
# 这里的actions是插入es的数据,这个格式必须是列表的格式,列表的每个元素又必须是字典
pass
except Exception as e:
sys.stderr(e)
3、查看es索引中的文档数
[root@test1 cdrom]# curl -XGET 'http://10.87.7.190:9200/_cat/indices?v&pretty'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open test r91GhsFVT7iF6M3iAuNEKg 2 5 19362 0 1.3mb 499.7kb
二、读取es的数据
#!/usr/bin/python
from kafka import KafkaProducer
import threading
import json
import time
from elasticsearch import Elasticsearch
from elasticsearch import helpers
import os
import sys
import argparse
import random def get_data_from_es():
host_list = [
{"host": "10.58.55.1", "port": 9200},
{"host": "10.58.55.2", "port": 9200},
{"host": "10.58.55.7", "port": 9200},
# {"host": "10.58.55.201", "port": 9200},
# {"host": "10.58.55.202", "port": 9200},
# {"host": "10.58.55.203", "port": 9200},
] es = Elasticsearch(host_list)
err_data_num = 0
correct_data_num = 0
size = 100
query = es.search(index='full_sight', scroll='1m', size=size)
for m in query['hits']['hits']:
# print(m)
d_id = m["_id"]
if "LASTOPER" in m["_source"].keys():
# if "UPDATE_TEST" in m["_source"].keys(): if m["_source"]["LASTOPER"] == "" + str(d_id):
correct_data_num += 1
else:
err_data_num += 1
else:
err_data_num += 1
# print("id为{d_id}数据未更新成功,错误的条数为{num}".format(d_id=d_id, num=err_data_num)) results = query['hits']['hits'] total = query['hits']['total']
scroll_id = query['_scroll_id'] page = divmod(total, size)
if page[1] == 0:
page = page[0]
else:
page = page[0] + 1 for i in range(0, page):
try:
query_scroll = es.scroll(scroll_id=scroll_id, scroll='1m', )['hits']['hits']
except Exception as e:
continue
else:
for m in query_scroll: d_id = m.get("_id",None)
if "LASTOPER" in m["_source"].keys(): if m["_source"]["LASTOPER"] == "test" + str(d_id):
correct_data_num += 1
else:
err_data_num += 1
else:
err_data_num += 1 return err_data_num,correct_data_num if __name__ == '__main__':
while True:
error,correct = get_data_from_es()
print("未更新的数据的条数为:{num}".format(num = error))
print("已更新的数据的条数为:{num}".format(num = correct))
print("=" * 200)
if int(error) == 0:
break
else:
continue
python批量插入数据到es和读取es数据的更多相关文章
- Python批量插入SQL Server数据库
因为要做性能测试,需要大量造数据到数据库中,于是用python写了点代码去实现,批量插入,一共四张表 简单粗暴地插入10万条数据 import pymssql import random __auth ...
- python批量插入mysql数据库(性能相关)以及反引号的使用
参考link: https://blog.csdn.net/qq_35958094/article/details/78462800(插入相关) https://www.cnblogs.com/hya ...
- 机器学习之数据预处理,Pandas读取excel数据
Python读写excel的工具库很多,比如最耳熟能详的xlrd.xlwt,xlutils,openpyxl等.其中xlrd和xlwt库通常配合使用,一个用于读,一个用于写excel.xlutils结 ...
- 用python批量插入数据到数据库中
既然使用python操作数据库必不可少的得使用pymysql模块 可使用两种方式进行下载安装: 1.使用pip方式下载安装 pip install pymysql 2.IDE方式 安装完成后就可以正常 ...
- Python 基于Python从mysql表读取千万数据实践
基于Python 从mysql表读取千万数据实践 by:授客 QQ:1033553122 场景: 有以下两个表,两者都有一个表字段,名为waybill_no,我们需要从tl_waybill_b ...
- MSSQL数据的批量插入
一.概述: 对于数据的批量插入操作似乎成了某些大数据量操作的必用手段,MSSQL也提供了一些数据批量插入的操作方法,先将这些方法汇总,以便于下次用到使用.面对数据的批量插入操作,我们也应该考虑一个问题 ...
- .Net批量插入数据
1. 一般我们普通数据插入是这样的: 现在我们写一个控制台程序用常规办法添加10000条数据. //以下是批量插入数据的办法 //连接字符串 string str = "Server=.;D ...
- python MySQL 插入Elasticsearch
一.需求分析 注意: 本环境使用 elasticsearch 7.0版本开发,切勿低于此版本 mysql 表结构 有一张表,记录的数据特别的多,需要将7天前的记录,插入到Elasticsearch中, ...
- Mybatis与JDBC批量插入MySQL数据库性能测试及解决方案
转自http://www.cnblogs.com/fnz0/p/5713102.html 不知道自己什么时候才有这种钻研精神- -. 1 背景 系统中需要批量生成单据数据到数据库表,所以采用 ...
随机推荐
- ThreadLocal快速了解一下
欢迎点赞阅读,一同学习交流,有疑问请留言 . GitHub上也有开源 JavaHouse 欢迎star 1 引入 在Java8里面,ThreadLocal 是一个泛型类.这个类可以提供线程变量.每个线 ...
- react-native 相对项目路径导入组件 ___ babel-plugin-root-import
在使用react-native的时候,经常要自定义很多组件,但是只能使用../../../的方式,经常不记得这是多深,有没有一个插件,能自动帮我们解决这样的问题? 使用指南 我们使用的目标要达到以下的 ...
- CoderForces999D-Equalize the Remainders
D. Equalize the Remainders time limit per test 3 seconds memory limit per test 256 megabytes input s ...
- ARTS-S golang goroutines and channels(一)
先用golang实现一个简单的tcp服务端,假定文件名为clock1.go // clock1.go package main import ( "fmt" "io&qu ...
- Python流程控制之分支结构
目录 if/else结构 多重if结构 嵌套if结构 练习 if/else结构 if如果,else否则 # java if(){ }else{ } # python if 条件: 语句 else: 语 ...
- 在VS2017中连接到SQLite数据源(dbfist)
在VS2017中配置.连接到SQLite数据源(dbfist) 需要安装的VS插件 SQLite/SQL Server Compact ToolBox 这个插件安装后,在选择数据源时已经可以选择SQL ...
- get请求被浏览器跨域的同源策略请求机制拦截,但是get请求是否请求到了服务器呢
浏览器会拦截跨域请求,但是只是拦截返回结果,请求还是会被发送到服务器. 请求因为跨域被拦截后,会改成 OPTIONS 请求送达服务器,这样服务器就可以知道有人在请求.
- 使用 yum 安装Docker(CentOS 7下)
使用 yum 安装(CentOS 7下) Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker . 通过 uname ...
- 《Java基础知识》Java类的定义及其实例化
类必须先定义才能使用.类是创建对象的模板,创建对象也叫类的实例化. 下面通过一个简单的例子来理解Java中类的定义: public class Dog { String name; int age; ...
- 【玩转SpringBoot】让错误处理重新由web服务器接管
其实web服务器是会处理错误的 在web.xml还是随处可见的年代时(确实有点老黄历了),下面的这些配置应该都不陌生. 根据错误代码处理错误,如下图01: 根据异常类型处理错误,如下图02: 不过我们 ...