雅典娜aws中具有不同分区的表

时间:2018-11-12 18:19:52

标签: amazon-s3 hive partition amazon-athena presto

是否可以在雅典娜中创建具有不同分区类型的表?

例如,每年每月有一个分区,而另一个分区仅按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/';

是否可能与此类似?

谢谢

1 个答案:

答案 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探索存储分区。