日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

數據重排

在MaxCompute的使用過程中,如果已經積累了大量數據占用了大量存儲資源,且已經通過削減數據存儲生命周期和刪除非必要數據等方式進行了治理,在您的存儲預算有限,計算資源還有冗余的情況下,可以考慮使用數據重排方式對存儲空間進行優化。本文以MaxCompute公共數據集中表為例為您介紹如何通過數據重排方式進行存儲優化。

背景信息

數據重排就是根據數據的特征把具有相同列值字段通過排序放在一塊,以提高壓縮率。MaxCompute中支持以下排序方式對數據進行重排:

因為ORDER BY是全局排序,對計算性能的開銷較大,而且集中在單個Reduce上排序并不能起到分布式處理的效果,所以可以通過DISTRIBUTE BY+SORT BYCLUSTER BY兩種方式來進行數據重排。

注意事項

  • 進行數據重排會占用和消耗計算資源,如果您的實例為按量付費規格,將產生計算費用,請您根據實際情況評估是否通過數據重排方式進行存儲優化。

  • 使用DISTRIBUTE BY+SORT BYCLUSTER BY排序方法進行數據排序前請查看表中數值的分布情況,對列值占比大的列進行重排,存儲優化效果會比較好。

  • 表數據越大,進行數據重排后,存儲優化效果會更好。

使用示例

本文將MaxCompute公共數據集TPC-DS中1 TB規格的customer表分別以DISTRIBUTE BY+SORT BYCLUSTER BY兩種排序方法重排后寫入新的數據表,比較寫入前后表的大小以驗證存儲優化效果,MaxCompute公共數據集TPC-DS詳情請參見TPC-DS數據。步驟如下:

  1. 創建數據接收表。

    使用如下命令創建數據接收表storage_test1storage_test2

    create table if not exists <storage_test1|storage_test2>(
    c_customer_sk bigint,
    c_customer_id char(16),
    c_current_cdemo_sk bigint,
    c_current_hdemo_sk bigint,
    c_current_addr_sk bigint,
    c_first_shipto_date_sk bigint,
    c_first_sales_date_sk bigint,
    c_salutation char(10),
    c_first_name char(20),
    c_last_name char(30),
    c_preferred_cust_flag char(1),
    c_birth_day bigint,
    c_birth_month bigint,
    c_birth_year bigint,
    c_birth_country varchar(20),
    c_login char(13),
    c_email_address char(50),
    c_last_review_date_sk char(10)
    );
  2. 數據重排。

    使用如下命令將TPC-DS公共數據集中customer表的數據排序后寫入到數據接收表。

    說明

    重排前請查看表中數值的分布情況,對列值占比大的列進行重排效果會比較好(customer表中c_email_address字段列值占比較大)。

    • 使用DISTRIBUTE BY+SORT BY方式進行數據重排:

      SET odps.namespace.schema = true;
      insert overwrite table storage_test1 
      select * from bigdata_public_dataset.tpcds_1t.customer 
      distribute by c_email_address 
      sort by c_email_address;
    • 使用CLUSTER BY方式進行重排:

      說明

      使用CLUSTER BY方式進行重排后,可能會出現在部分場景下不支持實時插入數據的情況。

      SET odps.namespace.schema = true;
      insert overwrite table storage_test2 
      select * from bigdata_public_dataset.tpcds_1t.customer 
      cluster by c_email_address;
  3. 數據重排效果驗證。

    使用如下DESC命令,分別查看bigdata_public_dataset.tpcds_1t.customer和數據接收表storage_test1storage_test2的表大小,DESC命令詳情請參見DESC TABLE/VIEW

    • SET odps.namespace.schema = true;
      desc bigdata_public_dataset.tpcds_1t.customer;

      返回表大小為:469939587 bytes。

    • desc storage_test1;

      返回表大小為: 449472614 bytes。

    • desc storage_test2;

      返回表大小為:449565021 bytes。

    使用DISTRIBUTE BY+SORT BY方式重排數據,存儲優化了約4.355%((469939587-449472614)/469939587*100%)。

    使用CLUSTER BY方式重排數據,存儲優化了約4.336%((469939587-449565021)/469939587*100%)。