repartitionDS

语法

repartitionDS(query, [column], [partitionType], [partitionScheme], [local=true])

参数

query 是一个SQL查询的元代码,或一个元组,其中每个元素都是SQL查询的元代码。

column 是一个字符串,表示query中的一个列名。repartitionDS函数会根据该列划分数据源。

partitionType 表示分区类型,它的取值可以是RANGE或VALUE。

partitionScheme 是一个向量,表示分区方案。详情请参考 分布式计算

local 是一个布尔值,表示是否将数据源获取到当前节点进行计算。默认值为true。

详情

使用新的分区类型和分区方案重新划分数据源。该函数会返回一个元组,包含一组数据源。

  • 如果query是一个SQL查询的元代码,必须指定column参数。对于COMPO分区类型的表,可以不指定partitionType和partitionScheme参数,repartitionDS函数会根据column列原始的分区类型和分区方案划分数据源。

  • 如果query是包含多个SQL查询元代码的元组,无需指定column、partitionType和partitionScheme参数,repartitionDS函数会返回一个和query长度相同的元组,每个元素都是query中的元代码对应的数据源。

例子

创建分布式数据库和表:

$ n=1000000
$ ID=rand(100, n)
$ dates=2017.08.07..2017.08.11
$ date=rand(dates, n)
$ x=rand(10.0, n)
$ t=table(ID, date, x)

$ dbDate = database(, VALUE, 2017.08.07..2017.08.11)
$ dbID = database(, RANGE, 0 50 100)
$ db = database("dfs://compoDB", COMPO, [dbDate, dbID])
$ pt = db.createPartitionedTable(t, `pt, `date`ID)
$ pt.append!(t);

例1:query是一个SQL查询的元代码,指定了 partitionTypepartitionScheme.

$ repartitionDS(<select * from pt>,`date,RANGE,2017.08.07 2017.08.09 2017.08.11);

[DataSource< select [4] * from pt where date >= 2017.08.07,date < 2017.08.09 >,DataSource< select [4] * from pt where date >= 2017.08.09,date < 2017.08.11 >]

例2:query是一个SQL查询的元代码,没有指定 partitionTypepartitionScheme.

$ repartitionDS(<select * from pt>,`ID)

[DataSource< select [4] * from pt [partition = */0_50] >,DataSource< select [4] * from pt [partition = */50_100] >]

例3:query是包含多个SQL查询元代码的元组。

$ repartitionDS([<select * from pt where id between 0:50>,<select * from pt where id between 51:100>]);

[DataSource< select [4] * from pt where id between 0 : 50 >,DataSource< select [4] * from pt where id between 51 : 100 >]