partition
语法
partition(partitionCol, keys)
参数
partitionCol 是字符串,表示分区列。对于组合分区,可以指定任意一个分区列。
keys 可以是不含空值的标量/向量,表示需要选择的分区。不同分区方案对应的 keys 的选取规则如下:
分区方案 |
keys |
---|---|
VALUE |
分区向量的一个元素 |
RANGE |
每个分区的编号,从0开始 |
HASH |
分区列的哈希余数 |
LIST |
每个分区的编号,从0开始 |
注意: keys 指定的分区需包含在分区表的分区范围内,否则会出现指定分区键超出范围的报错。
详情
用于选择分区表中的分区,以进行过滤。只能在 where 子句中使用。对于以哈希,列表或范围进行分区的分区表,通过此函数可以方便选取具体的分区。
例子
$ dbName="dfs://test_topic_partition"
$ if(existsDatabase(dbName)){
$ dropDatabase(dbName)
$ }
$ db=database(dbName, LIST, ["A"+string(1..10), "A"+string(11..20), "A"+string(21..30)])
$ n=20
$ date=rand(2012.01.01..2012.01.10, n)
$ sym=rand("A"+string(1..30), n)
$ qty=rand(100, n)
$ t=table(date, sym, qty)
$ pt=db.createPartitionedTable(t, `pt, `sym).append!(t)
$ select * from pt where partition(sym, 0 1)
date |
sym |
qty |
---|---|---|
2012.01.06 |
A4 |
32 |
2012.01.03 |
A10 |
34 |
2012.01.03 |
A17 |
51 |
2012.01.04 |
A14 |
47 |
2012.01.06 |
A16 |
50 |
2012.01.04 |
A15 |
56 |
2012.01.04 |
A16 |
80 |
2012.01.02 |
A11 |
69 |
2012.01.01 |
A14 |
68 |
$ dbName="dfs://test_topic_partition"
$ if(existsDatabase(dbName)){
$ dropDatabase(dbName)
$ }
$ db1=database("", HASH, [SYMBOL, 10])
$ db2=database("", LIST, ["A"+string(1..10), "B"+string(1..10), "C"+string(1..10)])
$ db=database(dbName, COMPO, [db1, db2])
$ n=20
$ id=symbol(string(rand(uuid(), n)))
$ sym=rand(["A"+string(1..10), "B"+string(1..10), "C"+string(1..10)].flatten(), n)
$ qty=rand(100, n)
$ t=table(id, sym, qty)
$ pt=db.createPartitionedTable(t, `pt, `id`sym).append!(t)
$ select * from pt where partition(id, 2 3), partition(sym, 1 2) order by id, sym, qty
id |
sym |
vqty |
---|---|---|
19e8591f-8b7c-c611-bd3e-582d00a414430 |
C6 |
69 |
2db9074a-0502-27ad-06d5-8d1bf3270245 |
B4 |
2 |
73c1ae86-51c9-3e04-c1dd-6c4b62d8a129 |
B9 |
65 |
99d78d5e-14bb-dc7e-7210-7bc5ad0cda5d |
C10 |
11 |