multiTableRepartitionDS

语法

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

参数

query 是一个元组,其中每个元素都是SQL查询的元代码,并且每个SQL查询表示的数据表结构(包括列名和各列的数据类型)必须完全相同。

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

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

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

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

详情

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

如果没有指定 column, partitionTypepartitionScheme,该函数将根据各表原来的分区类型和分区方案划分数据源。相当于 query 中的每个元代码应用到 sqlDS 函数,再将结果合并。

例子

$ n=100000
$ date=rand(2019.06.01..2019.06.05,n)
$ sym=rand(`AAPL`MSFT`GOOG,n)
$ price=rand(1000.0,n)
$ t1=table(date,sym,price)
$ db=database("dfs://value",VALUE,2019.06.01..2019.06.05)
$ db.createPartitionedTable(t1,`pt1,`date).append!(t1);

$ n=100000
$ date=rand(2019.06.01..2019.06.05,n)
$ sym=rand(`AAPL`MSFT`GOOG,n)
$ price=rand(1000.0,n)
$ qty=rand(500,n)
$ t2=table(date,sym,price,qty)
$ db1=database("",VALUE,2019.06.01..2019.06.05)
$ db2=database("",VALUE,`AAPL`MSFT`GOOG)
$ db=database("dfs://compo",COMPO,[db1,db2])
$ db.createPartitionedTable(t2,`pt2,`date`sym).append!(t2);

$ pt1=loadTable("dfs://value","pt1")
$ pt2=loadTable("dfs://compo","pt2");

例1. 根据原有的分区方案划分数据源,不指定 column, partitionType*和 *partitionScheme

$ ds=multiTableRepartitionDS([<select * from pt1>,<select date,sym,price from pt2>]);
(DataSource< select [7] * from pt1 [partition = /value/20190601] >,DataSource< select [7] * from pt1 [partition = /value/20190602] >, ...... ,DataSource< select [7] date,sym,price from pt2 [partition = /compo/20190605/GOOG] >,DataSource< select [7] date,sym,price from pt2 [partition = /compo/20190605/MSFT] >)

例2. 根据股票代码的值划分数据源

$ ds=multiTableRepartitionDS([<select * from pt1>,<select date,sym,price from pt2>],`sym,VALUE,`AAPL`MSFT`GOOG);
(DataSource< select [4] * from pt1 where sym == "AAPL" >,DataSource< select [4] * from pt1 where sym == "MSFT" >,DataSource< select [4] * from pt1 where sym == "GOOG" >,DataSource< select [4] date,sym,price from pt2 where sym == "AAPL" >,DataSource< select [4] date,sym,price from pt2 where sym == "MSFT" >,DataSource< select [4] date,sym,price from pt2 where sym == "GOOG" >)

例3. 根据日期范围划分数据源

$ ds=multiTableRepartitionDS([<select * from pt1>,<select date,sym,price from pt2>],`date,RANGE,2019.06.01 2019.06.03 2019.06.05);
(DataSource< select [4] * from pt1 where date >= 2019.06.01,date < 2019.06.03 >,DataSource< select [4] * from pt1 where date >= 2019.06.03,date < 2019.06.05 >,DataSource< select [4] date,sym,price from pt2 where date >= 2019.06.01,date < 2019.06.03 >,DataSource< select [4] date,sym,price from pt2 where date >= 2019.06.03,date < 2019.06.05 >)

相关函数:repartitionDS