日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

如何使用Data Lake Analytics创建分区表

發(fā)布時(shí)間:2025/3/18 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用Data Lake Analytics创建分区表 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

Data Lake Analytics (后文簡(jiǎn)稱DLA)提供了無(wú)服務(wù)化的大數(shù)據(jù)分析服務(wù),幫助用戶通過標(biāo)準(zhǔn)的SQL語(yǔ)句直接對(duì)存儲(chǔ)在OSS、TableStore上的數(shù)據(jù)進(jìn)行查詢分析。

在關(guān)系型數(shù)據(jù)庫(kù)中,用戶可以對(duì)大數(shù)據(jù)量的表進(jìn)行分區(qū),提高查詢的性能。同樣在DLA中,用戶可以使用分區(qū)表將數(shù)據(jù)進(jìn)行細(xì)化,達(dá)到縮短查詢響應(yīng)時(shí)間的目的。

本文將以O(shè)SS數(shù)據(jù)源為例,詳細(xì)介紹如何在DLA中創(chuàng)建和使用分區(qū)表。

創(chuàng)建分區(qū)表

在DLA中,創(chuàng)建一張分區(qū)表需要在建表語(yǔ)句中指定 PARTITIONED BY, 例如
創(chuàng)建一張名為tbl3_part的分區(qū)表,該表有兩個(gè)分區(qū)列,分別為p和q。

CREATE EXTERNAL TABLE tbl3_part (foo int, bar string) PARTITIONED BY (p string, q string) STORED AS TEXTFILE LOCATION 'oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table3/'; 復(fù)制代碼

分區(qū)表在OSS上的目錄結(jié)構(gòu)

DLA可以將存儲(chǔ)在OSS上的目錄或文件映射成一張表。表中的數(shù)據(jù)就是OSS中的文件內(nèi)容。

對(duì)于分區(qū)表來說,分區(qū)列對(duì)應(yīng)OSS上的目錄,而且是有特殊命名規(guī)則的目錄:

  • 分區(qū)列對(duì)應(yīng)表的LOCATION下的一個(gè)子目錄,目錄的命名規(guī)則為 分區(qū)列名=分區(qū)值
  • 如果有多個(gè)分區(qū)列,則需要按照建表語(yǔ)句中指定的分區(qū)列的順序依次嵌套
  • 對(duì)于上面例子中的建表語(yǔ)句,OSS上的目錄結(jié)構(gòu)為:

    $osscmd ls oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table3 prefix list is: object list is: 2018-08-08 14:23:17 5.68KB Standard oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table3/p=3/q=3/kv1.txt 2018-08-08 18:01:08 5.68KB Standard oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table3/p=30/q=30/kv1.txt 復(fù)制代碼

    使用MSCK命令更新分區(qū)信息

    建表成功后,需要執(zhí)行 MSCK REPAIR TABLE 命令,將分區(qū)信息同步到DLA中。

    MSCK REPAIR TABLE tbl3_part; 復(fù)制代碼

    執(zhí)行MSCK成功后,通過 SHOW PARTITIONS 語(yǔ)句可以看到表中所有的分區(qū)信息。

    mysql> show partitions tbl3_part; +-----------+ | Result | +-----------+ | p=3/q=3 | | p=30/q=30 | +-----------+ 復(fù)制代碼

    MSCK只能識(shí)別符合DLA分區(qū)列命名規(guī)則的目錄,即分區(qū)列的目錄名為 分區(qū)列名=分區(qū)列值。
    因此,當(dāng)OSS上的分區(qū)目錄發(fā)上變化時(shí),執(zhí)行MSCK命令,DLA可以根據(jù)OSS中當(dāng)前分區(qū)值信息自動(dòng)同步。

    使用ALTER命令添加/刪除分區(qū)

    對(duì)于已經(jīng)存在的但是不滿足DLA分區(qū)列命名規(guī)則的目錄,用戶可以通過 ALTER命令更新表的分區(qū)信息。

    添加分區(qū)

    語(yǔ)法:

    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, ...) 復(fù)制代碼

    可以一次指定添加多個(gè)分區(qū),分區(qū)之間用逗號(hào)分隔。
    示例,

    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'; 復(fù)制代碼

    對(duì)于上面的語(yǔ)句,

  • 如果新增的分區(qū)已經(jīng)存在,則執(zhí)行失敗,報(bào)錯(cuò) "Partition already exists";
  • 如果使用了 [IF NOT EXISTS], 當(dāng)新增分區(qū)已存在時(shí),執(zhí)行不會(huì)報(bào)錯(cuò),新的LOCATION會(huì)覆蓋掉原有分區(qū)所指向的目錄;
  • 刪除分區(qū)

    語(yǔ)法:

    ALTER TABLE table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]; 復(fù)制代碼

    可以一次指定刪除多個(gè)分區(qū),分區(qū)之間用逗號(hào)分隔。
    示例,

    ALTER TABLE order_part DROPPARTITION (dt='2008-08-08', status='ready'); 復(fù)制代碼

    對(duì)于上面的語(yǔ)句,

  • 如果刪除的分區(qū)不存在,執(zhí)行不會(huì)報(bào)錯(cuò);
  • 如果使用了 [IF EXISTS], 當(dāng)刪除分區(qū)不存在時(shí),執(zhí)行不會(huì)報(bào)錯(cuò);
  • DROP 分區(qū)目前只支持 "分區(qū)列=分區(qū)值" 的指定方式。不支持分區(qū)值是一個(gè)表達(dá)式,比如 partitionCol > 100;
  • 如果刪除的分區(qū)目錄名符合 分區(qū)列名=分區(qū)列值 的命名規(guī)則,執(zhí)行MSCK命令仍會(huì)將已經(jīng)刪除的分區(qū)自動(dòng)添加。
  • 分區(qū)表查詢

    全表查詢時(shí),得到的是所有分區(qū)下的數(shù)據(jù)。

    mysql> select count(*) from tbl3_part; +-------+ | _col0 | +-------+ | 1000 | +-------+ 復(fù)制代碼

    當(dāng)執(zhí)行 SELECT * 時(shí),可以發(fā)現(xiàn)分區(qū)列將以列的形式出現(xiàn)在表中定義的數(shù)據(jù)列的后面。

    mysql> select * from tbl3_part limit 3; +------+---------+------+------+ | foo | bar | p | q | +------+---------+------+------+ | 238 | val_238 | 3 | 3 | | 86 | val_86 | 3 | 3 | | 311 | val_311 | 3 | 3 | +------+---------+------+------+ 復(fù)制代碼

    查詢時(shí)可以使用分區(qū)列做filter

    mysql> select count(*) from tbl3_part where p='3'; +-------+ | _col0 | +-------+ | 500 | +-------+ 復(fù)制代碼

    注意事項(xiàng)

  • OSS上分區(qū)列的目錄結(jié)構(gòu)的嵌套順序需要與表中定義的順序一致
    比如 對(duì)于本文例子中的目錄結(jié)構(gòu),下面的建表語(yǔ)句是錯(cuò)誤的。
  • CREATE EXTERNAL TABLE tbl3_part (col1 int, col2 string) PARTITIONED BY (q string, p string) STORED AS TEXTFILE LOCATION 'oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table3/'; 復(fù)制代碼
  • 分區(qū)表只會(huì)掃描分區(qū)列所在目錄下的數(shù)據(jù).
    對(duì)于下面的目錄結(jié)構(gòu)
  • $osscmd ls oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table4/ prefix list is: object list is: 2018-08-08 14:23:56 5.68KB Standard oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table4/kv1.txt 2018-08-08 14:23:48 5.68KB Standard oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table4/p=4/kv2.txt 2018-08-08 14:23:40 5.68KB Standard oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table4/p=4/q=4/kv3.txt 復(fù)制代碼

    如果建表語(yǔ)句中指定的分區(qū)列為 p 和 q,則該表的數(shù)據(jù)文件只有 kv3.txt.
    數(shù)據(jù)文件 kv1.txt 和 kv2.txt 將不會(huì)被計(jì)算在內(nèi)。

  • 如果有新增的OSS分區(qū)目錄,則需要手動(dòng)執(zhí)行 MSCK REPAIR TABLE table_name 命令或者ALTER ADD PARTITION命令使其生效,再進(jìn)行查詢。


  • 本文作者:金絡(luò)

    原文鏈接

    本文為云棲社區(qū)原創(chuàng)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。


    轉(zhuǎn)載于:https://juejin.im/post/5c9de055f265da30dd30f3d3

    總結(jié)

    以上是生活随笔為你收集整理的如何使用Data Lake Analytics创建分区表的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。