我正在执行批量写入
set java_arguments=%HBASE_OPTS% -classpath "%CLASSPATH%" %CLASS% %hbase-command-arguments%
bulk = new_packets.initialize_ordered_bulk_op()
bulk.insert(packet)
并得到一个错误,我解释为意味着数据包不是一个字典。但是,我知道这是一个字典。可能是什么问题?
这是错误:
output = bulk.execute()
答案 0 :(得分:14)
可能有很多原因......
最好的是你尝试...捕捉...异常并检查错误
try:
bulk.execute()
except BulkWriteError as bwe:
print(bwe.details)
#you can also take this component and do more analysis
#werrors = bwe.details['writeErrors']
raise
答案 1 :(得分:10)
你应该检查两件事:
逐个插入可以让您了解正在发生的事情。
答案 2 :(得分:8)
好吧,问题是我明确地分配了_id,结果是字符串大于12字节限制,我的错。
答案 3 :(得分:0)
尝试使用调试器,它应该为您errmsg
提供准确的错误,并且op
对象正在尝试插入。
答案 4 :(得分:0)
除上述之外,请检查您的 unique
indexes
。如果您进行批量插入并指定了数据中不存在的索引,则会出现此错误。
例如,我不小心将 name
指定为 unique
index
,并且我插入的数据没有名为 name
的键。在将第一个条目插入 mongo 后,它会抛出此错误,因为从技术上讲,您插入的是另一个 unique
name
为 null
的文档。
这是我的模型定义的一部分,我在其中声明了 unique
index
:
self.conn[self.collection_name].create_index(
[("name", ASCENDING)],
unique=True,
)
这里是抛出的错误的详细信息:
{'writeErrors': [{'index': 1, 'code': 11000, 'keyPattern': {'name': 1},
'keyValue': {'name': None}, 'errmsg': 'E11000 duplicate key error collection:
troposphere.temp index: name_1 dup key: { name: null }'
...