终极AI自瞄指南:基于YOLOv8的智能瞄准解决方案
2026/6/9 22:14:37
ALTER 用来修改已经注册到 Catalog 里的对象定义,包括:
ALTER TABLEALTER VIEWALTER DATABASEALTER FUNCTIONALTER CATALOGALTER MODEL核心价值:让你在不重建对象的情况下,完成schema 演进、主键/水位线调整、属性参数更新、重命名等操作。
在 Java 中直接用TableEnvironment.executeSql()执行 ALTER,成功返回OK,失败抛异常。
EnvironmentSettingssettings=EnvironmentSettings.newInstance()...TableEnvironmenttableEnv=TableEnvironment.create(settings);tableEnv.executeSql("CREATE TABLE Orders (`user` BIGINT, product STRING, amount INT) WITH (...)");// 1) 在第一列位置新增字段tableEnv.executeSql("ALTER TABLE Orders ADD `order` INT COMMENT 'order identifier' FIRST");// 2) 一次性新增多个组件:列、主键、水位线、列位置tableEnv.executeSql("ALTER TABLE Orders ADD ("+" ts TIMESTAMP(3), "+" category STRING AFTER product, "+" PRIMARY KEY(`order`) NOT ENFORCED, "+" WATERMARK FOR ts AS ts - INTERVAL '1' HOUR"+")");// 3) 修改:类型/NOT NULL/注释/位置/水位线策略tableEnv.executeSql("ALTER TABLE Orders MODIFY ("+" amount DOUBLE NOT NULL, "+" category STRING COMMENT 'category identifier' AFTER `order`, "+" WATERMARK FOR ts AS ts"+")");// 4) 删除 watermarktableEnv.executeSql("ALTER TABLE Orders DROP WATERMARK");// 5) 删除列tableEnv.executeSql("ALTER TABLE Orders DROP (amount, ts, category)");// 6) 重命名列/表tableEnv.executeSql("ALTER TABLE Orders RENAME `order` TO order_id");tableEnv.executeSql("ALTER TABLE Orders RENAME TO NewOrders");// 7) 修改 catalog 属性tableEnv.executeSql("CREATE CATALOG cat2 WITH ('type'='generic_in_memory')");tableEnv.executeSql("ALTER CATALOG cat2 SET ('default-database'='db')");ALTERTABLE[IFEXISTS]table_name {ADD...|MODIFY...|DROP...|RENAMEold_columnTOnew_column|RENAMETOnew_table_name|SET(...)|RESET(...)}你可以把它理解为:
ALTERTABLEMyTableADDcategory_id STRINGCOMMENT'identifier of the category';ALTERTABLEMyTableADDnew_col STRINGFIRST;ALTERTABLEMyTableADDnew_col STRINGAFTERold_col;这是生产最常用的“演进组合拳”:
ALTERTABLEMyTableADD(log_ts STRINGCOMMENT'log timestamp string'FIRST,tsASTO_TIMESTAMP(log_ts)AFTERlog_ts,PRIMARYKEY(id)NOTENFORCED,WATERMARKFORtsASts-INTERVAL'3'SECOND);ALTERTABLEMyTableADDPARTITION(p1=1,p2='a')WITH('k1'='v1');ALTERTABLEMyTableADDPARTITION(p1=1,p2='a')WITH('k1'='v1')PARTITION(p1=1,p2='b')WITH('k2'='v2');ALTERTABLEMyTableADDDISTRIBUTIONBYHASH(uid)INTO4BUCKETS;ALTERTABLEMyTableADDDISTRIBUTIONBY(uid)INTO4BUCKETS;ALTERTABLEMyTableADDDISTRIBUTIONBY(uid);ALTERTABLEMyTableADDDISTRIBUTIONINTO4BUCKETS;重要提醒:把某列加入主键,会隐式把该列的可空性改成 NOT NULL(nullability 会变为 false)。
ALTERTABLEMyTableMODIFYmeasurementDOUBLECOMMENT'unit is bytes per second'AFTERid;注意:被 MODIFY 的列/组件必须已存在于 schema 中。
ALTERTABLEMyTableMODIFY(log_ts STRINGCOMMENT'log timestamp string'AFTERid,tsASTO_TIMESTAMP(log_ts)AFTERlog_ts,PRIMARYKEY(id)NOTENFORCED,WATERMARKFORtsASts);同样提醒:把某列改成主键列,也会隐式变为 NOT NULL。
ALTERTABLEMyTableDROPmeasurement;ALTERTABLEMyTableDROP(col1,col2,col3);ALTERTABLEMyTableDROPPRIMARYKEY;ALTERTABLEMyTableDROPPARTITION(`id`=1);ALTERTABLEMyTableDROPPARTITION(`id`=1),PARTITION(`id`=2);ALTERTABLEMyTableDROPWATERMARK;ALTERTABLEMyTableDROPDISTRIBUTION;ALTERTABLEMyTableRENAMErequest_bodyTOpayload;ALTERTABLEMyTableRENAMETOMyTable2;ALTERTABLEDataGenSourceSET('rows-per-second'='10');ALTERTABLEDataGenSource RESET('rows-per-second');ALTERVIEWmy_viewRENAMETOmy_view_v2;ALTERVIEWmy_viewASSELECT...;ALTERDATABASEmy_dbSET('k1'='v1','k2'='v2');ALTERFUNCTIONmy_udfAS'com.xxx.NewUdf'LANGUAGEJAVA;ALTERTEMPORARYSYSTEMFUNCTIONfAS'com.xxx.F'LANGUAGEJAVA;带IF EXISTS时:函数不存在就忽略,不报错。
ALTERCATALOG cat2SET('default-database'='db');ALTERCATALOG cat2 RESET('default-database');ALTERCATALOG cat2COMMENT'comment for catalog ''cat2''';ALTERMODEL MyModelSET('model-version'='2.0','batch-size'='32');ALTERMODEL MyModel RESET('model-version','batch-size');ALTERMODEL MyModelRENAMETONewModel;IF EXISTS(表/函数等支持时):让运维脚本幂等,避免多环境重复执行失败。