PROJECTION
PROJECTION 是 Relation Projection ( RP )的简写,也就是关系投影的概念。
CREATE PROJECTION
创建明细或聚合投影。可通过 WITH PROPERTIES 设置单投影调度、增量构建和其他创建配置;表级刷新配置使用独立的 SET PROJECTION PROPERTIES 语句。
- 语法说明
创建明细 RP
ALTER (VIEW |TABLE) <tablePath>
CREATE RAW PROJECTION [IF NOT EXISTS] <projectionName>
USING
(DISPLAY (field1, field2, ...) | ALL FIELDS)
[PARTITION BY (field1, field2, ...)]
[SORT BY (field1, field2, ...)]
[DISTRIBUTE BY (field1, field2, ...)]
[WITH PROPERTIES ('key': 'value', ...)]
- 使用案例
-- 创建【表】的投影
ALTER TABLE catalogName.schemName.tableName
CREATE RAW PROJECTION projectName
USING
DISPLAY ("cc_call_center_sk", "cc_call_center_id");
-- 创建【视图】的投影
ALTER VIEW catalogName.schemName.tableName
CREATE RAW PROJECTION mv1
USING
DISPLAY ("cc_call_center_sk", "cc_call_center_id");
创建聚合 RP
ALTER VIEW|TABLE <name>
CREATE AGGREGATE PROJECTION [IF NOT EXISTS] <PROJECTION_NAME>
USING
DIMENSIONS (x by day, y)
MEASURES (b (COUNT, MIN, MAX, SUM, APPROXIMATE COUNT DISTINCT)) [PARTITION BY (field1, field2, ...)]
[SORT BY (field1, field2, ...)]
[DISTRIBUTE BY (field1, field2, ...)]
[WITH PROPERTIES ('key': 'value', ...)]
- 使用案例
ALTER TABLE "hive1"."tpcds_1_text"."catalog_sales" CREATE AGGREGATE PROJECTION table_agg_rp
USING DIMENSIONS (cs_bill_customer_sk)
MEASURES (cs_wholesale_cost(MAX, MIN, COUNT, SUM))
WITH PROPERTIES:与创建 API 对齐
Presto、MySQL 两种 SQL 方言的明细和聚合投影创建语句均支持 WITH PROPERTIES。基础字段仍由 DISPLAY、DIMENSIONS、MEASURES、PARTITION BY、SORT BY 指定;其他创建配置通过属性传入。
属性名区分大小写,使用下表中的 Tardis 原生 API 字段名。复杂配置传入 JSON 对象字符串,结构与 API 一致;SQL 字符串中的单引号写为两个单引号,例如 O''Reilly。键和值之间支持 : 或 =。
ALTER VIEW catalog_name.schema_name.view_name
CREATE RAW PROJECTION IF NOT EXISTS rp_name
USING ALL FIELDS
WITH PROPERTIES (
'state': 'ENABLED',
'scheduleConfig': '{"type":"SCHEDULE","cronTab":"0 0 * * * ?","refreshOnEnable":false,"dependUpstreamStatus":true}',
'openStrongDependency': true,
'partitionDataPersistDays': 30,
'properties': '{"autoDetectPartitions":"false"}'
);
创建配置会转换为与 Tardis API 相同的 RPGoal / RPDetails 模型,并进入同一创建服务执行权限及业务校验。表/视图、列、投影类型、增量算子和目标引擎等限制与 API 一致;支持传参不代表任意配置组合都可使用。
| SQL 属性 | 类型 | 对应 Tardis API 字段 / 说明 |
|---|---|---|
id |
字符串 | id;不指定时由服务生成,仅创建时可指定 |
tag |
字符串 | tag |
state |
枚举字符串 | state;通常使用 ENABLED、DISABLED,SQL 默认 ENABLED |
attachType |
枚举字符串 | attachType;当前为 DATASET |
bizCode |
枚举字符串 | bizCode;USER、POLICY、ON_LINE_POLICY,默认 USER |
streaming |
布尔值 | streaming;默认 false |
openStrongDependency |
布尔值 | openStrongDependency;周期强依赖,默认 true |
openDataSeam |
布尔值 | openDataSeam;数据拼接,默认 false,受投影类型限制 |
partitionDataPersistDays |
整数 | partitionDataPersistDays;分区保留天数,默认 -1 |
tableBuildScript |
字符串 | tableBuildScript;保留 API 字段,执行效果取决于对应引擎实现 |
scheduleConfig |
JSON 对象字符串 | scheduleConfig;支持 type、cronTab、refreshOnEnable、dependUpstreamStatus |
incrementalConfigV2 |
JSON 对象字符串 | details.incrementalConfigV2;推荐使用,与 /v2/rp/create 对齐 |
incrementalRefreshConfig |
JSON 对象字符串 | details.incrementalRefreshConfig;旧版配置,与 /v1/rp/create 对齐 |
partitionsReadConfig |
JSON 对象字符串 | details.partitionsReadConfig;支持 enable、partitionColumn、numPartitions |
properties |
JSON 对象字符串 | properties;传入扩展属性,可包含对象、数组、布尔值等 JSON 值 |
scheduleConfig.type 可取 MANUAL(手动)、AUTO(自动)或 SCHEDULE(定时)。未指定调度配置时沿用系统默认行为;只希望控制创建/启用时是否刷新,可以使用下文的 refreshOnEnable 简写。
名称、投影类型和数据集路径由 SQL 主体指定,不能在属性中覆盖。owner、clusterId 来自当前会话,创建和修改时间由服务端生成;这些字段不能通过属性指定。
平台接口 /api/v1/rp 的 incrementalConfig 对应 SQL 的 incrementalConfigV2,partitionConfig 对应 partitionsReadConfig,streamed 对应 streaming;流式启动相关属性通过 properties 传递,具体键值与 Tardis 原生 API 一致。
V2 增量配置示例
ALTER VIEW catalog_name.schema_name.join_view
CREATE RAW PROJECTION rp_incremental
USING ALL FIELDS
WITH PROPERTIES (
'incrementalConfigV2': '{
"incrementalSources": [
{"metadataPath":["catalog_name","schema_name","table_a"],"column":"a_seq","tableSourceColumn":"seq"},
{"metadataPath":["catalog_name","schema_name","table_b"],"column":"b_seq","tableSourceColumn":"seq"}
],
"writeMode":"MERGE",
"allowLeftJoin":false,
"expression":"ON t.a_id = s.a_id AND t.b_id = s.b_id WHEN MATCHED THEN UPDATE SET *",
"errorHandle":"CONTINUE_INSERT"
}',
'refreshOnEnable': false
);
writeMode支持INSERT、MERGE、DELETE_INSERT。incrementalSources中每个增量源使用metadataPath、column、tableSourceColumn描述来源及字段。MERGE可使用expression、errorHandle、allowLeftJoin;LEFT JOIN 的适用限制见投影增量构建。DELETE_INSERT可使用deleteMatchConfig,包含mode(REPLACE_KEYS/AFFECTED_KEY_SQL)、replaceKeys、affectedKeySql,具体组合遵循 API 校验。
原有属性兼容
以下简写继续支持,无需修改已有 SQL:
| 简写属性 | 作用 |
|---|---|
merge、expression、errorHandle |
旧版 incrementalRefreshConfig;merge=true 时必须提供非空 expression,errorHandle 默认 CONTINUE_INSERT,也可用 IGNORE |
writable、partitionColumn、numPartitions |
partitionsReadConfig(其中 writable 映射为 JSON 的 enable);使用简写时,省略项分别为 false、空字符串、0 |
autoDetectPartitions |
properties.autoDetectPartitions;可传布尔值,持久化为布尔字符串 |
refreshOnEnable |
scheduleConfig.refreshOnEnable;创建/启用时是否触发刷新 |
ALTER TABLE catalog_name.schema_name.table_name
CREATE RAW PROJECTION rp_legacy
USING DISPLAY (id, amount)
WITH PROPERTIES (
'merge': true,
'expression': 'ON t.id = s.id WHEN MATCHED THEN UPDATE SET *',
'errorHandle': 'IGNORE',
'writable': true,
'partitionColumn': 'id',
'numPartitions': 8,
'refreshOnEnable': false
);
校验与配置边界
- 未知属性、重复属性、非法布尔值/整数/枚举、无效 JSON,以及结构化配置内的未知字段会报错,不会静默忽略。
properties对象允许业务扩展键。 incrementalConfigV2、incrementalRefreshConfig、旧版merge/expression/errorHandle三种配置方式不能混用。partitionsReadConfig不能与writable/partitionColumn/numPartitions简写混用。- 同一
refreshOnEnable或autoDetectPartitions不能同时在 JSON 对象与简写属性中重复指定。 - JSON 配置值必须为对象,不接受
null或数组作为整个配置;对象内的字段遵循相应 DTO 类型。 ALTER TABLE ... SET PROJECTION PROPERTIES修改的是表级刷新配置,与这里的单投影scheduleConfig、增量配置不同。DISTRIBUTE BY仍是历史保留语法,当前没有对应的 Tardis 创建配置和执行映射;不能用于保证数据分布。本次属性兼容不增加该能力。- Presto 方言的
ALTER RAW/AGGREGATE PROJECTION ... WITH PROPERTIES同样可使用上述配置。未指定的配置保留;指定的结构化配置整体替换,properties按键合并。id不可修改,投影类型、流式类型等其他不可变约束由公共更新服务校验。MySQL 本节仅扩展创建语句。
ALTER PROJECTION
修改投影字段定义。Presto 方言可在语句末尾使用 WITH PROPERTIES 修改单投影配置,未指定的配置保留;字段约束和不可变属性与 API 更新接口一致。
- 语法说明
ALTER RAW PROJECTION 'prpjectionId'
USING
DISPLAY (field1, field2, field3...)
[ PARTITION BY (field1, field2, field3...) ]
[ SORT BY (field1, field2, field...) ]
[ DISTRIBUTE BY (field1, field2, field3...) ]
ALTER AGGREGATE PROJECTION 'prpjectionId'
USING
DIMENSIONS (x by day, y)
MEASURES (b (COUNT, MIN, MAX, SUM, APPROXIMATE COUNT DISTINCT))
[ PARTITION BY (field1, field2, field3...) ]
[ SORT BY (field1, field2, field...) ]
[ DISTRIBUTE BY (field1, field2, field3...) ]
REFRESH PROJECTION
刷新投影数据。
- 语法说明
SHOW PROJECTION
查看表的投影配置
- 语法说明
- 返回结果
PROJECTIONS
查看表或视图下面的投影名称
- 语法说明
- 使用示例
- 返回结果
显示指定表或视图下面的投影列表。
Projection name | Projection Id | Projection Type | Status | Last Update Time
----------------+---------------+-----------------+--------+-------------------
DESC PROJECTION
查看RP详情
- 语法说明
- 返回结果
返回投影定义+投影状态+最近更新时间
对返回结果字段的说明如下。
| 字段名 | 说明 |
|---|---|
| Projection Type | RawAggregate |
| DIMENSIONS | x by day, y |
| MEASURES | b (COUNT, MIN, MAX, SUM, APPROXIMATE COUNT DISTINCT) |
| PARTITION BY | field1 |
| SORT BY | field2 |
| DISTRIBUTE BY | field2 |
| Status | Enabled,开启状态Disabled,关闭状态Error,数据集编辑了之后,Schema Failed的状态 |
| Last Update Time | 2022-09-28 12:00:00 |
ENABLE PROJECTION
开启投影。
- 语法说明
DISABLE PROJECTION
关闭投影。
- 语法说明
DROP PROJECTION
删除投影。
- 语法说明