Splunk 使用 Python SDK 将 GCP 中的 csv 加载到 KVStore 查找中
Splunk Load csv from GCP into a KVStore lookup using the Python SDK
我们目前有一个 45mb 的 CSV 文件,我们将把它加载到 Splunk kvstore 中。我希望能够通过 python SDK 完成此操作,但我 运行 在加载记录时遇到了一些麻烦。
我能找到的更新 kvstore 的唯一方法是 service.collection.insert() 函数,据我所知,它一次只接受 1 行。由于我们在这个文件中有 250k 行,我不能每天等待所有行都上传。
这是我目前拥有的:
from splunklib import client, binding
import json, pandas as pd
from copy import deepcopy
data_file = '/path/to/file.csv'
username = 'user'
password = 'splunk_pass'
connectionHandler = binding.handler(timeout=12400)
connect_kwargs = {
'host': 'splunk-host.com',
'port': 8089,
'username': username,
'password': password,
'scheme': 'https',
'autologin': True,
'handler': connectionHandler
}
flag = True
while flag:
try:
service = client.connect(**connect_kwargs)
service.namespace['owner'] = 'Nobody'
flag = False
except binding.HTTPError:
print('Splunk 504 Error')
kv = service.kvstore
kv['test_data'].delete()
df = pd.read_csv(data_file)
df.replace(pd.np.nan, '', regex=True)
df['_key'] = df['key_field']
result = df.to_dict(orient='records')
fields = deepcopy(result[0])
for field in fields.keys():
fields[field] = type(fields[field]).__name__
df = df.astype(fields)
kv.create(name='test_data', fields=fields, owner='nobody', sharing='system')
for row in result:
row = json.dumps(row)
row.replace("nan", "'nan'")
kv['learning_center'].data.insert(row)
transforms = service.confs['transforms']
transforms.create(name='learning_center_lookup', **{'external_type': 'kvstore', 'collection': 'learning_center', 'fields_list': '_key, userGuid', 'owner': 'nobody'})
# transforms['learning_center_lookup'].delete()
collection = service.kvstore['learning-center']
print(collection.data.query())
除了永远加载 25 万条记录的问题之外,它一直以 nan 为值连续失败,无论我在其中放入什么来尝试处理 nan,它仍然存在在字典值中。
您可以直接与 REST 端点交互,然后使用 storage/collections/data/{collection}/batch_save
根据需要保存多个项目。
我们目前有一个 45mb 的 CSV 文件,我们将把它加载到 Splunk kvstore 中。我希望能够通过 python SDK 完成此操作,但我 运行 在加载记录时遇到了一些麻烦。
我能找到的更新 kvstore 的唯一方法是 service.collection.insert() 函数,据我所知,它一次只接受 1 行。由于我们在这个文件中有 250k 行,我不能每天等待所有行都上传。
这是我目前拥有的:
from splunklib import client, binding
import json, pandas as pd
from copy import deepcopy
data_file = '/path/to/file.csv'
username = 'user'
password = 'splunk_pass'
connectionHandler = binding.handler(timeout=12400)
connect_kwargs = {
'host': 'splunk-host.com',
'port': 8089,
'username': username,
'password': password,
'scheme': 'https',
'autologin': True,
'handler': connectionHandler
}
flag = True
while flag:
try:
service = client.connect(**connect_kwargs)
service.namespace['owner'] = 'Nobody'
flag = False
except binding.HTTPError:
print('Splunk 504 Error')
kv = service.kvstore
kv['test_data'].delete()
df = pd.read_csv(data_file)
df.replace(pd.np.nan, '', regex=True)
df['_key'] = df['key_field']
result = df.to_dict(orient='records')
fields = deepcopy(result[0])
for field in fields.keys():
fields[field] = type(fields[field]).__name__
df = df.astype(fields)
kv.create(name='test_data', fields=fields, owner='nobody', sharing='system')
for row in result:
row = json.dumps(row)
row.replace("nan", "'nan'")
kv['learning_center'].data.insert(row)
transforms = service.confs['transforms']
transforms.create(name='learning_center_lookup', **{'external_type': 'kvstore', 'collection': 'learning_center', 'fields_list': '_key, userGuid', 'owner': 'nobody'})
# transforms['learning_center_lookup'].delete()
collection = service.kvstore['learning-center']
print(collection.data.query())
除了永远加载 25 万条记录的问题之外,它一直以 nan 为值连续失败,无论我在其中放入什么来尝试处理 nan,它仍然存在在字典值中。
您可以直接与 REST 端点交互,然后使用 storage/collections/data/{collection}/batch_save
根据需要保存多个项目。