最近在使用prestosql做跨庫查詢,在查詢mongodb的時候遇到了問題。
mongodb是非結構化資料,presto其實已經做了很多任務作幫助我們通過sql的方式去查詢它,並且返回的結果也盡量往傳統結構化資料庫的形式上靠攏,比如在presto sql中使用unnest方法,可以將array或map格式的字段平鋪開,借用cross join語法可以實現級聯查詢。
上面提到的unnest操作,通過檢視prestosql(338版本)只支援array和map格式的列,否則會報錯。
在實際使用presto的過程中,發現presto會自行維護一套schema資料(表結構),但是由於mongodb的無結構性,在presto自己生成的這一套schema中會發現有很多列缺失與錯誤的情況。
基於上面的原因,會導致有的列無法unnest,原因可能是這一列本身就不是匹配的資料型別,也有可能是這一列的資料型別被presto識別錯了。
所以如果在有需要的情況下,可以先手動插入一條標桿資料,用於標註正確的mongodb表結構,讓presto能正確識別,然後再插入剩餘的業務資料,這樣就能保證presto的功能正確執行。
在已經生成了錯誤schema的情況,並且不想清空mongodb資料,可以嘗試手動刪除對應庫中_schema表(presto預設儲存表結構的地方)中的記錄,然後修改目標表中第一行資料 或者 在最開頭插入標桿資料,然後執行一次表資料查詢,又會重新出發一次schema的掃瞄和生成。
初始化 指定初始化
id alloc 物件的誕生過程,主要是從作業系統獲得一塊足夠大的記憶體,以存放該類的全部例項變數,並將其指定為存放記憶體物件的實力變數的位置。alloc方法同時將這塊記憶體全部設定為0。結果是 bool變數初始化為no,所有的int型別變數為0,float變數為0.0,所有的指標為nil.obje...
初始化 1 預設初始化 列表初始化
初始化的基本概念 事實 初始化和賦值是兩個完全不同的操作。初始化,是建立變數時賦予其乙個初始值。賦值,是把物件的當前值擦除,用乙個新值代替。列表初始化 p39 作為c 11新標準的一部分,用花括號 來初始化變數得到了全面應用。出於某些原因,這種初始化的方式叫做列表初始化。現在,無論是初始化物件還是某...
初始化 MyBatis初始化之載入初始化
在mybatis初始化過程中,大致會有以下幾個步驟 1.建立configuration全域性配置物件,會往typealiasregistry別名註冊中心新增mybatis需要用到的相關類,並設定預設的語言驅動類為xmllanguagedriver 3.構建defaultsqlsessionfacto...