-- ✅ 推荐:使用SELECT方式
INSERT INTO target_table
SELECT col1, col2, col3 FROM source_table WHERE condition;
-- ✅ 推荐:使用COPY INTO命令
COPY INTO target_table
FROM VOLUME my_volume
USING CSV OPTIONS ('header' = 'true');
UPDATE target_table
SET column_name1 = new_value1 [, column_name2 = new_value2, ...]
[ WHERE condition ]
[ORDER BY ...]
[LIMIT row_count]
2 WHERE条件要求
必要性:强烈建议使用WHERE条件限制更新范围
精确性:使用精确条件避免误操作
复杂查询:支持子查询和表达式
3 批量更新优化
分批处理:使用ORDER BY + LIMIT实现分批更新
确定性:ORDER BY保证更新顺序一致性
性能控制:LIMIT控制单次更新行数
4 安全操作建议
测试验证:生产环境前在测试环境验证
数据备份:重要更新前创建备份
回滚准备:准备数据恢复方案
DELETE语句规范
1 基本语法
DELETE FROM table_name WHERE condition;
2 安全要求
WHERE条件:避免省略WHERE导致全表删除
条件验证:删除前验证条件的准确性
备份保护:重要数据删除前备份
3 性能优化
索引利用:WHERE条件充分利用索引
分区过滤:分区表使用分区列进行过滤
批量删除:大批量删除考虑分批执行
MERGE INTO语句规范
1 基本语法
MERGE INTO target_table USING source_table ON merge_condition
{ WHEN MATCHED [AND matched_condition] THEN matched_action |
WHEN NOT MATCHED [AND not_matched_condition] THEN not_matched_action } ...
2 语句顺序要求
WHEN MATCHED 必须在 WHEN NOT MATCHED 之前
-- ✅ 正确顺序
MERGE INTO target USING source ON target.key = source.key
WHEN MATCHED THEN UPDATE SET target.col1 = source.col1
WHEN NOT MATCHED THEN INSERT (col1, col2) VALUES (source.col1, source.col2);
3 匹配条件设计
唯一性:确保ON条件产生一对一匹配
确定性:避免源表多行匹配目标表同一行
过滤支持:支持AND条件进行额外过滤
4 操作类型
MATCHED操作:UPDATE SET 或 DELETE
NOT MATCHED操作:INSERT语句
条件执行:按指定顺序执行多个WHEN子句
TRUNCATE语句规范
1 基本语法
TRUNCATE TABLE [IF EXISTS] table_name;
2 操作特点
数据清空:删除所有记录但保留表结构
性能优势:比DELETE FROM更高效
不可恢复:操作后数据无法直接恢复
3 使用建议
IF EXISTS:使用IF EXISTS子句避免错误
权限检查:确保具有相应操作权限
备份保护:重要表操作前备份数据
Dynamic Table DML规范
1 参数配置
-- 建议显式启用DML操作
set cz.optimizer.incremental.backfill.enabled=true;
2 支持的操作
-- ✅ 完全支持
INSERT INTO dynamic_table VALUES (1, 'data', 100);
INSERT OVERWRITE dynamic_table SELECT * FROM source;
DELETE FROM dynamic_table WHERE condition;
TRUNCATE TABLE dynamic_table;
-- 使用相对时间查询历史数据
SELECT * FROM table_name
TIMESTAMP AS OF (CURRENT_TIMESTAMP() - INTERVAL '1' HOUR);
-- 使用绝对时间查询(需要精确的时间戳)
SELECT * FROM table_name
TIMESTAMP AS OF '2025-06-18 10:30:45.123';
-- 使用CAST函数指定时区
SELECT * FROM table_name
TIMESTAMP AS OF CAST('2025-06-18 10:30:45 Asia/Shanghai' AS TIMESTAMP);
2 数据恢复操作
表数据恢复
-- 恢复表到指定时间点
RESTORE TABLE table_name TO TIMESTAMP AS OF '2025-06-18 10:30:45';
-- 恢复Dynamic Table
RESTORE DYNAMIC TABLE table_name TO TIMESTAMP AS OF '2025-06-18 10:30:45';
-- 为表启用变更跟踪功能(可选)
ALTER TABLE table_name SET PROPERTIES('change_tracking' = 'true');
创建Table Stream
-- 创建标准模式的Table Stream
CREATE TABLE STREAM stream_name
ON TABLE table_name
WITH PROPERTIES ('TABLE_STREAM_MODE' = 'STANDARD');
-- 创建仅追加模式的Table Stream
CREATE TABLE STREAM stream_name
ON TABLE table_name
WITH PROPERTIES ('TABLE_STREAM_MODE' = 'APPEND_ONLY');
4 数据保留策略
设置数据保留周期
-- 设置Time Travel数据保留周期(单位:天)
ALTER TABLE table_name SET PROPERTIES('data_retention_days' = '7');
-- 设置数据生命周期(自动清理历史数据)
ALTER TABLE table_name SET PROPERTIES('data_lifecycle' = '365');
查询历史加载记录
-- 查看表的历史加载记录
SELECT * FROM load_history('schema.table_name');
系统参数配置
1 DML相关参数
-- Dynamic Table DML启用
set cz.optimizer.incremental.backfill.enabled=true;
-- 小文件自动合并
SET cz.sql.compaction.after.commit = true;
-- 查询标签设置
SET query_tag = 'dml_operation';
-- 会话时区配置
SET timezone = 'Asia/Shanghai';
2 工作空间级别配置
自动索引推荐
-- 启用工作空间级别的自动索引推荐
ALTER WORKSPACE workspace_name SET properties (auto_index='day[,150,5,100]');
参数说明:
day:推荐频率(按天)
150:查询次数阈值
5:查询耗时阈值(秒)
100:索引推荐数量限制
错误处理指南
1 常见错误类型
数据类型转换错误
错误信息:implicit cast not allowed for 'colX': string not null to date/timestamp/json/binary
解决方案:使用正确的类型前缀语法
分区数量超限错误
错误信息:The count of dynamic partitions exceeds the maximum number 2048
解决方案:分批导入或优化分区策略
MERGE语句顺序错误
错误信息:Syntax error at or near 'WHEN'
解决方案:调整WHEN子句顺序
Dynamic Table UPDATE限制
错误信息:Not support hidden column :MV__KEY
解决方案:使用DELETE + INSERT替代UPDATE
2 性能诊断
-- 查询执行计划
EXPLAIN SELECT * FROM table_name WHERE condition;
-- 分区信息检查
SHOW PARTITIONS EXTENDED table_name;
最佳实践
1 数据类型使用规范
数据类型
前缀要求
语法示例
DATE
必须
date'2023-12-25'
date'2023-12-25'
TIMESTAMP
必须
timestamp'2023-12-25 15:30:45'
timestamp'2023-12-25 15:30:45'
JSON
必须
json'{"key": "value"}'
json'{"key": "value"}'
BINARY
必须
X'48656C6C6F'
X'48656C6C6F'
BIGINT
可选
1
1
或
1l
1l
DECIMAL
可选
99.99
99.99
或
99.99bd
99.99bd
FLOAT
可选
89.5
89.5
或
89.5f
89.5f
DOUBLE
可选
3.14
3.14
或
3.14d
3.14d
2 INSERT语句模板
-- 推荐的大量数据导入
INSERT INTO target_table
SELECT col1, col2, col3 FROM source_table WHERE condition;
-- 类型安全的VALUES插入
INSERT INTO table_name (
bigint_col, decimal_col, date_col,
timestamp_col, json_col, binary_col
) VALUES (
1, 99.99, date'2023-12-25',
timestamp'2023-12-25 15:30:45',
json'{"key": "value"}', X'48656C6C6F'
);
3 MERGE语句模板
MERGE INTO target_table AS target
USING source_table AS source
ON target.key_column = source.key_column
WHEN MATCHED THEN
UPDATE SET target.col1 = source.col1, target.col2 = source.col2
WHEN NOT MATCHED THEN
INSERT (key_column, col1, col2)
VALUES (source.key_column, source.col1, source.col2);
4 Dynamic Table DML模板
-- 会话配置
set cz.optimizer.incremental.backfill.enabled=true;
-- 支持的操作
INSERT INTO dynamic_table VALUES (1, 'data', 100);
DELETE FROM dynamic_table WHERE condition;
-- 替代UPDATE的方案
DELETE FROM dynamic_table WHERE key_column = target_value;
INSERT INTO dynamic_table VALUES (new_key, new_col1, new_col2);
5 安全操作原则
测试先行:生产环境操作前完成测试验证
备份保护:重要数据操作前创建备份
权限最小化:使用最小必要权限执行操作
条件精确:WHERE条件精确限制操作范围
监控审计:记录重要DML操作的执行日志
6 性能优化原则
批量优先:优先使用批量操作提高效率
索引利用:充分利用索引加速查询和DML
分区过滤:利用分区剪枝减少数据扫描
资源管理:合理配置计算资源和并发度
文件管理:定期执行小文件合并优化
6 版本控制和数据恢复原则
数据保留设置:根据业务需求合理设置数据保留周期
变更跟踪启用:对重要表启用变更跟踪便于数据审计
定期检查历史:定期查看表操作历史发现异常操作
恢复操作验证:数据恢复前在测试环境验证恢复效果
Time Travel 查询:使用相对时间查询避免时区问题
7 Table Stream 使用原则
-- 推荐的Stream创建和使用模式
-- 1. 启用变更跟踪
ALTER TABLE source_table SET PROPERTIES('change_tracking' = 'true');
-- 2. 创建Stream
CREATE TABLE STREAM change_stream
ON TABLE source_table
WITH PROPERTIES ('TABLE_STREAM_MODE' = 'STANDARD');
-- 3. 查询变更数据
SELECT * FROM change_stream WHERE cz_stream_action IN ('INSERT', 'UPDATE', 'DELETE');
8 历史版本和数据恢复模板
-- 查看表历史
DESCRIBE HISTORY table_name;
-- Time Travel查询
SELECT * FROM table_name
TIMESTAMP AS OF (CURRENT_TIMESTAMP() - INTERVAL '1' HOUR);
-- 数据恢复
RESTORE TABLE table_name TO TIMESTAMP AS OF '20<https://j4vjdq19vx.x.topthink.com/#>25-06-18 10:30:45';
-- 恢复删除的表
UNDROP TABLE table_name;
-- 启用变更跟踪
ALTER TABLE table_name SET PROPERTIES('change_tracking' = 'true');
-- 创建Table Stream
CREATE TABLE STREAM stream_name
ON TABLE table_name
WITH PROPERTIES ('TABLE_STREAM_MODE' = 'STANDARD');
-- 设置数据保留周期
ALTER TABLE table_name SET PROPERTIES('data_retention_days' = '7');