本文介绍如何创建Lance外部表以及如何通过MaxCompute访问Lance外部表。
Lance是一种AI原生的多模态数据湖格式。MaxCompute支持通过创建Lance外部表与存储于OSS上的Lance表目录建立映射关系,并访问其中的数据。
适用范围
单个文件大小不能超过2GB,如果文件过大,建议拆分。
MaxCompute需要与OSS部署在同一地域。
Lance外部表不支持分区能力
Lance外部表不支持自动跟随lance文件schema变更而调整schema。
不支持对Lance外部表设置cluster属性,不支持设置主键。
不支持对Lance外部表执行UPDATE/DELETE操作。
Lance外部表暂不支持查询回溯历史版本的数据等特性。
创建外部表
语法结构
CREATE EXTERNAL TABLE [if NOT EXISTS] <mc_oss_extable_name>
(
<col_name> <data_type>,
...
)
[COMMENT <table_comment>]
com.aliyun.odps.common.table.lance.LanceStorageHandler
[WITH serdeproperties (
['<property_name>'='<property_value>',...]
)]
LOCATION '<oss_location>'
;参数说明
普通外表需指定Lance Data Schema,即表列名及数据类型信息,且该信息不会随Lance Data Schema evolution自动更新。
普通外表可以指定一个空目录。第一次写数据,按照指定Schema创建Lance Data Schema。
公共参数:公共参数说明请参见基础语法参数说明。
写入数据
MaxCompute写入语法详情,请参见语法说明。
写入 Lance 外部表前,必须执行
SET odps.service.mode=off;关闭在线模式。在线模式下不支持写入。
SET odps.service.mode=off;
-- 追加数据
INSERT INTO <table_name> VALUES (<value_1>, <value_2>, ...);
-- 覆盖写入
INSERT OVERWRITE TABLE <table_name> VALUES (<value_1>, <value_2>, ...);查询分析
其他 DDL
查询建表语句
SHOW CREATE TABLE <table-name>;查看表详情
DESC [EXTENDED] <table-name>;
使用示例
以下示例创建一张 Lance 外部表,写入一行数据并将其查询出来。
在 与 MaxCompute 项目相同地域 的 OSS Bucket 中,准备一个独立目录用于存放 Lance 表,例如 oss://<endpoint>/lancetable-demo/lance_table/image.lance/。
创建外部表
CREATE EXTERNAL TABLE IF NOT EXISTS mc_oss_lance_external
(
id BIGINT COMMENT '行 ID',
name STRING COMMENT '图片文件名',
image BINARY COMMENT '图片内容或描述'
)
COMMENT 'Lance 外部表示例'
STORED BY 'com.aliyun.odps.common.table.lance.LanceStorageHandler'WITH SERDEPROPERTIES (
'odps.properties.rolearn'='acs:ram::<uid>:role/aliyunodpsdefaultrole'
)
LOCATION 'oss://oss-cn-<region>-internal.aliyuncs.com/lancetable-demo/lance_table/image.lance/';写入数据
SET odps.service.mode=off;
INSERT INTO mc_oss_lance_external VALUES (
1,
'test1.jpg',
CAST('今天天气真好,心情很不错!阳光明媚,适合出去散步。' AS BINARY)
);查询数据
SELECT * FROM mc_oss_lance_external;
-- 返回结果如下:
+------------+------------+------------+
| image_id | image_name | image |
+------------+------------+------------+
| 1 | test1.jpg | =20=E4=BB**|
+------------+------------+------------+
-- 通过CAST函数查看
SELECT CAST(image AS STRING) FROM mc_oss_lance_external;
-- 返回结果如下:
+------------+------------+------------+
| image_id | image_name | image |
+------------+------------+------------+
| 1 | test1.jpg | 今天天气真好,心情很不错!阳光明媚,适合出去散步。 |
+------------+------------+------------+支持数据类型
MaxCompute数据类型详情请参见1.0数据类型版本、2.0数据类型版本。
Lance(Arrow) 数据类型 | MaxCompute 数据类型 | 是否支持读 | 是否支持写 |
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
|
| ||
说明 对于普通Lance外表,MaxCompute的TIMESTAMP列写Lance会映射为 |
| ||
| 不支持 | ||
|
| ||
|
| ||
|
| ||
|
|