如何使用Data Lake Analytics创建分区表
前言
Data Lake Analytics (后文簡稱DLA)提供了無服務化的大數據分析服務,幫助用戶通過標準的SQL語句直接對存儲在OSS、TableStore上的數據進行查詢分析。
在關系型數據庫中,用戶可以對大數據量的表進行分區,提高查詢的性能。同樣在DLA中,用戶可以使用分區表將數據進行細化,達到縮短查詢響應時間的目的。
本文將以OSS數據源為例,詳細介紹如何在DLA中創建和使用分區表。
創建分區表
在DLA中,創建一張分區表需要在建表語句中指定 PARTITIONED BY, 例如
創建一張名為tbl3_part的分區表,該表有兩個分區列,分別為p和q。
分區表在OSS上的目錄結構
DLA可以將存儲在OSS上的目錄或文件映射成一張表。表中的數據就是OSS中的文件內容。
對于分區表來說,分區列對應OSS上的目錄,而且是有特殊命名規則的目錄:
對于上面例子中的建表語句,OSS上的目錄結構為:
$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 復制代碼使用MSCK命令更新分區信息
建表成功后,需要執行 MSCK REPAIR TABLE 命令,將分區信息同步到DLA中。
MSCK REPAIR TABLE tbl3_part; 復制代碼執行MSCK成功后,通過 SHOW PARTITIONS 語句可以看到表中所有的分區信息。
mysql> show partitions tbl3_part; +-----------+ | Result | +-----------+ | p=3/q=3 | | p=30/q=30 | +-----------+ 復制代碼MSCK只能識別符合DLA分區列命名規則的目錄,即分區列的目錄名為 分區列名=分區列值。
因此,當OSS上的分區目錄發上變化時,執行MSCK命令,DLA可以根據OSS中當前分區值信息自動同步。
使用ALTER命令添加/刪除分區
對于已經存在的但是不滿足DLA分區列命名規則的目錄,用戶可以通過 ALTER命令更新表的分區信息。
添加分區
語法:
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 table_name DROP [IF EXISTS] PARTITION partition_spec[, PARTITION partition_spec, ...]; 復制代碼可以一次指定刪除多個分區,分區之間用逗號分隔。
示例,
對于上面的語句,
分區表查詢
全表查詢時,得到的是所有分區下的數據。
mysql> select count(*) from tbl3_part; +-------+ | _col0 | +-------+ | 1000 | +-------+ 復制代碼當執行 SELECT * 時,可以發現分區列將以列的形式出現在表中定義的數據列的后面。
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 | +------+---------+------+------+ 復制代碼查詢時可以使用分區列做filter
mysql> select count(*) from tbl3_part where p='3'; +-------+ | _col0 | +-------+ | 500 | +-------+ 復制代碼注意事項
比如 對于本文例子中的目錄結構,下面的建表語句是錯誤的。
對于下面的目錄結構
如果建表語句中指定的分區列為 p 和 q,則該表的數據文件只有 kv3.txt.
數據文件 kv1.txt 和 kv2.txt 將不會被計算在內。
原文鏈接
本文為云棲社區原創內容,未經允許不得轉載。
轉載于:https://juejin.im/post/5c9de055f265da30dd30f3d3
總結
以上是生活随笔為你收集整理的如何使用Data Lake Analytics创建分区表的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5 新增属性了解
- 下一篇: 一个suse11 sp1的crash工具