针对带有分区的Parquet/CSV数据文件创建OSS外表

有的OSS数据源是包含分区的,会在OSS上形成一个分层目录,类似如下内容:parquet_partition_classic/

├── p1=2020-01-01

│   ├── p2=4

│   │   ├── p3=SHANGHAI

│   │   │   ├── 000000_0

│   │   │   └── 000000_1

│   │   └── p3=SHENZHEN

│   │   └── 000000_0

│   └── p2=6

│   └── p3=SHENZHEN

│   └── 000000_0

├── p1=2020-01-02

│   └── p2=8

│   ├── p3=SHANGHAI

│   │   └── 000000_0

│   └── p3=SHENZHEN

│   └── 000000_0

└── p1=2020-01-03

└── p2=6

├── p2=HANGZHOU

└── p3=SHENZHEN

└── 000000_0

上述数据中p1为第1级分区,p2为第2级分区,p3为第3级分区。对应这种数据源,一般都希望以分区的模式进行查询,那么就需要在创建OSS外表时额外指明分区列。具体的建表语法示例如下(本例为Parquet格式,分区也支持CSV格式):CREATE TABLE IF NOT EXISTS oss_parquet_partition_table

(

uid varchar,

other varchar,

p1 date,

p2 int,

p3 varchar

)

ENGINE='OSS'

TABLE_PROPERTIES='{

"endpoint":"oss-xxxx.aliyuncs.com",

"url":"oss://****/****/oss_parquet_data_dir",

"accessid":"****",

"accesskey":"****",

"format":"parquet",

"partition_column":"p1, p2, p3"

}'

说明

如上例所示,除了在table的列定义中声明p1、p2、p3及其类型,还需要在TABLE_PROPERTIES部分中的partition_column属性里声明它们为分区列。且partition_column属性里必须按“第1级, 第2级, 第3级......”的严格顺序声明(例中p1为第1级分区,p2为第2级分区,p3为第3级分区),在列定义中也需保持相同顺序,并将分区列置于列定义列表的末尾。

可以作为分区列的数据类型有:boolean、tinyint、smallint、int/integer、bigint、float、double、decimal、varchar/string、date、timestamp。

查询时分区列和其它数据列的表现和用法没有区别。

Logo

一站式 AI 云服务平台

更多推荐