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

創建分區表

通常在關系型數據庫中為提高查詢性能,會對大數據量的表進行分區。同樣,在DLA中您也可以使用分區表對OSS、Tablestore中的數據進行細化處理,縮短查詢響應時間。本文檔以OSS數據為例,介紹如何通過DLA創建、使用和管理分區表。

分區表與OSS目錄的關系

在DLA中,可以將存儲在OSS中的目錄或文件映射成一張分區表,表中的數據是OSS的文件內容,分區列對應OSS中的目錄,該目錄需遵守以下命名規則:

  • 分區列對應表的LOCATION下的一個子目錄,目錄的命名規則為分區列名=分區列值

  • 如果有多個分區列,則需要按照建表語句中指定的分區列順序依次嵌套。

例如,以下是OSS中的目錄結構:

https://bucket-name.oss-cn-hangzhou.aliyuncs.com/dla/y=2018/m=12/kv2.txt
https://bucket-name.oss-cn-hangzhou.aliyuncs.com/dla/y=2019/m=2/kv1.txt

針對上述OSS目錄結構,在DLA中創建分區表時,有兩個分區列分別為y(年份)和m(月份)。

CREATE EXTERNAL TABLE dla (
    prod_name string,
    cnt bigint)
PARTITIONED BY (y string, m string)
STORED AS TEXTFILE
LOCATION 'oss://oss-bucket-name/dla/';

注意事項

在DLA中創建和使用OSS分區表時,以下注意事項需要您知曉:

  • OSS中分區列的目錄結構嵌套順序應與表中定義的順序一致。

    針對上述OSS目錄結構,以下創建分區表的語句為錯誤語句。

      CREATE EXTERNAL TABLE dla (
          prod_name string,
          cnt bigint)
      PARTITIONED BY (m string, y string)
      STORED AS TEXTFILE
      LOCATION 'oss://bucket-name/dla/';
  • 分區表只會掃描分區列所在目錄下的數據。

    對于以下目錄結構,如果建表語句中指定的分區列為y和m,則通過分區表只能查詢kv3.txt中的數據,無法查詢kv4.txt中的數據。

      https://bucket-name.oss-cn-hangzhou.aliyuncs.com/dla/y=2019/m=3/kv3.txt
      https://bucket-name.oss-cn-hangzhou.aliyuncs.com/dla/kv4.txt

前提條件

在DLA中創建和使用OSS分區表時,需要通過以下操作在OSS中準備測試數據:

  1. 開通OSS服務,請參見開通OSS服務

  2. 創建存儲空間,請參見創建存儲空間

  3. 按照分區列名=分區列值規則新建目錄,請參見新建目錄

  4. 上傳文件數據,請參見上傳文件數據

步驟一:創建Schema

  1. 登錄DLA控制臺

  2. 單擊左側導航欄的SQL訪問點,然后單擊登錄DMS,執行以下SQL創建OSS Schema。

    您也可以通過MySQL客戶端或者程序代碼等方式連接DLA,然后執行以下SQL創建OSS Schema。

     CREATE SCHEMA dla_oss_db with DBPROPERTIES(
      catalog='oss',
      location= 'oss://oss-bucket-name/dla/'
      );
  • catalog:指定創建的Schema類型為OSS。

  • location:文件所在的OSS Bucket目錄,需以/結尾。

步驟二:創建分區表

在DLA中執行以下SQL創建為OSS文件創建分區表。

CREATE EXTERNAL TABLE dla (
    prod_name string,
    cnt bigint)
PARTITIONED BY (y string, m string)
STORED AS TEXTFILE
LOCATION 'oss://oss-bucket-name/dla/';

步驟三:使用MSCK命令更新分區信息

分區表創建成功后,需要執行MSCK REPAIR TABLE將分區信息同步到DLA中。

MSCK REPAIR TABLE dla;
注意
  • MSCK命令只能識別符合DLA分區列命名規則的目錄,即分區列的目錄名為分區列名=分區列值

  • 當分區表對應的OSS目錄發生變化時,需重新執行MSCK命令,DLA根據OSS中當前分區值自動同步分區信息。

MSCK命令執行成功后,返回以下提示信息。

Repair: Added partition to metastore dla_oss_db.dla:y=2018/m=12
Repair: Added partition to metastore dla_oss_db.dla:y=2019/m=2

步驟四:使用SHOW PARTITIONS命令查看分區信息

MSCK執行成功后,可以通過SHOW PARTITIONS查看分區表中所有的分區信息。

show partitions dla;
+-----------+
| y=2018/m=12|
| y=2019/m=2 |

步驟五:查詢分區表數據

select count(*) from dla;
+-------+
| _col0 |
+-------+
|  4    |
select * from dla;
+---------------------------+
|prod_name | cnt | y  |  m  |
+---------------------------+
|顯示器    | 2   |2019 |  2  |
|硬盤      | 6   |2018 |  12 |
|鍵盤      | 3   |2018 |  12 |
|鼠標      | 1   |2019 |  2  |

可以使用分區列作為查詢過濾條件:

select * from dla where y='2019';
+---------------------------+
|prod_name | cnt | y  |  m  |
+---------------------------+
|顯示器    | 2   |2019 |  2  |
|鼠標      | 1   |2019 |  2  |

管理分區

  • 同步分區信息

    當OSS中的分區目錄發生變化,例如OSS中新增分區目錄時,執行MSCK命令使分區生效。

      MSCK REPAIR TABLE table_name;
  • 添加分區

      ALTER TABLE table_name ADD [IF NOT EXISTS] PARTITION partition_spec [LOCATION 'location'][, PARTITION partition_spec [LOCATION 'location'], ...];
       partition_spec:
        : (partition_column = partition_col_value, partition_column = partition_col_value, ...)

    可以一次添加多個分區,分區之間用逗號分隔。

      ALTER TABLE order_part ADD 
          PARTITION (dt='2008-08-08', status='ready') location '/path/to/ready/part080808',
          PARTITION (dt='2008-08-09', status='new') location '/path/to/new/part080809';
    注意

    新增分區時可以使用IF NOT EXISTS判斷分區是否存在,若新增分區已存在,則新的LOCATION會覆蓋原有分區所指向的目錄。

  • 刪除分區

      ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...];

    可以一次刪除多個分區,分區之間以英文逗號(,)分隔。

      ALTER TABLE order_part DROP
          PARTITION (dt='2008-08-08', status='ready');
    注意
    • 目前只支持以分區列名=分區列值刪除指定分區,不支持以表達式方式,例如partitionCol > 100指定分區值。

    • 如果已經刪除的分區目錄符合分區命名規則即分區列名=分區列值,則執行MSCK命令將自動添加已經刪除的分區。