簡體   English   中英

Mongo DB跟蹤DDL更改

[英]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,
}

自定義代碼以獲取mongo連接

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM