JDBC 將RoaringBitmap寫入greenplum

最近在做基于標簽的圈人,使用了開源的Roaringbitmap淹办。Greenplum安裝完Roaringbitmap插件后勇婴,可以構(gòu)建roaringbitmap焚志,不過這些操作都是在數(shù)據(jù)庫內(nèi)完成。如果在程序中構(gòu)建RoaringBitmap胆筒,如何將數(shù)據(jù)寫入GP邮破?

其實很簡單,使用官方自己到JDBC驅(qū)動仆救,將roaringbitmap序列化后抒和,就可以寫入了。
1.首先在gp數(shù)據(jù)庫中建表
create table btable(id int,userids bytea);注意 這里是bytea 二進制類型彤蔽。
2.在程序中序列化roaringbitmap摧莽,將二進制數(shù)據(jù)寫入數(shù)據(jù)庫

    public static String url = "jdbc:pivotal:greenplum://127.0.0.1:5432;DatabaseName=gpadmin";
    // 數(shù)據(jù)庫用戶名
    public static String username = "gpadmin";
    // 數(shù)據(jù)庫密碼
    public static String password = "gpadmin";
    public static Connection conn = null;

    static {
        try {
            try {
                conn = DriverManager.getConnection(url, username, password);
            } catch (SQLException e) {
                e.printStackTrace();
            }

            Class.forName("com.pivotal.jdbc.GreenplumDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

  String insql = "INSERT INTO btest(id,bs) VALUES (?,?)";
        PreparedStatement addstmt = conn.prepareStatement(insql);
        RoaringBitmap mrb = RoaringBitmap.bitmapOf(1, 2, 3, 1000);
        System.out.println("starting with  bitmap " + mrb);
        mrb.runOptimize(); //to improve compression
        byte[] array = new byte[mrb.serializedSizeInBytes()];
        try {
            mrb.serialize(new java.io.DataOutputStream(new java.io.OutputStream() {
                int c = 0;

                @Override
                public void close() {
                }

                @Override
                public void flush() {
                }

                @Override
                public void write(int b) {
                    array[c++] = (byte) b;
                }

                @Override
                public void write(byte[] b) {
                    write(b, 0, b.length);
                }

                @Override
                public void write(byte[] b, int off, int l) {
                    System.arraycopy(b, off, array, c, l);
                    c += l;
                }
            }));
        } catch (IOException ioe) {
            // should never happen because we write to a byte array
            throw new RuntimeException("unexpected error while serializing to a byte array");
        }
        addstmt.setInt(1,1);
        ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(array);

        addstmt.setBinaryStream(2,byteArrayInputStream);
        addstmt.executeUpdate();

3.將二進制數(shù)據(jù)轉(zhuǎn)化成roaringbitmap,這也是最為關(guān)鍵的一步。

select cast( cast(userids as varchar) as roaringbitmap) from btale

至此顿痪,已經(jīng)可以將roaringbitmap寫入數(shù)據(jù)庫镊辕。
至于,如何從數(shù)據(jù)中讀取roaringbitmap员魏,暫時還沒有找到方法丑蛤。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市撕阎,隨后出現(xiàn)的幾起案子受裹,更是在濱河造成了極大的恐慌,老刑警劉巖虏束,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件坑质,死亡現(xiàn)場離奇詭異荧恍,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門杰标,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人间雀,你說我怎么就攤上這事极舔∪悍ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵发乔,是天一觀的道長熟妓。 經(jīng)常有香客問我,道長栏尚,這世上最難降的妖魔是什么起愈? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮译仗,結(jié)果婚禮上抬虽,老公的妹妹穿的比我還像新娘。我一直安慰自己纵菌,他們只是感情好阐污,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著产艾,像睡著了一般疤剑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闷堡,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天隘膘,我揣著相機與錄音,去河邊找鬼杠览。 笑死弯菊,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的踱阿。 我是一名探鬼主播管钳,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼软舌!你這毒婦竟也來了才漆?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤佛点,失蹤者是張志新(化名)和其女友劉穎醇滥,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體超营,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡鸳玩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了演闭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片不跟。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖米碰,靈堂內(nèi)的尸體忽然破棺而出窝革,到底是詐尸還是另有隱情购城,我是刑警寧澤,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布聊闯,位于F島的核電站工猜,受9級特大地震影響米诉,放射性物質(zhì)發(fā)生泄漏菱蔬。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一史侣、第九天 我趴在偏房一處隱蔽的房頂上張望拴泌。 院中可真熱鬧,春花似錦惊橱、人聲如沸蚪腐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽回季。三九已至,卻和暖如春正林,著一層夾襖步出監(jiān)牢的瞬間泡一,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工觅廓, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留鼻忠,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓杈绸,卻偏偏與公主長得像帖蔓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞳脓,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容