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 |