阿里云数据湖分析(dla) 是一种无服务器大数据查询和分析服务, 它使您能够使用标准 sql 直接查询和分析存储在对象存储服务 (oss) 和表存储实例中的数据语句。
在关系数据库中, 可以对具有大数据量的表进行分区, 以提高查询性能。同样, 您可以使用 dla 中的分区表来分解数据并缩短查询响应时间。
下面以 oss 数据源为例, 说明如何在 dla 中创建和使用分区表。
创建分区表
若要在 dla 中创建分区表, 请使用 partitionedby 运行表创建语句。例如:
CREATE EXTERNAL TABLE tbl3_part
(col1 int, col2 string)
PARTITIONED BY (p string, q string)
STORED AS TEXTFILE
LOCATION 'oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table3/';
oss 实例中分区表的目录结构
dla 可以将 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 修复表命令将分区信息同步到 dla。
MSCK REPAIR TABLE tbl3_part;
成功执行 msck 命令后, 可以运行 show 分区语句来查看表中的所有分区信息。
mysql> show partitions tbl3_part;
+-----------+
| Result |
+-----------+
| p=3/q=3 |
| p=30/q=30 |
+-----------+
查询分区表
查询整个表时, 将获取所有分区中的数据。
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 |
+------+---------+------+------+
在查询过程中, 可以按分区列筛选数据。
mysql> select count(*) from tbl3_part where p='3';
+-------+
| _col0 |
+-------+
| 500 |
+-------+
其他注意事项
- oss 实例中目录的嵌套序列必须与分区表中指定的相应分区列的嵌套序列一致。例如, 对于前面示例中的目录结构, 下表创建语句不正确:
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/';
分区表仅扫描映射到分区列的目录下的数据。对于下面的目录结构, 如果表创建语句中指定的分区列是 p 和 q, 则只有 kv3. txt 是此表的数据文件, 并且 kv1. txt 和 kv2. txt 将被排除。
$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
txt 2018-08-08 14:48 5.68kb 标准 oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table4/p=4/kv2.txt 2018-08-08 14:23:40 5.68kb 标准 oss://oss-jinluo-openanalytics-test/datasets/test/test_partition/table4/p=4/qtisd kv3. txt
要了解更多有关阿里云数据湖分析 (dla) 的信息, 请访问www.alibabacloud.com/products/data-lake-analytics。