是否可以在雅典娜中创建具有不同分区类型的表?
例如,每年每月有一个分区,而另一个分区仅按id
CREATE EXTERNAL TABLE IF NOT EXISTS table_example(
name string,
adress
PARTITIONED BY (year string, month string, day string) ----> partition 1
PARTITIONED BY (id int) -----------> partition 2
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true')
LOCATION 's3://example/folder/';
是否可能与此类似?
谢谢
答案 0 :(得分:1)
否,这是不可能的。 分区不是“索引”。它是文件系统(或类似文件系统的存储,此处为s3)上的数据布局。 您需要的是数据的两个独立副本。为此,您只需创建两个表,一个表按年/月/日分区,第二个表按ID分区。
但是,假设#include <Arrays\ArrayObj.mqh>
class CTick : public CObject{
public: double m_bid, m_ask;
CTick(const double bid,const double ask):m_bid(bid),m_ask(ask){}
};
CArrayObj *listOfTicks;
CTick *getTickByShift(const int shift=0)
{
return listOfTicks.At(listOfTicks.Total()-1-shift));
}
int OnInit(){
listOfTicks=new CArrayObj();
return(1);
}
void OnTick(){
listOfTicks.Add(new CTick(Bid,Ask));
//example of accessing ticks 0 and 3, keep in mind you do not have 3 at start!
double bid0=getTickByShift(0).m_bid;
double ask3=getTickByShift(3).m_bid;
}
void OnDeinit(const int reason){delete listOfTicks;}
是表中的标识符,则您确实不想按listOfTicks.Step(1000);
进行分区。不过,您可能有兴趣按ID探索存储分区。