日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

RoaringBitmap函數

本文將為您介紹在Hologres中RoaringBitmap函數的具體參數和使用。

背景信息

RoaringBitmap是一種高效的Bitmap壓縮算法,目前已被廣泛應用在各種語言和各種大數據平臺。適合計算超高基維的,常用于去重、標簽篩選、時間序列等計算中。

RoaringBitmap算法是將32位的INT類型數據劃分為216個數據塊(Chunk),每一個數據塊對應整數的高16位,并使用一個容器(Container)來存放一個數值的低16位。RoaringBitmap將這些容器保存在一個動態數組中,作為一級索引。容器使用兩種不同的結構:數組容器(Array Container)和位圖容器(Bitmap Container)。數組容器存放稀疏的數據,位圖容器存放稠密的數據。如果一個容器里面的整數數量小于4096,就用數組容器來存儲值。若大于4096,就用位圖容器來存儲值。

采用這種存儲結構,RoaringBitmap可以快速檢索一個特定的值。在做位圖計算(AND、OR、XOR)時,RoaringBitmap提供了相應的算法來高效地實現在兩種容器之間的運算。使得RoaringBitmap無論在存儲和計算性能上都表現優秀。

使用限制

在Hologres中使用RoaringBitmap函數,具體限制如下:

  • 該函數僅Hologres V0.10及以上版本支持,請在Hologres管控臺查看當前實例版本,如果您的實例是V0.10以下版本,請您使用自助升級或加入Hologres釘釘交流群反饋,詳情請參見如何獲取更多的在線支持?

  • 該函數僅獨享實例支持,共享集群不支持。

  • 該函數默認加載到public Schema下,且只能加載到public Schema下,不能加載到其他Schema。

  • Hologres V1.3版本新增了若干RoaringBitmap函數(見函數列表描述備注),若您需要使用這些函數,請您使用自助升級或加入Hologres釘釘交流群反饋,詳情請參見如何獲取更多的在線支持?

  • RoaringBitmap函數在使用之前,需要執行以下語句開啟extension才可以調用。extension是DB級別的函數,一個DB只需執行一次即可,新建DB需要重新執行。

    --創建extension
    CREATE EXTENSION roaringbitmap;

    如需卸載RoaringBitmap擴展,請執行如下命令。

    DROP EXTENSION roaringbitmap;
    重要

    不推薦使用DROP EXTENSION <extension_name> CASCADE;命令級聯卸載Extension。CASCADE(級聯)刪除命令不僅會刪除指定擴展本身,還會一并清除擴展數據(例如PostGIS數據、RoaringBitmap數據、Proxima數據、Binlog數據、BSI數據等)以及依賴該擴展的對象(包括元數據、表、視圖、Server數據等)。

  • 不支持將RoaringBitmap設置為Bitmap或者Dictionary。

操作符列表

操作符

輸入

輸出

描述

示例

備注

&

roaringbitmap, roaringbitmap

roaringbitmap

And計算。

rb_build('{1,2,3}') & rb_build('{3,4,5}')

不涉及

|

roaringbitmap, roaringbitmap

roaringbitmap

Or計算。

rb_build('{1,2,3}') | rb_build('{3,4,5}')

不涉及

roaringbitmap, integer

roaringbitmap

rb_build('{1,2,3}') | 6

Hologres V1.3.16及以上版本支持。

integer, roaringbitmap

roaringbitmap

6 | rb_build('{1,2,3}')

Hologres V1.3.16及以上版本支持。

#

roaringbitmap, roaringbitmap

roaringbitmap

Xor計算。

rb_build('{1,2,3}') # rb_build('{3,4,5}')

不涉及

<<

roaringbitmap, bigint

roaringbitmap

Shift left計算。

rb_build('{1,2,3}') << 2

Hologres V1.3.16及以上版本支持。

>>

roaringbitmap, bigint

roaringbitmap

Shift right計算。

rb_build('{1,2,3}') >> 3

Hologres V1.3.16及以上版本支持。

-

roaringbitmap, roaringbitmap

roaringbitmap

AndNot計算。

rb_build('{1,2,3}') - rb_build('{3,4,5}')

Hologres V1.3.16及以上版本支持。

roaringbitmap, integer

roaringbitmap

rb_build('{1,2,3}') - 3

不涉及

@>

roaringbitmap, roaringbitmap

bool

判斷是否為包含關系。

rb_build('{1,2,3}') @> rb_build('{3,4,5}')

不涉及

roaringbitmap, integer

bool

rb_build('{1,2,3}') @> 3

不涉及

<@

roaringbitmap, roaringbitmap

bool

判斷是否為被包含關系。

rb_build('{1,2,3}') <@ rb_build('{3,4,5}')

不涉及

integer, roaringbitmap

bool

3 <@ rb_build('{1,2,3}')

不涉及

&&

roaringbitmap, roaringbitmap

bool

判斷是否有重疊。

rb_build('{1,2,3}') && rb_build('{3,4,5}')

不涉及

=

roaringbitmap, roaringbitmap

bool

判斷是否相等。

rb_build('{1,2,3}') = rb_build('{3,4,5}')

不涉及

<>

roaringbitmap, roaringbitmap

bool

判斷是否不等。

rb_build('{1,2,3}') <> rb_build('{3,4,5}')

不涉及

Bitmap函數列表

Bitmap函數主要包括的函數及說明如所示:

函數名

輸入

輸出

描述

示例

roaringbitmap_in

text

roaringbitmap

將text類型轉換成roaringbitmap類型。

說明

Hologres V2.1.33及以上版本支持。

--新建示例表。
create table rb_text (
    id int,
    a text
);
--插入示例數據。
insert into rb_text values (1,'\x3a300000010000000000090010000000010002000300040005000600070008000900c800');
--將字段a轉換成roaringbitmap類型,并進行and聚合運算。
select rb_and_cardinality_agg(roaringbitmap_in(a::cstring)) from rb_text;

--返回結果
rb_and_cardinality_agg|
-----------------------
                    10|

rb_build

integer[]

roaringbitmap

通過數組創建一個Bitmap。

說明

Hologres V1.3.39版本前只支持常量數組作為輸入,V1.3.39版本開始支持ARRAY列作為輸入。

rb_build('{1,2,3,4,5}')

rb_index

roaringbitmap, integer

bigint

返回此roaringbitmap中元素從0開始的索引,如果不存在則返回-1。

說明

Hologres V1.3.16及以上版本支持。

rb_index(rb_build('{1,2,3}'),3)

rb_and_null2empty

roaringbitmap,roaringbitmap

roaringbitmap

And計算。當輸入參數為Null時,按empty處理。

說明

Hologres V1.1.42及以上版本支持。

rb_and_null2empty(rb_build(null),rb_build('{3,4,5}'))

rb_or_null2empty

roaringbitmap,roaringbitmap

roaringbitmap

Or計算。當輸入為Null時,按empty處理。

說明

Hologres V1.1.42及以上版本支持。

rb_or_null2empty(rb_build(null),rb_build('{3,4,5}'))

rb_andnot_null2empty

roaringbitmap,roaringbitmap

roaringbitmap

AndNot計算。當輸入為Null時,按empty處理。

說明

Hologres V1.1.42及以上版本支持。

rb_andnot_null2empty(rb_build(null),rb_build('{3,4,5}'))

rb_cardinality

roaringbitmap

integer

統計基數。

rb_cardinality(rb_build('{1,2,3,4,5}'))

rb_and_cardinality

roaringbitmap,roaringbitmap

integer

And計算并返回基數。

rb_and_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_and_null2empty_cardinality

roaringbitmap,roaringbitmap

integer

And計算并返回基數。當輸入為Null時,按empty處理。

說明

Hologres V1.1.42及以上版本支持。

rb_and_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))

rb_or_cardinality

roaringbitmap,roaringbitmap

integer

Or計算并返回基數。

rb_or_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or_null2empty_cardinality

roaringbitmap,roaringbitmap

integer

Or計算并返回基數。當輸入為Null時,按empty處理。

說明

Hologres V1.1.42及以上版本支持。

rb_or_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))

rb_xor_cardinality

roaringbitmap,roaringbitmap

integer

Xor計算并返回基數。

rb_xor_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot_cardinality

roaringbitmap,roaringbitmap

integer

AndNot計算并返回基數。

rb_andnot_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot_null2empty_cardinality

roaringbitmap,roaringbitmap

integer

AndNot計算并返回基數。當輸入為Null時,按empty處理。

說明

Hologres V1.1.42及以上版本支持。

rb_andnot_null2empty_cardinality(rb_build(null),rb_build('{3,4,5}'))

rb_is_empty

roaringbitmap

boolean

判斷是否為空的Bitmap。

rb_is_empty(rb_build('{1,2,3,4,5}'))

rb_fill

roaringbitmap,bigint,bigint

roaringbitmap

填寫指定范圍(不包括range_end)。

說明

Hologres V1.3.16及以上版本支持。

rb_fill(rb_build('{1,2,3}'), 5, 7)

rb_clear

roaringbitmap,bigint,bigint

roaringbitmap

清除指定范圍(不包括 range_end)。

說明

Hologres V1.3.16及以上版本支持。

rb_clear(rb_build('{1,2,3}'), 2, 3)

rb_contains

roaringbitmap, roaringbitmap

boolean

判斷第一個Bitmap是否包含第二個Bitmap

rb_contains(rb_build('{1,2,3}'),rb_build('{3}'))

rb_flip

roaringbitmap,integer,integer

roaringbitmap

翻轉Bitmap中特定的Offset段。

rb_flip(rb_build('{1,2,3}'),2,3)

rb_range

roaringbitmap,bigint,bigint

roaringbitmap

返回從起始位置(包含)到結束位置(不包含)范圍的新集合,位置從1開始計數。

說明

Hologres V1.3.16及以上版本支持。

rb_range(rb_build('{1,2,3}'), 2, 3)

rb_range_cardinality

roaringbitmap, bigint, bigint

bigint

返回從起始位置(包含)到結束位置(不包含)范圍的基數,位置從1開始計數。

說明

Hologres V1.3.16及以上版本支持。

rb_range_cardinality(rb_build('{1,2,3}'), 2, 3)

rb_minimum

roaringbitmap

integer

返回Bitmap中最小的Offset,如果Bitmap為空則返回-1。

rb_minimum(rb_build('{1,2,3}'))

rb_maximum

roaringbitmap

integer

返回Bitmap中最大的Offset,如果Bitmap為空則返回0。

rb_maximum(rb_build('{1,2,3}'))

rb_rank

roaringbitmap,integer

integer

返回Bitmap中小于等于指定Offset的基數。

rb_rank(rb_build('{1,2,3}'),3)

rb_jaccard_dist

roaringbitmap,roaringbitmap

double precision

返回兩個Bitmap的Jaccard距離(或Jaccard相似系數)。

說明

Hologres V1.3.16及以上版本支持。

rb_jaccard_dist(rb_build('{1,2,3}'), rb_build('{3,4}'))

rb_select

roaringbitmap, bitset_limit bigint, bitset_offset bigint=0, reverse boolean=false, range_start bigint=-2147483648, range_end bigint=2147483647

roaringbitmap

返回范圍[range_start,range_end) 之間Bitmap的子集 [bitset_offset,bitset_offset+bitset_limit)

說明

Hologres V1.3.16及以上版本支持。

rb_select(rb_build('{1,2,3,4,5,6,7,8,9}'), 5, 2)

rb_iterate

roaringbitmap

set of integer

返回Offset List。

rb_iterate(rb_build('{1,2,3}'))

rb_to_array

roaringbitmap

integer[]

返回Bitmap對應整型數組。

rb_to_array(rb_build('{1,2,3}'))

rb_to_array_string

roaringbitmap, text

text

返回Bitmap對應整型數組拼接的字符串。

rb_to_array_string(rb_build('{1,2,3}'),',')

Bitmap聚合函數列表

Bitmap聚合函數主要包括的函數及說明如所示:

函數名

輸入數據類型

輸出數據類型

描述

示例

rb_build_agg

integer

roaringbitmap

將Offset聚合成bitmap。

rb_build_agg(1)

rb_or_agg

roaringbitmap

roaringbitmap

Or聚合計算。

rb_or_agg(rb_build('{1,2,3}'))

rb_and_agg

roaringbitmap

roaringbitmap

And聚合計算。

rb_and_agg(rb_build('{1,2,3}'))

rb_xor_agg

roaringbitmap

roaringbitmap

Xor聚合計算。

rb_xor_agg(rb_build('{1,2,3}'))

rb_or_cardinality_agg

roaringbitmap

integer

Or聚合計算并返回其基數。

rb_or_cardinality_agg(rb_build('{1,2,3}'))

rb_and_cardinality_agg

roaringbitmap

integer

And聚合計算并返回其基數。

rb_and_cardinality_agg(rb_build('{1,2,3}'))

rb_xor_cardinality_agg

roaringbitmap

integer

Xor聚合計算并返回其基數。

rb_xor_cardinality_agg(rb_build('{1,2,3}'))

其他Bitmap函數

函數名

輸入數據類型

輸出數據類型

描述

示例

roaringbitmap_text

text, bool

roaringbitmap

將text類型的二進制roaringbitmap數據反序列轉換成roaringbitmap結構。第二個參數表示是否進行格式校驗,建議選擇true,否則會返回錯誤的Bitmap數據。

roaringbitmap_text(':0', true)

rb_to_text

roaringbitmap

text

將roaringbitmap結構轉為text類型的二進制roaringbitmap數據輸出。

rb_to_text(rb_build('{1,2,3}'))

使用示例

如下內容將為您介紹RoaringBitmap函數完整的使用示例。

  1. 加載RoaringBitmap函數插件。

    CREATE EXTENSION roaringbitmap;
  2. 創建帶有RoaringBitmap數據類型的表。

    --創建名稱為t1的表
    CREATE TABLE public.t1 (id integer, bitmap roaringbitmap);
  3. 使用rb_build函數插入RoaringBitmap的數據。

    --數組位置對應的BIT值為1
    INSERT INTO public.t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
    
    --將輸入的多條記錄的值對應位置的BIT值設置為1,最后聚合為一個RoaringBitmap  
    INSERT INTO public.t1 SELECT 2,RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  4. 進行Bitmap計算(OR、AND、XOR、ANDNOT)。

    SELECT  RB_OR(a.bitmap,b.bitmap)
    FROM    (
                SELECT  bitmap
                FROM    public.t1
                WHERE   id = 1
            ) AS a
            ,(
                SELECT  bitmap
                FROM    public.t1
                WHERE   id = 2
            ) AS b
    ;
  5. 進行Bitmap聚合計算(OR、AND、XOR、BUILD),并生成新的RoaringBitmap類型。

    SELECT RB_OR_AGG(bitmap) FROM public.t1;
    SELECT RB_AND_AGG(bitmap) FROM public.t1;
    SELECT RB_XOR_AGG(bitmap) FROM public.t1;
    SELECT RB_BUILD_AGG(id) FROM public.t1;
  6. 統計基數(Cardinality),即統計RoaringBitmap中包含多少個位置為1的BIT位。

    SELECT RB_CARDINALITY(bitmap) FROM public.t1;
  7. 從RoaringBitmap中返回位置為1的BIT下標(即位置值)。

    SELECT RB_ITERATE(bitmap) FROM public.t1 WHERE id = 1;
  8. 將RoaringBitmap轉換為數組結構。

    SELECT RB_TO_ARRAY(bitmap) FROM public.t1 WHERE id = 1;