云服务器内容精选

  • 语法支持类型 DLI SQL语法支持以下数据类型: STRING,BOOLEAN,BYTES,DECIMAL,TINYINT,SMALLINT,INTEGER,BIGINT,FLOAT,DOUBLE,DATE,TIME,TIMESTAMP,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL,ARRAY,MULTISET,MAP,ROW 在SQL语法中这些类型用于定义表中列的数据类型。 父主题: SQL语法约束与定义
  • DML语法 不支持PARTITION子句。 不支持UPDATE使用子查询。 不支持INSERT DELAYED Syntax。 不支持STRAIGHT_JOIN和NATURAL JOIN。 受限支持跨分片UPDATE多表需要join update的表需要有PK。 受限支持跨分片DELETE多表中的数据,需要Join delete的表需要有PK。 不支持SQL中对于变量的引用和操作。 例如: SET @c=1, @d=@c+1; SELECT @c, @d; INSERT或者UPDATE时,不支持插入或者更新拆分键值为DEFAULT关键字。 UPDATE不支持在一个语句中对同一字段重复更新。 UPDATE不支持关联更新拆分键。 UPDATE不支持自关联更新。 关联更新中,不支持在目标列的赋值语句或表达式中引用其它目标列,将造成更新结果不符合预期。 例如: update tbl_1 a,tbl_2 b set a.name=concat(b.name,'aaaa'),b.name=concat(a.name,'bbbb') on a.id=b.id; 当使用文本协议时,BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB数据必须转换成16进制数据。 DDM对非法数据的处理与后端MySQL的sql_mode有关。 关联更新不支持不带关联条件的Join。 SQL语句中表达式的因子数量请勿超过1000个。
  • 注释说明 单行注释 使用井号(#)开头,后面直接写注释内容。#后面的所有内容直到行尾都被视为注释。 示例如下: SELECT * FROM customers; #注释内容 使用两个连续的短划线(--),但这种注释要求第二个短划线后面至少有一个空格符,否则可能不会被正确解析。 示例如下: SELECT * FROM Product; -- 注释内容 多行注释 以/*开始并且以*/结束,可以包含多行文本。这种方式允许注释跨越多行。 示例如下: /* 注释内容 */ SELECT DISTINCT product_id, purchase_price FROM Product;
  • DDL语法 拆分表和广播表不支持外键。 不支持修改分片字段(拆分键)。 不支持ALTER DATABASE Syntax。 不支持从另一张表创建新的拆分表、广播表。 create table不支持generated column语法。 不支持ALTER命令修改拆分键和全局序列字段。 不支持创建TEMPORARY类型的拆分表、广播表。 逻辑表名只允许字母(不区分大小写)数字以及下划线。 不支持CREATE TABLE tbl_name LIKE old_tbl_name。 不支持CREATE TABLE tbl_name SELECT statement。 不支持insert into on duplicate key update 更新拆分键值。 暂不支持跨Schema的DDL, 例如, CREATE TABLE db_name.tbl_name (… )。 使用MySQL关键字或保留字做表名、列名、索引名等标识符时,需要使用反引号扩起来。
  • MySQL EXPLAIN 当您在需要执行的SQL语句前加上EXPLAIN,然后执行SQL时,您将会看到其具体的执行计划,以此分析耗时,进而修改SQL,达到优化的效果。 表1 EXPLAIN列的解释 列名称 描述 table 显示该行数据所归属的表。 type 显示连接使用了何种类型。连接类型按照执行速度从快到慢排序为:const、eq_reg、ref、range、index、ALL。 possible_keys 显示可能应用在该表中的索引。 key 实际使用的索引。如果为NULL,则没有使用索引。个别情况下,MySQL会选择优化不足的索引。在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MySQL忽略索引。 key_len 使用的索引的长度。在不损失精确性的情况下,长度越短越好。 ref 显示索引被使用的列,通常为一个常数。 rows MySQL用来返回请求数据的行数。 Extra 关于MySQL如何解析查询的额外信息。
  • 语法支持的类型 SecMaster SQL语法支持的类型如下: STRING,BOOLEAN,BYTES,DECIMAL,TINYINT,SMALLINT,INTEGER,BIGINT,FLOAT,DOUBLE,DATE,TIME,TIMESTAMP,TIMESTAMP WITH LOCAL TIME ZONE,INTERVAL,ARRAY,MULTISET,MAP,ROW。 注意事项 SecMaster SQL兼容Flink 1.7.2版本SQL语法。 Flink SQL 对于标识符(表、属性、函数名)有类似于 Java 的词法约定: 不管是否引用标识符,都保留标识符的大小写。 且标识符需区分大小写。 与 Java 不一样的地方在于,通过反引号,可以允许标识符带有非字母的字符(如:"SELECT a AS `my field` FROM t")。 字符串文本常量需要被单引号包起来(如 SELECT 'Hello World' )。两个单引号表示转义(如 SELECT 'It''s me.')。字符串文本常量支持 Unicode 字符,如需明确使用 Unicode 编码,请使用以下语法: 使用反斜杠(\)作为转义字符(默认):SELECT U&'\263A' 使用自定义的转义字符: SELECT U&'#263A' UESCAPE '#' 慎用正则函数(REGEXP) 正则表达式是非常耗时的操作,对比加减乘除通常有百倍的性能开销,而且正则表达式在某些极端情况下可能会进入无限循环,导致作业阻塞,因此建议使用LIKE。正则函数包括: REGEXP REGEXP_REPLACE 父主题: SecMaster SQL语法参考
  • 聚合模型示例 聚合列不支持修改聚合类型。 在col1列后添加new_col列(key列): ALTER TABLE example_db.my_table ADD COLUMN new_col INT DEFAULT "0" AFTER col1; 在col1后添加new_col列(Value列SUM聚合类型): ALTER TABLE example_db.my_table ADD COLUMN new_col INT SUM DEFAULT "0" AFTER col1; 修改col1列的类型为BIGINT(Key列): ALTER TABLE example_db.my_table MODIFY COLUMN col1 BIGINT DEFAULT "1"; 修改col1列的类型为BIGINT(Value列): ALTER TABLE example_db.my_table MODIFY COLUMN col1 BIGINT MAX DEFAULT "1"; 删除col1列: ALTER TABLE example_db.my_table DROP COLUMN col1;
  • 非聚合模型示例 在col1列后添加new_col列(添加Key列): ALTER TABLE example_db.my_table ADD COLUMN new_col INT KEY DEFAULT "0" AFTER col1; 在col1列后添加new_col列(添加Value列): ALTER TABLE example_db.my_table ADD COLUMN new_col INT DEFAULT "0" AFTER col1; 修改col1列的类型为BIGINT(Key列): ALTER TABLE example_db.my_table MODIFY COLUMN col1 BIGINT KEY DEFAULT "1"; 修改col1列的类型为BIGINT(Value列): ALTER TABLE example_db.my_table MODIFY COLUMN col1 BIGINT DEFAULT "1"; 删除col1列: ALTER TABLE example_db.my_table DROP COLUMN col1;
  • 约束 支持在Hudi客户端执行Spark SQL操作Hudi。 支持在Spark2x的JD BCS erver中执行Spark SQL操作Hudi。 不支持在Spark2x的客户端执行Spark SQL操作Hudi,支持在Spark3.1.1及之后版本的客户端执行Spark SQL操作Hudi。 不支持在Hive、Hetu引擎中写hudi表,以及修改hudi表结构,仅支持读。 由于SQL的KeyGenerator默认是org.apache.hudi.keygen.ComplexKeyGenerator,要求DataSource方式写入时KeyGenerator与SQL设置的一致。
  • 基本语法 ALTER TABLE oldTableName RENAME TO newTableName; ALTER TABLE TableName SET TBLPROPERTIES; ALTER TABLE TableName ADD COLUMN; ALTER TABLE TableName RENAME COLUMN; ALTER TABLE TableName ALTER COLUMN; ALTER TABLE TableName DROP COLUMN; ALTER TABLE TableName ADD PARTITION FIELD; ALTER TABLE TableName DROP PARTITION FIELD; ALTER TABLE TableName REPLACE PARTITION FIELDALTER TABLE TableName WRITE ORDERED BY; 可空类型字段不能修改为非空类型字段, struct类型不支持修改字段。
  • 使用示例 修改表增加属性值: ALTER TABLE prod.db.sample SET TBLPROPERTIES ( 'comment' = 'A table comment.' ); 修改表增加表字段: ALTER TABLE prod.db.sample ADD COLUMNS ( new_column string comment 'new_column docs' ); 修改表重命名表字段: ALTER TABLE prod.db.sample RENAME COLUMN data TO payload; 修改表字段类型: ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE double; 修改表删除表字段: ALTER TABLE prod.db.sample DROP COLUMN id;
  • 示例 START TRANSACTION;START TRANSACTION ISOLATION LEVEL REPEATABLE READ;START TRANSACTION READ WRITE;START TRANSACTION ISOLATION LEVEL READ COMMITTED, READ ONLY;START TRANSACTION READ WRITE, ISOLATION LEVEL SERIALIZABLE; 不支持嵌套事务,也就是开启事务后,在commit之前不能再开启其他事务。
  • 语法 INSERT { INTO | OVERWRITE } [TABLE] table_name [(column_list)] [ PARTITION (partition_clause)] {select_statement | VALUES (value [, value ...]) [, (value [, value ...]) ...] } FROM from_statement INSERT OVERWRITE TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement FROM from_statement INSERT INTO TABLE tablename1 [PARTITION (partcol1=val1, partcol2=val2 ...)] select_statement
  • 限制 如果数据表中只有一个字段,且字段类型为row、struct,那么插入数据时需要用row对类型进行包裹。 -- 单字段表插入复杂类型需要用row()包裹CREATE TABLE test_row (id row(c1 int, c2 string));INSERT INTO test_row values row(row(1, 'test'));--多字段表复杂类型可以直接插入CREATE TABLE test_multy_value(id int, col row(c1 int, c2 string));INSERT INTO test_multy_value values (1,row(1,'test'));
  • 描述 向表中插入新的数据行。 如果指定了列名列表,那么这些列名列表必须与query语句产生列表名完全匹配。表中不在列名列表中的每一列,其值会设置为null。 如果没有指定列名列表,则query语句产生的列必须与将要插入的列完全匹配。 使用insert into时,会往表中追加数据,而使用insert overwrite时,如果表属性“auto.purge”被设置为“true”,直接删除原表数据,再写入新的数据。 如果对象表是分区表时,insert overwrite会删除对应分区的数据而非所有数据。 insert into后面的table关键字为可选,以兼容hive语法。