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

CLONE TABLE

CLONE TABLE支持高效地將源表數據復制到目標表中,適用于表數據遷移場景。本文以具體示例為您介紹CLONE TABLE功能的使用。

使用限制

  • 目標表與源表的Schema需要兼容。

  • 支持分區表和非分區表,支持對聚簇表使用CLONE TABLE命令復制表數據。

  • 目標表已存在時,一次性復制分區的數量上限為10000個。

  • 目標表不存在時,無分區數量限制,滿足原子性。

  • 不支持在跨地域的MaxCompute項目之間使用CLONE TABLE命令復制表數據。

  • 不支持對外部表使用CLONE TABLE命令復制表數據。

命令格式

CLONE TABLE <[<src_project_name>.]<src_table_name>> [PARTITION(<pt_spec>), ...]
 TO <[<dest_project_name>.]<dest_table_name>> [IF EXISTS [OVERWRITE | IGNORE]] ;

參數介紹如下表所示。

參數

是否必填

說明

src_project_name

源表所屬MaxCompute項目名稱。不指定時,默認為當前項目。當源表與目標表不屬于同一個MaxCompute項目時,需要攜帶此參數。

src_table_name

源表名稱。

pt_spec

源表的分區信息。格式為:(partition_col1 = partition_col_value1, partition_col2 = partition_col_value2, ...)。其中partition_col是分區字段,partition_col_value是分區值。

dest_project_name

目標表所屬MaxCompute項目名稱。不指定時,默認為當前項目。當目標表與源表不屬于同一個MaxCompute項目時,需要攜帶此參數。

dest_table_name

目標表名稱。

  • 當目標表不存在時,CLONE TABLE命令會創建目標表,創建目標表使用的是CREATE TABLE LIKE語義。更多CREATE TABLE LIKE信息,請參見創建和刪除表

  • 當目標表已存在并指定IF EXISTS OVERWRITE時,CLONE TABLE命令會覆蓋目標表或對應分區的數據。

  • 當目標表已存在并指定IF EXISTS IGNORE時,CLONE TABLE命令會跳過已存在分區,不會覆蓋目標表已有分區的數據。

示例數據

為便于理解,本文為您提供源數據,基于源數據提供相關示例。創建分區表sale_detail和非分區表sale_detail_np,并添加數據,命令示例如下:

  • 分區表sale_detail

    --創建一張分區表sale_detail。
    CREATE TABLE IF NOT EXISTS sale_detail
    (
    shop_name     string,
    customer_id   string,
    total_price   double
    )
    PARTITIONED BY (sale_date string, region string);
    
    --向源表增加分區。
    ALTER TABLE sale_detail ADD PARTITION (sale_date='2013', region='china') PARTITION (sale_date='2014', region='shanghai');
    
    --向源表追加數據。
    INSERT INTO sale_detail PARTITION (sale_date='2013', region='china') VALUES ('s1','c1',100.1),('s2','c2',100.2),('s3','c3',100.3);
    INSERT INTO sale_detail PARTITION (sale_date='2014', region='shanghai') VALUES ('null','c5',null),('s6','c6',100.4),('s7','c7',100.5);

    查詢分區表sale_detail中的數據,命令示例如下:

    --開啟全表掃描,僅此Session有效。執行select語句查看表sale_detail中的數據。
    SET odps.sql.allow.fullscan=true; 
    SELECT * FROM sale_detail;

    返回結果如下。

    --返回結果。
    +------------+-------------+-------------+------------+------------+
    | shop_name  | customer_id | total_price | sale_date  | region     |
    +------------+-------------+-------------+------------+------------+
    | s1         | c1          | 100.1       | 2013       | china      |
    | s2         | c2          | 100.2       | 2013       | china      |
    | s3         | c3          | 100.3       | 2013       | china      |
    | null       | c5          | NULL        | 2014       | shanghai   |
    | s6         | c6          | 100.4       | 2014       | shanghai   |
    | s7         | c7          | 100.5       | 2014       | shanghai   |
    +------------+-------------+-------------+------------+------------+
  • 非分區表sale_detail_np

    --創建一張非分區表sale_detail_np。
    CREATE TABLE IF NOT EXISTS sale_detail_np
    (
    shop_name     string,
    customer_id   string,
    total_price   double
    );
    
    --向源表追加數據。
    INSERT INTO sale_detail_np VALUES ('s4','c4',100.4);

    查詢非分區表sale_detail_np中的數據,命令示例如下:

    SELECT * FROM sale_detail_np;

    返回結果如下。

    --返回結果。
    +------------+-------------+-------------+
    | shop_name  | customer_id | total_price |
    +------------+-------------+-------------+
    | s4         | c4          | 100.4       |
    +------------+-------------+-------------+

使用示例

基于示例數據,CLONE TABLE命令的使用示例如下:

  • 示例1:全量復制非分區表sale_detail_np的數據至目標表sale_detail_np_clone。命令示例如下:

    --復制表數據。
    CLONE TABLE sale_detail_np TO sale_detail_np_clone;
    --查看復制后目標表sale_detail_np_clone的信息,驗證數據準確性。
    SELECT * FROM sale_detail_np_clone;

    返回結果如下。

    --返回結果。
    +------------+-------------+-------------+
    | shop_name  | customer_id | total_price |
    +------------+-------------+-------------+
    | s4         | c4          | 100.4       |
    +------------+-------------+-------------+
  • 示例2:復制分區表sale_detail指定分區的數據至目標表sale_detail_clone。命令示例如下:

    -- 復制表數據
    CLONE TABLE sale_detail PARTITION (sale_date='2013', region='china') TO sale_detail_clone IF EXISTS OVERWRITE;
    --開啟全表掃描,執行select語句查看復制后目標表sale_detail_clone的信息,驗證數據準確性。
    SET odps.sql.allow.fullscan=true;
    SELECT * FROM sale_detail_clone;

    返回結果如下。

    --返回結果。
    +------------+-------------+-------------+------------+------------+
    | shop_name  | customer_id | total_price | sale_date  | region     |
    +------------+-------------+-------------+------------+------------+
    | s1         | c1          | 100.1       | 2013       | china      |
    | s2         | c2          | 100.2       | 2013       | china      |
    | s3         | c3          | 100.3       | 2013       | china      |
    +------------+-------------+-------------+------------+------------+
  • 示例3:全量復制分區表sale_detail的數據至目標表sale_detail_clone(示例2已生成的表)并跳過目標表中已存在的分區。命令示例如下:

    --復制表數據。
    CLONE TABLE sale_detail TO sale_detail_clone IF EXISTS IGNORE;
    --查看復制后目標表sale_detail_clone的信息,驗證數據準確性。
    --開啟全表掃描,僅此Session有效。執行select語句查看表sale_detail_clone中的數據。
    SET odps.sql.allow.fullscan=true; 
    SELECT * FROM sale_detail_clone;
    --返回結果。
    +------------+-------------+-------------+------------+------------+
    | shop_name  | customer_id | total_price | sale_date  | region     |
    +------------+-------------+-------------+------------+------------+
    | s1         | c1          | 100.1       | 2013       | china      |
    | s2         | c2          | 100.2       | 2013       | china      |
    | s3         | c3          | 100.3       | 2013       | china      |
    | null       | c5          | NULL        | 2014       | shanghai   |
    | s6         | c6          | 100.4       | 2014       | shanghai   |
    | s7         | c7          | 100.5       | 2014       | shanghai   |
    +------------+-------------+-------------+------------+------------+
  • 示例4:全量復制分區表sale_detail的數據至目標表sale_detail_clone1。命令示例如下:

    --復制表數據。
    CLONE TABLE sale_detail TO sale_detail_clone1;
    --開啟全表掃描,執行select語句查看復制后目標表sale_detail_clone1的信息,驗證數據準確性。
    SET odps.sql.allow.fullscan=true; 
    SELECT * FROM sale_detail_clone1;

    返回結果如下。

    --返回結果。
    +------------+-------------+-------------+------------+------------+
    | shop_name  | customer_id | total_price | sale_date  | region     |
    +------------+-------------+-------------+------------+------------+
    | s1         | c1          | 100.1       | 2013       | china      |
    | s2         | c2          | 100.2       | 2013       | china      |
    | s3         | c3          | 100.3       | 2013       | china      |
    | null       | c5          | NULL        | 2014       | shanghai   |
    | s6         | c6          | 100.4       | 2014       | shanghai   |
    | s7         | c7          | 100.5       | 2014       | shanghai   |
    +------------+-------------+-------------+------------+------------+
  • 示例5:克隆Delta Table表

    • 克隆Delta Table非分區表

      CLONE TABLE mf_dt TO new_table;
    • 克隆Delta Table分區表

      CLONE TABLE mf_dt2 PARTITION (dd='01', hh='01') TO new_table;

最佳實踐

實現同Region的MaxCompute項目數據遷移請參見使用CLONE TABLE實現同地域MaxCompute跨項目數據遷移