[英]Mongo DB track DDL changes
我是Mongo DB的新手,來自RDBMS / MPP / ETL背景,我使用的大多數數據存儲都包含有關對象的元數據(表視圖等)。我的疑問是Mongo DB特有的,它是否有任何數據字典像Oracle user_tables或有關集合上次DDL更新時間的任何其他有關集合的元信息,因為MongoDB是少模式數據庫,應用程序可以更改插入數據而不更改模式。因此,當涉及MongoDb時,在運行ETL作業之前找到任何結構更改非常重要。搜索字典或跟蹤DDL更改的任何API信息,卻一無所獲。任何人都可以引導我找到與此相關的鏈接或信息。如果沒有這樣的選擇,那么可以遵循一些更好的最佳實踐來避免這種情況圖式演變
感謝Anoop R
使用Mongodb的優點之一是其較少架構的存儲文檔結構。 現在,與RDBMS表字典不同,該模式位於MongoDb用戶的應用程序層中。 這使應用程序可以隨時靈活地設計/更改模式,而無需等待任何alter statement依賴項。
話雖如此,Mongodb 3.2引入了模式驗證,而3.4則豐富了模式驗證。 您可以在此處了解有關驗證的更多信息Mongodb文檔驗證 。 使用validator選項在每個集合的基礎上指定驗證規則,該選項采用一個指定驗證規則或表達式的文檔。
關於模式驗證要注意的一點不是跟蹤ddl更改,而是建立可以達成共識的定義。
我得到的解決方案並不是我真正想要的,但是我認為我們可以使用該解決方案。
key_type_default_count = {
int: 0,
float: 0,
str: 0,
bool: 0,
dict: 0,
list: 0,
set: 0,
tuple: 0,
None: 0,
object: 0,
unicode: 0,
"other": 0,
}
client = create_mongo_con(v_env,v_con_name)
print client
db = client[v_db_name]
collection = db[v_collection]
key_type_count = defaultdict(lambda: dict(key_type_default_count))
mongo_collection_docs = collection.find({},{"_id":0}).limit(30)
#print mongo_collection_docs'
print type(mongo_collection_docs)
for doc in mongo_collection_docs:
for key, value in doc.items():
print ' my key '+str(key)
print 'my value is '+str(value)
print ' my value type '
print type(value)
if type(value) in key_type_count[key].keys():
key_type_count[key][type(value)] += 1
else:
key_type_count[key]["other"] += 1
total_docs += 1`
您可以從https://github.com/nimeshkverma/mongo_schema那里獲得更多信息,我從那里得到了這個主意,但是該代碼不適用於我。我編輯了部分內容,現在我可以生成一個漂亮的輸出
但是現在我面臨一個問題,所有字符串字段都被檢測為unicode。我需要弄清楚這個問題將發布如果我們有解決方案。如果有人在python中遇到str和unicode的相同問題,請評論
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.