当前位置: 首页 > news >正文

普通和hive兼容模式下sql的差异

–odps sql

–author:宋文理
–create time:2023-03-08 15:23:52

– 差异分为三块
– 1.运算符的差异
– 2.类型转换的差异
– 3.内建函数的差异

– 以下是运算符的差异:

– BITAND(&)
– 当输入参数是BIGINT类型的时候,如果BITAND的计算结果是LONG_MIN(-263),在普通模式下会返回NULL,
– 而Hive模式仍然是LONG_MIN。
select cast((3&5)as string); --返回1
– 示例如下
– 普通模式
set odps.sql.hive.compatible=false;
select cast((a & b) as string) from
values(-9223372036854775807L, -9223372036854775792L) t(a, b);
–返回NULL

– Hive兼容模式
set odps.sql.hive.compatible=true;
select cast((a & b) as string) from
values(-9223372036854775807L, -9223372036854775792L) t(a, b);

–返回-9223372036854775808
Hive
select cast((-9223372036854775807L & -9223372036854775792L) as string);
–返回-9223372036854775808
select cast((-9 & -2) as string); --返回-10
select cast((-2 & -3)as string); --返回-4
select cast((1 & 2)as string); --返回0
select cast((-2 & -3)as string); --返回-4
select cast((-2 & -3)as string); --返回-4
select cast(-2 as string);

INSERT overwrite TABLE ods_std_wxthct_tbv_trandetailcount_di partition (ds = ‘bdp.system.bizdate′)selectDEPTID,TRANID,ARTIID,DEALID,STKLOCID,TRANCOUNTID,PROVID,COUNTDATE,TRANDATE,CLDATE,CLOPTRID,CLCHECKOPTRIDfromodsstgwxthcttbvtrandetailcountdiawherecast(a.DEPTIDasbigint)>0andcast(a.ARTIIDasbigint)>0anda.ds=′{bdp.system.bizdate}') select DEPTID ,TRANID ,ARTIID ,DEALID ,STKLOCID ,TRANCOUNTID ,PROVID ,COUNTDATE ,TRANDATE ,CLDATE ,CLOPTRID ,CLCHECKOPTRID from ods_stg_wxthct_tbv_trandetailcount_di a where cast(a.DEPTID as bigint)>0 and cast(a.ARTIID as bigint)>0 and a.ds = 'bdp.system.bizdate)selectDEPTID,TRANID,ARTIID,DEALID,STKLOCID,TRANCOUNTID,PROVID,COUNTDATE,TRANDATE,CLDATE,CLOPTRID,CLCHECKOPTRIDfromodsstgwxthcttbvtrandetailcountdiawherecast(a.DEPTIDasbigint)>0andcast(a.ARTIIDasbigint)>0anda.ds={bdp.system.bizdate}’;

– BITOR(|)
– 当输入参数是BIGINT类型的时候,如果BITOR的计算结果是LONG_MIN(-263),在普通模式下会返回NULL,
– 而Hive模式仍然是LONG_MIN。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select cast((a | b) as string) from
values(java.lang.Long.MIN_VALUE, 0L) t(a, b);
–返回NULL

select cast((a | b) as string) from
values(8,1) t(a, b); --返回9
select cast((a | b) as string) from
values(8,6) t(a, b); --返回14

select cast((a | b) as string) from
values(8,-1) t(a, b); --返回-1

– Hive兼容模式
set odps.sql.hive.compatible=true;
select cast((a | b) as string) from
values(java.lang.Long.MIN_VALUE, 0L) t(a, b);
–返回-9223372036854775808
– Hive
select cast(-9223372036854775808 as bigint) | 0;
– 返回-9223372036854775808
– BITXOR(^)
– 当输入参数是BIGINT类型的时候,如果BITXOR的计算结果是LONG_MIN(-263),在普通模式下会返回NULL,
– 而Hive模式仍然是LONG_MIN。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select cast((a ^ b) as string) from
values(java.lang.Long.MIN_VALUE, 0L) t(a, b);
–返回NULL

– Hive兼容模式
set odps.sql.hive.compatible=true;
select cast((a ^ b) as string) from
values(java.lang.Long.MIN_VALUE, 0L) t(a, b);
–返回-9223372036854775808

– Hive
select cast(-9223372036854775808 as bigint) ^ 0;
–返回-9223372036854775808
– EQ(=)
– 当输入参数是DOUBLE类型的时候,普通模式下对相等的检查更加宽松,如果两个输入参数足够接近,就认为它们相等;
– 而Hive兼容模式对相等的检查更加严格。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select a = 1.0 from values (1.000000000000001) t(a);
select 1.0=1.0000000000000000000000001;
– 结果是true,因为这两个数足够接近

– Hive兼容模式
set odps.sql.hive.compatible=true;
select a = 1.0 from values (1.000000000000001) t(a);
– 结果是false

– Hive
select 1.0 = 1.000000000000001 ;
– 结果是false
– NEQ(!=)
– 当输入参数是DOUBLE类型的时候,普通模式下对相等的检查更加宽松,如果两个输入参数足够接近,就认为它们相等;
– 而Hive兼容模式对相等的检查更加严格。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select a != 1.0 from values (1.000000000000001) t(a);
– 结果是false,因为这两个数足够接近

– Hive兼容模式
set odps.sql.hive.compatible=true;
select a != 1.0 from values (1.000000000000001) t(a);
– 结果是true
– Hive
select 1.000000000000001 != 1.0 ;
– 结果是true
– GE(>=)
– 当输入参数是DOUBLE类型的时候,普通模式下对相等的检查更加宽松,如果两个输入参数足够接近,
– 就认为它们相等这会导致即使第1个输入参数小于第2个参数,但是只要他们足够接近,GE的返回结果也可能是true。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select 1.0 >= a from values (1.000000000000001) t(a);
– 结果是true,因为这两个数足够接近,认为它们相等

– Hive兼容模式
set odps.sql.hive.compatible=true;
select 1.0 >= a from values (1.000000000000001) t(a);
– 结果是false
– Hive
select 1.0 >= 1.000000000000001;
– 结果是false

– GT(>)
– 当输入参数是DOUBLE类型的时候,普通模式下对相等的检查更加宽松,如果两个输入参数足够接近,
– 就认为它们相等这会导致即使第1个输入参数大于第2个参数,但是只要他们足够接近,GT的返回结果也可能是false。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select a > 1.0 from values (1.000000000000001) t(a);
– 结果是false,因为这两个数足够接近,认为它们相等

– Hive兼容模式
set odps.sql.hive.compatible=true;
select a > 1.0 from values (1.000000000000001) t(a);
– 结果是true
– Hive
select 1.000000000000001>1.0;
– 结果是true

– LE(<=)
– 当输入参数是DOUBLE类型的时候,普通模式下对相等的检查更加宽松,如果两个输入参数足够接近,
– 就认为它们相等这会导致即使第1个输入参数大于第2个参数,但是只要他们足够接近,LE的返回结果也可能是true。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select a <= 1.0 from values (1.000000000000001) t(a);
– 结果是true,因为这两个数足够接近,认为它们相等

– Hive兼容模式
set odps.sql.hive.compatible=true;
select a <= 1.0 from values (1.000000000000001) t(a);
– 结果是false
– Hive
select 1.000000000000001 <= 1.0 ;
– 结果是false
– LT(<)
– 当输入参数是DOUBLE类型的时候,普通模式下对相等的检查更加宽松,如果两个输入参数足够接近,
– 就认为它们相等这会导致即使第1个输入参数小于第2个参数,但是只要他们足够接近,LE的返回结果也可能是false。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select 1.0 < a from values (1.000000000000001) t(a);
– 结果是false,因为这两个数足够接近,认为它们相等

– Hive兼容模式
set odps.sql.hive.compatible=true;
select 1.0 < a from values (1.000000000000001) t(a);
– 结果是true
– Hive
select 1.0 < 1.000000000000001;
– 结果是true
– PLUS(+)
– 计算结果超范围时的处理不同,在普通模式时可能会报错,在Hive兼容模式计算结果溢出不会报错,
– 同时为两种模式开启严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select (100L + a) from values (9223372036854775807L) t(a);
– 报错,计算结果溢出

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select (100L + a) from values (9223372036854775807L) t(a);
– 计算结果溢出,但是不会报错
– Hive
select (100L + 9223372036854775807L) ;
– 返回-9223372036854775709,计算结果溢出,但是不会报错

– MINUS(-)
– 计算结果超范围时的处理不同,在普通模式时可能会报错,在Hive兼容模式计算结果溢出不会报错,
– 同时为两种模式开启严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select (-100L - a) from values (9223372036854775807L) t(a);
– 报错,计算结果溢出

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select (-100L - a) from values (9223372036854775807L) t(a);
– 计算结果溢出,但是不会报错
– Hive
select (-100L - 9223372036854775807L) ;
– 返回 9223372036854775709
– MPL(*)
– 计算结果超范围时的处理不同,在普通模式时可能会报错,在Hive兼容模式计算结果溢出不会报错,
– 同时为两种模式开启严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select (a * 9223372036854775807L) from values (9223372036854775807L) t(a);
– 报错,计算结果溢出

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select (a * 9223372036854775807L) from values (9223372036854775807L) t(a);
– 计算结果溢出,但是不会报错
– Hive
select (9223372036854775807L * 9223372036854775807L) ;
– 返回1;计算结果溢出,但是不会报错
– – DIV(/)
– 计算结果超范围时的处理不同,在普通模式时可能会报错,在Hive兼容模式计算结果溢出不会报错,
– 同时为两种模式开启严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;

select 1 / a from values (0L) t(a);
– strict模式下报错

select 1.0 / a from values (0.0) t(a);
– strict模式下报错

select 1BD / a from values (0BD) t(a);
– strict模式下报错

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;

select 1 / a from values (0L) t(a);
– 返回NULL

select 1.0 / a from values (0.0) t(a);
– 返回NULL

select 1BD / a from values (0BD) t(a);
– 返回NULL
Hive
select 1 / 0L;
– 返回NULL

select 1.0 / 0.0;
– 返回NULL

select 1BD / 0BD;
– 返回NULL

– 以下是类型转换的差异

– TOBIGINT
– 当输入参数不合法时,普通模式下可能会报错,Hive兼容模式返回NULL,
– 同时为两种模式开启即严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select cast(a as bigint) from values (‘hello’) t(a);
– 报错,输入参数不合法

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select cast(a as bigint) from values (‘hello’) t(a);
– 返回NULL
– Hive
select cast(‘hello’ as bigint) ;
– 返回NULL
– TODECIMAL
– 当输入参数不合法时,普通模式下可能会报错,Hive兼容模式返回NULL,
– 同时为两种模式开启即严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select cast(a as decimal) from values (‘hello’) t(a);
– 报错,输入参数不合法

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.sql.udf.strict.mode=true;
select cast(a as decimal) from values (‘hello’) t(a);
– 返回NULL
– Hive
select cast(‘hello’ as decimal) ;
– 返回NULL
– TODOUBLE
– 当输入参数不合法时,普通模式下可能会报错,Hive兼容模式返回NULL,
– 同时为两种模式开启即严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select cast(a as double) from values (‘hello’) t(a);
– 报错,输入参数不合法

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select cast(a as double) from values (‘hello’) t(a);
– 返回NULL
– Hive
select cast(‘hello’ as double) ;
– 返回NULL
– TOSMALLINT
– 当输入参数不合法或超出范围时,普通模式下可能会报错,Hive兼容模式返回NULL,
– 同时为两种模式开启即严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
set odps.sql.type.system.odps2=true;

select cast(a as smallint) from values (‘hello’) t(a);
– 报错,输入参数不合法

select cast(a as smallint) from values (9223372036854775807L) t(a);
– 报错,数据溢出

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
set odps.sql.type.system.odps2=true;

select cast(a as smallint) from values (‘hello’) t(a);
– 返回NULL

select cast(a as smallint) from values (9223372036854775807L) t(a);
– 数据溢出但是不报错

Hive
select cast(‘hello’ as smallint);
– 返回NULL

select cast(9223372036854775807L as smallint);
– 返回-1,数据溢出但是不报错

– TOTINYINT
– 当输入参数不合法或超出范围时,普通模式下可能会报错,Hive兼容模式返回NULL,
– 同时为两种模式开启即严格模式(odps.function.strictmode=true)。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
set odps.sql.type.system.odps2=true;

select cast(a as tinyint) from values (‘hello’) t(a);
– 报错,输入参数不合法

select cast(a as tinyint) from values (9223372036854775807L) t(a);
– 报错,数据溢出

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
set odps.sql.type.system.odps2=true;

select cast(a as tinyint) from values (‘hello’) t(a);
– 返回NULL

select cast(a as tinyint) from values (9223372036854775807L) t(a);
– 数据溢出但是不报错
– Hive
select cast(‘hello’ as tinyint) ;
– 返回NULL

select cast(9223372036854775807L as tinyint) ;
– 返回-1,数据溢出但是不报错

– 以下是内建函数的差异:

ACOS
– 取值超出范围[-1,1]时,普通模式和Hive模式的表现不同。普通模式返回NULL,并且可能会报错;而Hive模式返回NAN。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select acos(a) from values(1.5) t(a);
–返回NULL,并且有可能会报错

– Hive兼容模式
set odps.sql.hive.compatible=true;
select acos(a) from values(1.5) t(a);
–返回NAN
– Hive
select acos(1.5);
–返回NAN

ASCII
– 普通模式ASCII函数返回值类型为BIGINT,Hive兼容模式ASCII函数返回值类型为INT。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select ascii(‘abcde’);
–显示返回值类型是bigint

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select ascii(‘abcde’);
–显示返回值类型是int
– Hive
explain select ascii(‘abcde’);
–显示返回值类型是int

ASIN
– 取值超出范围[-1,1]时,普通模式和Hive模式的表现不同。普通模式返回NULL,并且可能会报错;而Hive模式返回NAN。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select asin(a) from values(1.5) t(a);
–返回NULL,并且有可能会报错

– Hive兼容模式
set odps.sql.hive.compatible=true;
select asin(a) from values(1.5) t(a);
–返回NAN
– Hive
select asin(a) from values(1.5) t(a);
–返回NAN

CEIL
– 普通模式CEIL函数输入参数类型是DECIMAL的时候,返回值类型为BIGINT;
– Hive兼容模式CEIL函数输入参数类型是DECIMAL的时候,返回值类型为DECIMAL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select ceil(1.2BD);
–显示返回值类型是bigint

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select ceil(1.2BD);
–显示返回值类型是decimal
– Hive
explain select ceil(1.2BD);
–显示返回值类型是decimal(2,0)
– CHR
– 输入参数取值超出范围,普通模式与Hive模式的返回结果不同。
– 普通模式会报错,而Hive兼容模式返回空字符串。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select chr(-100L);
–报错,输入参数不合法
– Hive兼容模式
set odps.sql.hive.compatible=true;
select chr(-100L);
–返回空字符串
– Hive
select chr(-100L);
–返回空字符串

CONCAT_WS
– 输入参数中有NULL,普通模式与Hive模式的返回结果不同。普通模式返回NULL,而Hive兼容模式会忽略输入参数中的NULL。
– 输入参数中有空数组,如下所示。普通模式下会返回NULL,而Hive兼容模式下会返回空字符串。
– string concat_ws(string , array arr)
– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select concat_ws(‘,’, ‘a’, null, ‘b’);
– 返回NULL
select concat_ws(‘,’, array());
– 返回NULL

– Hive兼容模式
set odps.sql.hive.compatible=true;
select concat_ws(‘,’, ‘a’, null, ‘b’);
– 返回如下值:
±----+
| _c0 |
±----+
| a,b |
±----+

select concat_ws(‘,’, array());
–返回空字符串
– Hive
select concat_ws(‘,’, ‘a’, null, ‘b’);
– 返回如下值:
±----+
| _c0 |
±----+
| a,b |
±----+

select concat_ws(‘,’, array());
–返回空字符串
COT
– 当输入参数为0(或者是其他导致计算结果为无穷大的数)时,普通模式下会返回NULL,
– 并且可能会报错;而Hive兼容模式返回INF。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select cot(a) from values(0.0) t(a);
–返回NULL,并且有可能会报错

– Hive兼容模式
set odps.sql.hive.compatible=true;
select cot(a) from values(0.0) t(a);
–返回INF
– Hive不支持此函数。

EXP
– 当使用EXP函数计算的结果超出输出类型的值域范围时,同时为两种模式开启严格模式(odps.function.strictmode=true),
– 在普通模式下可能会报错,而Hive兼容模式返回INF。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select exp(a) from values (1000L) t(a);
– 报错 Data overflow

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select exp(a) from values (1000L) t(a);
– 返回INF
– Hive
select exp(1000L) ;
– 返回INF

FIND_IN_SET
– 普通模式FIND_IN_SET函数返回值类型为BIGINT,Hive兼容模式FIND_IN_SET函数返回值类型为INT。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select find_in_set(‘ab’, ‘abc,hello,ab,c’);
–显示返回值类型是bigint

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select find_in_set(‘ab’, ‘abc,hello,ab,c’);
–显示返回值类型是int
– Hive
explain select find_in_set(‘ab’, ‘abc,hello,ab,c’);
–显示返回值类型是int

FLOOR
– 普通模式FLOOR函数输入参数类型是DECIMAL的时候,返回值类型为BIGINT;
– Hive兼容模式FLOOR函数输入参数类型是DECIMAL的时候,返回值类型为DECIMAL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select floor(1.2BD);
–显示返回值类型是bigint

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select floor(1.2BD);
–显示返回值类型是decimal
– Hive
explain select floor(1.2BD);
–显示返回值类型是decimal(2,0)

FROM_UNIXTIME
– 普通模式支持如下形式的function signature,不支持指定时间的格式。
– DATETIME FROM_UNIXTIME(BIGINT time)
– Hive兼容模式支持如下两种形式的function signature,这两种function sigature都返回STRING类型。
– 第1个signature允许指定输出的时间格式,输出的时间格式受SimpleDateFormat的控制,详情请参见SimpleDateFormat。
– STRING FROM_UNIXTIME(BIGINT time, STRING format)

– STRING FROM_UNIXTIME(BIGINT time)
– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;

select from_unixtime(12345678, ‘yyyy-MM-dd HH:mm:ss’);
–报错,from_unixtime只允许1个输入参数,不允许2个输入参数

select weekday(from_unixtime(0));
– 执行成功,from_unixtime返回datetime类型,weekday接受datetime类型的输入参数

– Hive兼容模式
set odps.sql.hive.compatible=true;

select from_unixtime(12345678, ‘yyyy-MM-dd HH:mm:ss’);
–返回结果如下:
±----+
| _c0 |
±----+
| 1970-05-24 05:21:18 |
±----+

select weekday(from_unixtime(0));
– 执行失败,因为from_unixtime返回string类型,而weekday不接受string类型输入参数。
Hive
select from_unixtime(12345678, ‘yyyy-MM-dd HH:mm:ss’);
–返回结果如下:
±----+
| _c0 |
±----+
| 1970-05-24 05:21:18 |
±----+

select weekday(from_unixtime(0));
– hive不支持weekday函数

FROM_UTC_TIMESTAMP
– 当输入参数超范围时,且同时为两种模式开启严格模式(odps.function.strictmode=true),
– 普通模式返回可能会报错,Hive兼容模式返回NULL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select from_utc_timestamp(1501557840000000, ‘UTC’);
– 报错,输入参数超出范围

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select from_utc_timestamp(1501557840000000, ‘UTC’);
– 返回NULL
– Hive
select from_utc_timestamp(1501557840000000, ‘UTC’);
– 报错,FAILED: IllegalArgumentException Timestamp format must be yyyy-mm-dd hh:mm:ss[.fffffffff]

– HASH
– 普通模式下HASH函数返回BIGINT类型,Hive兼容模式HASH函数下返回INT类型。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select hash(0, 2, 4);
–返回值类型是bigint

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select hash(0, 2, 4);
–返回值类型是int
– Hive
explain select hash(0, 2, 4);
–返回值类型是int

IS_ENCODING
– 判断输入的字符串是否可以从指定的一个字符集from_encoding转为另一个字符集to_encoding。也可以用于判断输入是否为乱码,
– 通常您可以将from_encoding设为UTF-8,to_encoding设为GBK。
– 普通模式下,输入字符串必须要能够用from_encoding解码成功,并能按照to_encoding编码,结果才能返回false。
– Hive兼容模式下,输入字符串必须是UTF-8编码,并且需要能同时被from_encoding和to_encoding编码,结果才返回false。
– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select is_encoding(‘中文’, ‘gbk’, ‘utf-8’);
– 返回false,'中文’是utf-8编码,不能用gbk解码,所以返回false

– Hive兼容模式
set odps.sql.hive.compatible=true;
select is_encoding(‘中文’, ‘gbk’, ‘utf-8’);
– 返回true,'中文’既可以转换成gbk编码,又可以转换成utf-8编码
– Hive不支持此语法。

INSTR
– 输入参数为两个字符串时,普通模式下返回值类型为BIGINT,Hive兼容模式下返回值类型为INT。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select instr(‘Tech on the net’, ‘e’);
–返回bigint类型

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select instr(‘Tech on the net’, ‘e’);
–返回int类型
– Hive
explain select instr(‘Tech on the net’, ‘e’);
–返回的是int类型

LENGTH
– 普通模式下使用LENGTH函数返回值类型为BIGINT,Hive兼容模式下使用LENGTH函数返回值类型为INT。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select length(‘hello’);
–返回bigint类型
– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select length(‘hello’);
–返回int类型
– Hive
explain select length(‘hello’);
–返回int类型

LENGTHB
– 普通模式下使用LENGTHB函数返回值类型为BIGINT,Hive兼容模式下使用LENGTHB函数返回值类型为INT。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select lengthb(‘hello’);
–返回bigint类型

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select lengthb(‘hello’);
–返回int类型
– Hive不支持该函数。

LN
– 当输入参数超范围时,同时为两种模式开启严格模式(odps.function.strictmode=true),
– 在普通模式下可能会报错,在Hive兼容模式下会返回NULL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select ln(a) from values(-1.0) t(a);
– 报错,输入参数超出范围

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select ln(a) from values(-1.0) t(a);
– 返回NULL
– Hive
select ln(-1.0) ;
– 返回NULL

LOCATE
– 普通模式下使用LOCATE函数返回值类型为BIGINT,Hive兼容模式下使用LOCATE函数返回值类型为INT。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select locate(‘ab’, ‘abchelloabc’);
–返回bigint类型

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select locate(‘ab’, ‘abchelloabc’);
–返回int类型
– Hive
explain select locate(‘ab’, ‘abchelloabc’);
–返回的int类型
LOG
– 当输入参数超范围时,同时为两种模式开启严格模式(odps.function.strictmode=true),
– 在普通模式下可能会报错,在Hive兼容模式下会返回NULL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set oodps.function.strictmode=true;
select log(a, 10) from values(-3.0) t(a);
– 报错,输入参数超出范围

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select log(a, 10) from values(-3.0) t(a);
– 返回NULL
– Hive
select log(-3.0, 10) ;
– 返回NULL

MOD
– 当输入参数不合法时,同时为两种模式开启严格模式(odps.function.strictmode=true),
– 在普通模式下可能会报错,在Hive兼容模式下会返回NULL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select 1L % a from values(0L) t(a);
– 报错,数据溢出

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select 1L % a from values(0L) t(a);
– 返回NULL
– Hive
select 1L % 0L;
– 返回NULL

PMOD
– 当输入参数不合法时,同时为两种模式开启严格模式(odps.function.strictmode=true),
– 在普通模式下可能会报错,在Hive兼容模式下会返回NULL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select pmod(1L, a) from values(0L) t(a);
– 报错,数据溢出

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select pmod(1L, a) from values(0L) t(a);
– 返回NULL

– Hive
select pmod(1L, 0L) ;
– 返回NULL
– POW
– 当计算结果溢出时,同时为两种模式开启严格模式(odps.function.strictmode=true),
– 在普通模式下可能会报错,在Hive兼容模式下会返回INF。

– 示例如下。
– 普通模式
– set odps.sql.hive.compatible=false;
set odps.sql.udf.strict.mode=true;
select pow(a, 1000L) from values(1000L) t(a);
– 报错,数据溢出

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.sql.udf.strict.mode=true;
select pow(a, 1000L) from values(1000L) t(a);
– 返回INF
– Hive
select pow(1000L, 1000L) ;
– 返回INF

REPEAT
– 当REPEAT的个数小于零时,在普通模式下会报错,在Hive兼容模式下会返回空字符串。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select repeat(‘hi’, n) from values (-1L) t(n);
–报错,输入参数超出范围

– Hive兼容模式
set odps.sql.hive.compatible=true;
select repeat(‘hi’, n) from values (-1L) t(n);
– --返回空字符串
– Hive不支持该函数。

REVERSE
– 当输入参数中包含中文字符时,在普通模式下按照字节来进行reverse操作,返回值可能有乱码;
– 在Hive兼容模式下按照utf8来处理,不会出现乱码。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select reverse(a) from values (‘hello中国world’) t(a);
–返回结果中有乱码

– Hive兼容模式
set odps.sql.hive.compatible=true;
select reverse(a) from values (‘hello中国world’) t(a);
–返回结果中没有乱码
– Hive
select reverse(‘hello中国world’) ;
–返回dlrow国中olleh

ROUND
– 在普通模式下使用ROUND函数,本质上只支持DOUBLE或DECIMAL两种输入数据类型,其他数据类型会转换为这两种类型;
– 在Hive兼容模式下,支持:DOUBLE、DECIMAL、BIGINT、INT、SMALLINT、TINYINT等数据类型。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select round(a) from values(2L) t(a);
–从执行计划看,输入数据从bigint类型转换成double类型,计算结果是double类型

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select round(a) from values(2L) t(a);
–从执行计划看,输入bigint类型,输出是bigint类型
– Hive
explain select round(2L) ;
–从执行计划看,输入bigint类型,输出是bigint类型

SIGN
– 输入参数数据类型为DECIMAL时,普通模式下返回BIGINT类型,Hive兼容模式下返回INT类型。
– 输入参数数据类型为DOUBLE时,普通模式下如果输入参数的绝对值和0非常接近,则返回值为0。
– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;

explain select sign(a) from values(2BD) t(a);
–从执行计划看,返回bigint类型

select sign(a) from values (0.000000000000009) t(a);
–返回值是0.0,因为输入参数和0非常紧急
– Hive兼容模式
set odps.sql.hive.compatible=true;

explain select sign(a) from values(2BD) t(a);
–从执行计划看,返回int类型

select sign(a) from values (0.000000000000009) t(a);
– 返回值是1.0
– Hive
explain select sign(2BD);
–从执行计划看,返回int类型

select sign(0.000000000000009) ;
–返回值是1

SIZE
– 普通模式下使用SIZE函数返回值类型为BIGINT,Hive兼容模式下使用SIZE函数返回值类型为INT。
– 输入参数为NULL时,普通模式下返回NULL,Hive兼容模式返回-1。
– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
explain select size(array(‘a’,‘b’));
–从执行计划看,返回bigint类型

select size(a) from values (cast(NULL as array)) t(a);
–返回结果是NULL

– Hive兼容模式
set odps.sql.hive.compatible=true;
explain select size(array(‘a’,‘b’));
–从执行计划看,返回int类型

select size(a) from values (cast(NULL as array)) t(a);
–返回结果是-1
– Hive
explain select size(array(‘a’,‘b’));
–从执行计划看,返回int类型

SPLIT
– 当输入参数的分隔符为空字符串时,普通模式下返回空数组,Hive兼容模式下按照UTF-8格式分割输入字符串。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
select split(a, ‘’) from values (‘hello中国world’) t(a);
–返回空array

– Hive兼容模式
set odps.sql.hive.compatible=true;
select split(a, ‘’) from values (‘hello中国world’) t(a);
–返回[, h, e, l, l, o, 中, 国, w, o, r, l, d, ]
– Hive
select split(‘hello中国world’, ‘’) ;
–返回[“h”,“e”,“l”,“l”,“o”,“中”,“国”,“w”,“o”,“r”,“l”,“d”,“”]
SQRT
– 当输入参数小于0时,同时为两种模式开启严格模式(odps.function.strictmode=true),
– 在普通模式下可能会报错,在Hive兼容模式下会返回NULL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select sqrt(a) from values (-100.0) t(a);
– 报错,输入参数小于0

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select sqrt(a) from values (-100.0) t(a);
– 返回NULL
Hive
select sqrt(-100.0);
– 返回NULL

SUBSTR
– 当输入参数中的起始位置为0时,普通模式下返回空字符串,Hive兼容模式下与起始位置为1时相同。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select substr(a, 0) from values (‘hello, world’) t(a);
– 返回空字符串

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select substr(a, 0) from values (‘hello, world’) t(a);
– 返回如下结果:
±----+
| _c0 |
±----+
| hello, world |
±----+
Hive
select substr(‘hello, world’, 0);
– 返回如下结果:
±----+
| _c0 |
±----+
| hello, world |
±----+

UNIX_TIMESTAMP
– 普通模式下不支持两个输入参数类型为STRING,会报错;Hive兼容模式下支持两个STRING类型的输入参数,
– 如下所示,返回值为BIGINT类型,通过format指定时间格式,时间格式请参见SimpleDateFormat。
– bigint FROM_UNIXTIME(string timeString, String format)
– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;
select unix_timestamp(a) from values (‘99999-01-01 00:00:00’);
– 报错,输入参数不合法

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;
select unix_timestamp(a) from values (‘99999-01-01 00:00:00’);
– 返回NULL
– Hive
select unix_timestamp(‘2022/7/8’, ‘yyyy/mm/dd’);
–返回结果如下:
±-----------+
| _c0 |
±-----------+
| 1641571620 |
±-----------+
select unix_timestamp(‘99999-01-01 00:00:00’) ;
–返回:3093496416000
select unix_timestamp(‘99999-01-01 00:00:00’);
–返回:3093496416000

URL_DECODE
– 当输入参数不合法时,且同时为两种模式开启严格模式(odps.function.strictmode=true),
– 普通模式返回可能会报错,Hive兼容模式返回NULL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;

select url_decode(a) from values (‘%2’) t(a);
– 报错,输入参数不合法

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;

select url_decode(a) from values (‘%2’) t(a);
– 返回NULL

– Hive不支持该函数。
URL_ENCODE
– 当输入参数不合法或者转换失败时,且同时为两种模式开启严格模式(odps.function.strictmode=true),
– 普通模式返回可能会报错,Hive兼容模式返回NULL。

– 示例如下。
– 普通模式
set odps.sql.hive.compatible=false;
set odps.function.strictmode=true;

select url_encode(a, ‘ascii’) from values (‘示例’) t(a);
– 报错,输入参数不合法

– Hive兼容模式
set odps.sql.hive.compatible=true;
set odps.function.strictmode=true;

select url_encode(a, ‘ascii’) from values (‘示例’) t(a);
– 返回NULL
– Hive不支持该函数。

相关文章:

普通和hive兼容模式下sql的差异

–odps sql –– –author:宋文理 –create time:2023-03-08 15:23:52 –– – 差异分为三块 – 1.运算符的差异 – 2.类型转换的差异 – 3.内建函数的差异 – 以下是运算符的差异&#xff1a; – BITAND&#xff08;&&#xff09; – 当输入参数是BIGINT类型的时候&…...

github开源自己代码

接下来&#xff0c;我们需要先下载Git&#xff0c;的网址&#xff1a;https://git-scm.com/downloads&#xff0c;安装时如果没有特殊需求&#xff0c;一直下一步就可以了&#xff0c;安装完成之后&#xff0c;双击打开Git Bash 出现以下界面&#xff1a; 第一步&#xff1a;…...

数据库基础语法

sql&#xff08;Structured Query Language 结构化查询语言&#xff09; SQL语法 use DataTableName; 命令用于选择数据库。set names utf8; 命令用于设置使用的字符集。SELECT * FROM Websites; 读取数据表的信息。上面的表包含五条记录&#xff08;每一条对应一个网站信息&…...

【Java】期末复习知识点总结(4)

适合Java期末的复习~ &#xff08;Java期末复习知识点总结分为4篇&#xff0c;这里是最后一篇啦&#xff09;第一篇~https://blog.csdn.net/qq_53869058/article/details/129417537?spm1001.2014.3001.5501第二篇~https://blog.csdn.net/qq_53869058/article/details/1294751…...

IDEA好用插件:MybatisX快速生成接口实体类mapper.xml映射文件

目录 1、在Idea中找到下载插件&#xff0c;Install&#xff0c;重启Idea 2、一个测试java文件&#xff0c;里面有com包 3、在Idea中添加数据库 --------以Oracle数据库为例 4、快速生成entity-service-mapper方法 5、查看生成的代码 6、自动生成&#xff08;增删查改&#xff0…...

【JavaEE】初识线程

一、简述进程认识线程之前我们应该去学习一下“进程" 的概念&#xff0c;我们可以把一个运行起来的程序称之为进程&#xff0c;进程的调度&#xff0c;进程的管理是由我们的操作系统来管理的&#xff0c;创建一个进程&#xff0c;操作系统会为每一个进程创建一个 PCB&…...

智慧水务监控系统-智慧水务信息化平台建设

平台概述柳林智慧水务监控系统&#xff08;智慧水务信息化平台&#xff09;是以物联感知技术、大数据、智能控制、云计算、人工智能、数字孪生、AI算法、虚拟现实技术为核心&#xff0c;以监测仪表、通讯网络、数据库系统、数据中台、模型软件、前台展示、智慧运维等产品体系为…...

【Linux】进程优先级前后台理解

环境&#xff1a;centos7.6&#xff0c;腾讯云服务器Linux文章都放在了专栏&#xff1a;【Linux】欢迎支持订阅&#x1f339;相关文章推荐&#xff1a;【Linux】冯.诺依曼体系结构与操作系统【Linux】进程理解与学习&#xff08;Ⅰ&#xff09;浅谈Linux下的shell--BASH【Linux…...

时序预测 | MATLAB实现基于EMD-GRU时间序列预测(EMD分解结合GRU门控循环单元)

时序预测 | MATLAB实现基于EMD-GRU时间序列预测(EMD分解结合GRU门控循环单元) 目录 时序预测 | MATLAB实现基于EMD-GRU时间序列预测(EMD分解结合GRU门控循环单元)效果一览基本描述模型描述程序设计参考资料效果一览...

python 模拟鼠标,键盘点击

信息爆炸 消息轰炸模拟鼠标和键盘敲击import time from pynput.keyboard import Controller as key_col from pynput.mouse import Button,Controller def keyboard_input(insertword):keyboardkey_col()keyboard.type(insertword)def mouth():mouseController()mouse.press(…...

【CSS】盒子边框 ③ ( 设置表格细线边框 | 合并相邻边框 border-collapse: collapse; )

文章目录一、设置表格细线边框1、表格示例2、合并相邻边框3、完整代码示例一、设置表格细线边框 1、表格示例 给定一个 HTML 结构中的表格 , 默认样式如下 : <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8" />…...

TensorRT量化工具pytorch_quantization代码解析(一)

量化工具箱pytorch_quantization 通过提供一个方便的 PyTorch 库来补充 TensorRT &#xff0c;该库有助于生成可优化的 QAT 模型。该工具包提供了一个 API 来自动或手动为 QAT 或 PTQ 准备模型。 API 的核心是 TensorQuantizer 模块&#xff0c;它可以量化、伪量化或收集张量的…...

【Kubernetes】第二十七篇 - 布署前端项(下)

一&#xff0c;前言 上一篇&#xff0c;介绍了前端项目的部署&#xff1a;项目的创建和 jenkins 配置&#xff1b; 本篇&#xff0c;创建 Deployment、Service&#xff0c;完成前端项目的部署&#xff1b; 二&#xff0c;创建 Deployment 创建 Deployment 配置文件&#xff…...

【MFC】两个ListBox控件数据交互

一.控件ID名称 界面如图下所示&#xff1a; 候选数据列表的ID为&#xff1a; 已选数据列表的ID为&#xff1a; 二.数据添加 可以使用以下代码往框中添加数据&#xff1a; ((CListBox *)GetDlgItem(IDC_LIST_TO_CHO))->AddString("测试数据"); 显示效果如下&#…...

sklearn库学习--SelectKBest 、f_regression

目录 一、SelectKBest 介绍、代码使用 介绍&#xff1a; 代码使用&#xff1a; 二、评分函数 【1】f_regression&#xff1a; &#xff08;1&#xff09;介绍&#xff1a; &#xff08;2&#xff09;F值和相关系数 【2】除了f_regression函数&#xff0c;还有一些适用于…...

蓝桥杯刷题第十三天

第一题&#xff1a;特殊日期问题描述对于一个日期&#xff0c;我们可以计算出年份的各个数位上的数字之和&#xff0c;也可以分别计算月和日的各位数字之和。请问从 1900 年 11 月 1 日至 9999 年 12 月 31 日&#xff0c;总共有多少天&#xff0c;年份的数位数字之和等于月的数…...

CPU 和带宽之间的时空权衡

在 从一道面试题看 TCP 的吞吐极限 一文的开始&#xff0c;我提到在环形域上两个数字比较大小的前提是在同一个半圆内&#xff0c;进而得到滑动窗口最大值被限定在一个环形域的一半。 现在来看更为基本的问题。如果序列号只有 2bit&#xff0c;甚至仅有 1bit&#xff0c;保序传…...

ES+Redis+MySQL,这个高可用架构设计太顶了!

一、背景 会员系统是一种基础系统&#xff0c;跟公司所有业务线的下单主流程密切相关。如果会员系统出故障&#xff0c;会导致用户无法下单&#xff0c;影响范围是全公司所有业务线。所以&#xff0c;会员系统必须保证高性能、高可用&#xff0c;提供稳定、高效的基础服务。 …...

【Maven】Maven的常用命令

目录 一、Maven的常用命令 1、compile 编译命令 2、test 测试命令 3 、clean 清理命令 4、package 打包命令 5、 install 安装命令 6、Maven 指令的生命周期 二、maven 的概念模型 &#x1f49f; 创作不易&#xff0c;不妨点赞&#x1f49a;评论❤️收藏&#x1f499;一…...

python的循环结构

python中有for循环和while循环两种形式。 1. for 循环 可以用for循环来遍历不同类型的对象&#xff0c;如数组、列表、元组、字典、集合或字符串&#xff0c;并对每个元素执行一段代码。 1.1 数组的for循环 用for循环遍历一个数组&#xff0c;并打印出每个元素&#xff1a;…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议&#xff08;EPSFD 2025&#xff09;将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会&#xff0c;EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本&#xff1a; 3.8.1 语言&#xff1a; JavaScript/TypeScript、C、Java 环境&#xff1a;Window 参考&#xff1a;Java原生反射机制 您好&#xff0c;我是鹤九日&#xff01; 回顾 在上篇文章中&#xff1a;CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词

Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵&#xff0c;其中每行&#xff0c;每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid&#xff0c;其中有多少个 3 3 的 “幻方” 子矩阵&am…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架&#xff0c;允许使用简单的变成模型跨计算机对大型集群进行分布式处理&#xff08;1.海量的数据存储 2.海量数据的计算&#xff09;Hadoop核心组件 hdfs&#xff08;分布式文件存储系统&#xff09;&a…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...