Oracle 如何给大表添加带有默认值的字段

一、讲故事

你是否遇到过开发人员添加字段,导致数据库锁表问题?
但是令开发疑惑的事,他们添加字段,有的时候很快,有的时候很慢? 为什么呢?
询问得知,**加的慢时候是带上了default默认值,如果表的数据量很大,那么会花费很长时间。在加字段期间,表上还会加6级锁,连select都会被阻塞。**这在生产系统是不可接受的。
所以,任何DDL操作,都应该询问DBA是否有风险。

从11g开始,这种情况有了明显的改善。Oracle 11g引入了元数据唯一默认值的概念。如果增加的列符合default+not null这两个条件的话,它只会去更新数据字典,不会去更新物理行,所以操作可以很短的时间完成,且不会对生产产生影响。读取列数据的时候优化器重写新列的查询,以确保结果与默认定义一致。
注意:这两个条件(列符合default且not null)缺一不可,否则还是会很慢。

从Oracle 12c更进一步,允许元数据默认值not null 可选,因此,在现有表中添加带有默认子句的新列将被作为一个元数据来处理,而不管该列是否被定义not null,两种方式操作都很快。

二、讲实战

1. 模拟大表

SQL> drop table test1; #执行这个sql前,需要确认test1表是不是能删除。表名可以自己换成别的表。Table dropped.SQL> create table test as select * from dba_objects;Table created.SQL> insert into test1 select * from test;79699 rows created
.....
SQL> insert into test1 select * from test;1275200 rows created.SQL> commit;Commit complete.--11g 环境下表初始大小:
SQL> select bytes from user_segments where segment_name='TEST1';BYTES
----------301989888--19c 环境下表初始大小:SQL> select bytes from user_segments where segment_name='TEST1';BYTES
----------739246080

2. 11g 环境下测试

2.1 增加字段

情况1:只有default值
-- 不加not null约束
SQL> alter table test1 add a varchar2(100) default 'aa';Table altered.Elapsed: 00:00:42.62SQL> select count(*) from test1 where a='aa';COUNT(*)
----------2550400
Elapsed: 00:00:00.24SQL> select bytes from user_segments where segment_name='TEST1';BYTES
----------578813952Elapsed: 00:00:00.01
情况2:default+not null
--加上not null 约束   
SQL> alter table test1 add b varchar2(100) default 'bb' not null;Table altered.Elapsed: 00:00:00.04SQL> select count(*) from test1 where b='bb';COUNT(*)
----------2550400Elapsed: 00:00:00.23SQL> select bytes from user_segments where segment_name='TEST1';BYTES
----------578813952Elapsed: 00:00:00.01

可以看到:

1.default+not null 的执行时间远小于只有default值的情况。

2.default+not null 表的大小也没有变化,说明表并没有实际去更新物理行,只是更新了数据字典。

这是11g对新增一个not null字段带有默认值进行了优化,默认值以及对应的表信息、列信息一起存储在一个新增数据字典表ecol$中 。

2.2 查询test1表中添加的默认值

SQL> select object_id from dba_objects where object_name = 'TEST1' and owner='SXC';OBJECT_ID
----------97662SQL> set line222
SQL> select colnum,binarydefval from ecol$ where tabobj#= 97662;COLNUM BINARYDEFVAL
---------- ----------------------------------17 6262
SQL> desc ecol$Name                                      Null?    Type----------------------------------------- -------- ----------------------------TABOBJ#                                           NUMBERCOLNUM                                            NUMBERBINARYDEFVAL                                        BLOB-- 注意:binarydefval 是blob 类型,所有实际存储的值并不是数值6262,可以通过下面的存储过程查看真实存储的值是bb 
SQL> SET SERVEROUT ON
SQL> 
SQL> DECLARE2    V_BLOB VARCHAR2(32767) DEFAULT '6262';3    BEGIN4    FOR I IN 1..LENGTH(V_BLOB)/2 LOOP5    DBMS_OUTPUT.PUT(CHR(TO_NUMBER(SUBSTR(V_BLOB, (I-1) * 2 + 1, 2), 'XXX')));6    END LOOP;7    DBMS_OUTPUT.NEW_LINE;8    END;9    /
bbPL/SQL procedure successfully completed.     

2.3 对比执行计划

如果我们从表中检索对应的列时候,我们对比一下执行计划:

情况1:只有default值
SQL> select count(*) from test1 where a='aa';COUNT(*)
----------2550368SQL> select * from table(dbms_xplan.display_cursor);PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  b91qrsffc9t3d, child number 0
-------------------------------------
select count(*) from test1 where a='aa'Plan hash value: 3896847026----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time      |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |       |       |  9972 (100)|    |
|   1 |  SORT AGGREGATE    |       |     1 |    52 |           |   |PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|*  2 |   TABLE ACCESS FULL| TEST1 |  2886K|   143M|  9972   (1)| 00:02:00 |
----------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - filter("A"='aa')Note
------ dynamic sampling used for this statement (level=2)PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------23 rows selected.

结论:采用filter(“A”=‘aa’) 过滤的方式,直接读取列数据。

情况2:default+not null
SQL> select count(*) from test1 where b='bb';COUNT(*)
----------2550368SQL> select * from table(dbms_xplan.display_cursor);PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  9xurwt6ytwjf0, child number 0
-------------------------------------
select count(*) from test1 where b='bb'Plan hash value: 3896847026----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |       |       |  9974 (100)|   |
|   1 |  SORT AGGREGATE    |       |     1 |    52 |          |    |PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|*  2 |   TABLE ACCESS FULL| TEST1 |  2886K|   143M|  9974   (1)| 00:02:00 |
----------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - filter(NVL("B",'bb')='bb')Note
------ dynamic sampling used for this statement (level=2)PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------23 rows selected.

结论:采用filter(NVL(“B”,‘bb’)=‘bb’)方式过滤,读取列数据,但是oracle认为default+not null 的方式添加的列是空列,所以用nvl函数做了一次转换。

※思考?
1、如果我们在列上建索引呢?
SQL> create index idx1 on test1 (b);Index created.SQL> select count(*) from test1 where b='bb';COUNT(*)
----------2550368SQL> select * from table(dbms_xplan.display_cursor);PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  9xurwt6ytwjf0, child number 0
-------------------------------------
select count(*) from test1 where b='bb'Plan hash value: 325870156------------------------------------------------------------------------------
| Id  | Operation             | Name | Rows  | Bytes | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT      |      |       |       |  1391 (100)|          |
|   1 |  SORT AGGREGATE       |      |     1 |    52 |            |          |PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------------------------
|*  2 |   INDEX FAST FULL SCAN| IDX1 |  2886K|   143M|  1391   (1)| 00:00:17 |
------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - filter(NVL("B",'bb')='bb')Note
------ dynamic sampling used for this statement (level=2)PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------------------------23 rows selected.

结论:虽然从全表扫描变成索引扫描,但是一样是NVL(“B”,‘bb’)='bb’方式过滤数据。

2、后续新增加的数据呢?
-- 增加2行数据,一个用默认值,一个不用默认值。
SQL> select * from test1 where owner='T';no rows selectedSQL> insert into test1 (owner,b) values ('T',default);1 row created.SQL> insert into test1 (owner,b) values ('T','bbb');1 row created.SQL> commit;Commit complete.--访问默认值,查看执行计划
SQL> select owner,b from test1 where  owner='T' and b='bb';OWNER    B
----------------------------------------
T      bbSQL> select * from table(dbms_xplan.display_cursor);PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  dyd1zgs10jr16, child number 0
-------------------------------------
select owner,b from test1 where  owner='T' and b='bb'Plan hash value: 4122059633---------------------------------------------------------------------------
| Id  | Operation         | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |       |       |       |  9974 (100)|    |
|*  1 |  TABLE ACCESS FULL| TEST1 |   287 | 19803 |  9974   (1)| 00:02:00  |PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------1 - filter(("OWNER"='T' AND NVL("B",'bb')='bb'))Note
------ dynamic sampling used for this statement (level=2)22 rows selected.--访问非默认值,查看执行计划
SQL> select owner,b from test1 where  owner='T' and b='bbb';OWNER    B
----------------------------------------
T      bbbSQL> select * from table(dbms_xplan.display_cursor);PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  5mbna21dqafdw, child number 0
-------------------------------------select owner,b from test1 where  owner='T' and b='bbb'Plan hash value: 2734693028-------------------------------------------------------------------------------------
| Id  | Operation                   | Name  | Rows  | Bytes | Cost (%CPU)| Time      |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |       |       |       |     9 (100)  |   |
|*  1 |  TABLE ACCESS BY INDEX ROWID| TEST1 |   287 | 19803 |     9   (0)| 00:00:01      |PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------------------------
|*  2 |   INDEX RANGE SCAN          | IDX1  |   403 |       |     3   (0)| 00:00:01 |
-------------------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------1 - filter("OWNER"='T')2 - access(NVL("B",'bb')='bbb')Note
-----PLAN_TABLE_OUTPUT
-------------------------------------------------------------------------------------------------------------------------------------------------- dynamic sampling used for this statement (level=2)24 rows selected.

结论:新增的数据,执行计划中一样都是采用NVL(“B”,‘bb’)='bb’方式。

2.4 表压缩后限制

1. 添加列报错

表压缩之后,default+not null是可以操作的;但是只有default是不行的。

SQL> alter table test1 compress;Table altered.SQL> alter table test1 add c number default 3 not null;Table altered.SQL> alter table test1 add d number default 4;
alter table test1 add d number default 4*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables

解决办法:但是这种方法,只有之后新插入的行才是有值的,之前已经存在的行是没有的,还是空,所以需要找时间批量提交修改。

SQL> alter table test1 add d number;Table altered.SQL> alter table test1 modify d number default 4;Table altered.SQL> select count(*) from test1 where d=4;COUNT(*)
----------0-- 可以批量更改
SQL> update test1 set d=4 where d is null;2550368 rows updated.SQL> commit;Commit complete.
2. 删除列报错
-- 直接drop column报错
SQL> alter table test1 drop column c;
alter table test1 drop column c*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables-- 尝试先把列设成unused方式,再删除一样报错
SQL> alter table test1 set unused column c;Table altered.SQL> alter table test1 drop unused columns;
alter table test1 drop unused columns
*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables

结论:根据Doc ID 1574318.1 描述,暂时没有好的解决方法,只能针对oltp compress 方式可以删除列。

SQL> alter table t2 compress for oltp;  --加上for oltpTable altered.SQL> alter table t2 drop column id;Table altered.SQL> alter table t2 compress;Table altered.SQL> alter table t2 drop column T1_ID;
alter table t2 drop column T1_ID*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables

官方文档:
在这里插入图片描述

3. 在Oracle19C 环境下测试

3.1 增加字段

情况1:只有default值
-- 不加not null约束
SQL> alter table test1 add a varchar2(100) default 'aa';Table altered.Elapsed: 00:00:00.02SQL> select count(*) from test1 where a='aa';COUNT(*)
----------4643072Elapsed: 00:00:01.05SQL> select bytes from user_segments where segment_name='TEST1';BYTES
----------739246080Elapsed: 00:00:00.01
情况2:default+not null
--加上not null 约束   
SQL> alter table test1 add b varchar2(100) default 'bb' not null;Table altered.Elapsed: 00:00:00.06SQL> select count(*) from test1 where b='bb';COUNT(*)
----------4643072Elapsed: 00:00:00.23SQL> select bytes from user_segments where segment_name='TEST1';BYTES
----------739246080Elapsed: 00:00:00.01

可以看到:

1.和11g不一样,default+not null 和只加default 速度一样快。

2.两种方式表的大小都没有变化,说明表都没有实际去更新物理行,都只是更新了数据字典。

3.2 查询test1表中添加的默认值

SQL> select object_id from dba_objects where object_name = 'TEST1' and owner='SXC';OBJECT_ID
----------73797SQL> set line222
SQL> select colnum,binarydefval from ecol$ where tabobj#= 73797;COLNUM BINARYDEFVAL
---------- -----------------------28 616129 6262-- 比11g 多出一行,不管是否有加上not null 条件,都被存储到了ecol$表中。SQL> SET SERVEROUT ON
SQL> DECLARE2    V_BLOB VARCHAR2(32767) DEFAULT '6161';3    BEGIN4    FOR I IN 1..LENGTH(V_BLOB)/2 LOOP5    DBMS_OUTPUT.PUT(CHR(TO_NUMBER(SUBSTR(V_BLOB, (I-1) * 2 + 1, 2), 'XXX')));6    END LOOP;7    DBMS_OUTPUT.NEW_LINE;8    END;9    /
aaSQL> DECLARE2    V_BLOB VARCHAR2(32767) DEFAULT '6262';3    BEGIN4    FOR I IN 1..LENGTH(V_BLOB)/2 LOOP5    DBMS_OUTPUT.PUT(CHR(TO_NUMBER(SUBSTR(V_BLOB, (I-1) * 2 + 1, 2), 'XXX')));6    END LOOP;7    DBMS_OUTPUT.NEW_LINE;8    END;9    /
bbPL/SQL procedure successfully completed.     

3.3 对比执行计划

如果我们从表中检索对应的列时候,我们对比一下执行计划:

情况1:只有default值
SQL> select count(*) from test1 where a='aa';COUNT(*)
----------4643072SQL> select * from table(dbms_xplan.display_cursor);PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  12bwjcp0zanhm, child number 0
-------------------------------------select count(*) from test1 where a='aa'Plan hash value: 3896847026----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |       |       |   394 (100)|   |
|   1 |  SORT AGGREGATE    |       |     1 |     3 |            |  |
|*  2 |   TABLE ACCESS FULL| TEST1 | 72548 |   212K|   394   (1)| 00:00:01  |
----------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - filter(DECODE(TO_CHAR(SYS_OP_VECBIT("SYS_NC00027$",0)),NULL,NVL("A",'aa'),'0',NVL("A",'aa'),'1',"A")='aa')20 rows selected.Elapsed: 00:00:14.13

结论:和11g 不一样,这里即采用了nvl函数转化,也多了一个隐藏列SYS_NC00027$,通过下面的SQL可以查询到。这个隐藏列是在添加default的列的时候增加的,添加default+not null 的列没有。

SQL> select column_name,column_id,hidden_column,virtual_column from dba_tab_cols where table_name='TEST1' and owner='SXC';COLUMN_NAME                     COLUMN_ID HIDDEN VIRTUA
---------------------------------------- ------ ------------------
OWNER                          1      NO      NO
...
MODIFIED_VSNID                    26     NO      NO
SYS_NC00027$                            YES     NO    -- 隐藏列
A                             27      NO     NO
B                             28      NO     NO
情况2:default+not null
SQL> select count(*) from test1 where b='bb';COUNT(*)
----------4643072SQL> select * from table(dbms_xplan.display_cursor);PLAN_TABLE_OUTPUT
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL_ID  9xurwt6ytwjf0, child number 0
-------------------------------------
select count(*) from test1 where b='bb'Plan hash value: 3896847026----------------------------------------------------------------------------
| Id  | Operation          | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
----------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |       |       |       |   394 (100)|   |
|   1 |  SORT AGGREGATE    |       |     1 |     3 |        |      |
|*  2 |   TABLE ACCESS FULL| TEST1 | 72548 |   212K|   394   (1)| 00:00:01  |
----------------------------------------------------------------------------Predicate Information (identified by operation id):
---------------------------------------------------2 - filter(NVL("B",'bb')='bb')19 rows selected.Elapsed: 00:00:01.22

结论:和11g 方式一样,都是采用filter(NVL(“B”,‘bb’)=‘bb’)过滤,读取列数据,并且使用了nvl函数。

※思考?
1、如果我们在列上建索引呢?
2、后续新增加的数据呢?

结论:测试下来,大体结果和11g 一样。 都会使用隐藏列SYS_NC00027$和NVL函数转化。

3.4 表压缩后限制

1. 添加列
SQL> alter table test1 compress;Table altered.SQL> alter table test1 add c number default 3 not null;Table altered.SQL> alter table test1 add d number default 4;Table altered.

结论:和11g不一样,19c表compress之后, 两种方式都能添加列 。

但是,在12c环境下,表compress之后, 两种方式都不能添加列 。

SQL> create table T1 ( a number, b varchar2(10) ) compress ;Table created.SQL> alter table T1 add c varchar2(20) default 'test' not null ;
alter table T1 add c varchar2(20) default 'test' not null*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tablesSQL> alter table T1 add c varchar2(20) default 'test' ;
alter table T1 add c varchar2(20) default 'test'*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables
2. 删除列报错
-- 直接drop column报错
SQL> alter table test1 drop column c;
alter table test1 drop column c*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables-- 尝试先把列设成unused方式,再删除一样报错
SQL> alter table test1 set unused column c;Table altered.SQL> alter table test1 drop unused columns;
alter table test1 drop unused columns
*
ERROR at line 1:
ORA-39726: unsupported add/drop column operation on compressed tables

结论:和11g一样,暂时没有好的解决方法,只能针对oltp compress 方式可以删除列。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/105771.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【洛谷】P2440 木材加工

原题链接:https://www.luogu.com.cn/problem/P2440 1. 题目描述 2. 思路分析 整体思路:二分答案 设置一个变量longest来记录最长木头的长度,sum记录切成的小段数量之和。 令左边界l0,右边界llongest。 写一个bool类型的check…

【云原生】Docker的数据管理(数据卷、容器互联)

目录 一、数据卷(容器与宿主机之间数据共享) 二、数据卷容器(容器与容器之间数据共享) 三、 容器互联(使用centos镜像) 总结 用户在使用Docker的过程中,往往需要能查看容器内应用产生的数据…

联合注入步骤

使用场景: 有回显,可以看到某些字段的回显信息 像下面的有具体的回显信息 一、判断注入位点 在原始的id(参数)的输入后面添加额外的条件 如果and 11 有结果,and10没有结果输出, 就说明我们添加的额外条件…

2023最新AI创作系统ChatGPT网站源码V2.6.0+详细图文搭建安装教程/GPT联网/支持ai绘画+Dall-E2绘画/支持MJ以图生图

一、AI系统 如何搭建部署AI创作ChatGPT系统呢?小编这里写一个详细图文教程吧! SparkAi使用Nestjs和Vue3框架技术,持续集成AI能力到AIGC系统! 程序核心功能 程序已支持ChatGPT3.5/4.0提问、AI绘画、Midjourney绘画(…

solidity0.8.0的应用案例12:通用可升级合约UUPS

代理合约中选择器冲突(Selector Clash)的另一个解决办法:通用可升级代理(UUPS,universal upgradeable proxy standard)。代码由OpenZeppelin的UUPSUpgradeable简化而成,不应用于生产。 UUPS 作为透明代理的替代方案,UUPS也能解决"选择器冲突"(Selector Cl…

论文阅读_模型结构_LoRA

name_en: LoRA: Low-Rank Adaptation of Large Language Models name_ch: LORA:大语言模型的低阶自适应 paper_addr: http://arxiv.org/abs/2106.09685 date_read: 2023-08-17 date_publish: 2021-10-16 tags: [‘深度学习’,‘大模型’] author: Edward J. Hu cita…

2023谷歌开发者大会直播大纲「初稿」

听人劝、吃饱饭,奉劝各位小伙伴,不要订阅该文所属专栏。 作者:不渴望力量的哈士奇(哈哥),十余年工作经验, 跨域学习者,从事过全栈研发、产品经理等工作,现任研发部门 CTO 。荣誉:2022年度博客之星Top4、博客专家认证、全栈领域优质创作者、新星计划导师,“星荐官共赢计…

【C++】开源:Box2D动力学库配置与使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Box2D动力学库配置与使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&#xff0c…

EasyExcel自定义字段对象转换器支持转换实体和集合实体

文章目录 1. 实现ObjectConverter2. 使用3. 测试3.2 导出excel3.1 导入excel 1. 实现ObjectConverter package com.tophant.cloud.common.excel.converters;import cn.hutool.json.JSONUtil; import com.alibaba.excel.converters.Converter; import com.alibaba.excel.enums.…

远程连接虚拟机中ubuntu报错:Network error:Connection refused

ping检测一下虚拟机 可以ping通,说明主机是没问题 #检查ssh是否安装: ps -e |grep ssh发现ssh没有安装 #安装openssh-server sudo apt-get install openssh-server#启动ssh service ssh startps -e |grep ssh检查一下防火墙 #防火墙状态查看 sudo ufw…

汽车电子笔记之:AUTOSA架构下的多核OS操作系统

目录 1、AUTOSAR多核操作系统 1.1、OS Application 1.2、多核OS的软件分区 1.3、任务调度 1.4、核间任务同步 1.5、计数器、报警器、调度表 1.6、自旋锁与共享资源 1.7、核间通信IOC 1.8、OS Object中元素交互 1.9、多核OS的启动与关闭 2、多核OS注意事项 2.1、最小…

Kaggle(3):Predict CO2 Emissions in Rwanda

Kaggle(3):Predict CO2 Emissions in Rwanda 1. Introduction 在本次竞赛中,我们的任务是预测非洲 497 个不同地点 2022 年的二氧化碳排放量。 在训练数据中,我们有 2019-2021 年的二氧化碳排放量 本笔记本的内容&am…

云安全攻防(十三)之 使用minikube安装搭建 K8s 集群

使用minikube安装搭建 K8s 集群 Kubernetes 是一个可移植的、可扩展的开源平台,用于管理容器化的工作负载和服务,可促进声明式配置和自动化,一般来说K8s安装有三种方式,分别是Minikube装搭建 K8s 集群,特点是只有一个节点的集群&…

限时 180 天,微软为 RHEL 9 和 Ubuntu 22.04 推出 SQL Server 2022 预览评估版

导读近日消息,微软公司今天发布新闻稿,宣布面向 Red Hat Enterprise Linux(RHEL)9 和 Ubuntu 22.04 两大发行版,以预览模式推出 SQL Server 2022 评估版。 近日消息,微软公司今天发布新闻稿,宣布…

Android webView混合内容导致视频播放失败

如果你的网页中有混合内容(即同时使用了HTTPS和HTTP),可能会导致WebView无法加载视频 解决办法: 1 尝试将所有内容都切换到HTTPS。 2 尝试设置以下配置来提高视频播放的兼容性: webView.getSettings().setMediaPlay…

Spring Boot(Vue3+ElementPlus+Axios+MyBatisPlus+Spring Boot 前后端分离)【二】

😀前言 本篇博文是关于Spring Boot(Vue3ElementPlusAxiosMyBatisPlusSpring Boot 前后端分离)【二】的,希望你能够喜欢 🏠个人主页:晨犀主页 🧑个人简介:大家好,我是晨犀,希望我的文…

homeassistant ubuntu自启动 网络设置

命令行安装virtualbox 或者安装包 hass官网下载 haos_ova-10.4.vdi virtualbox 装hass 最少2G内存 其他省略 自启动: gnome-session-properties 添加 VBoxManage startvm hass --type headless hass为自己的虚拟机名字 网络配置如下: 要全部打开

记录一次presto sql执行报错 Error executing query的解决办法

在执行presto sql 时报错截图如下: 查看后台执行报错日志: java.sql.SQLException: Error executing query at com.facebook.presto.jdbc.PrestoStatement.internalExecute(PrestoStatement.java:307) at com.facebook.presto.jdbc.PrestoStatement.exe…

7个用于机器学习和数据科学的基本 Python 库

推荐:使用 NSDT场景编辑器 助你快速搭建3D应用场景 这篇文章针对的是刚开始使用Python进行AI的人,以及那些有经验的人,但对下一步要学习什么有疑问的人。我们将不时花点时间向初学者介绍基本术语和概念。如果您已经熟悉它们,我们鼓…

Python科研绘图--Task03

目录 图类型 关系类型图 散点图的例子 数据分布型图 rugplot例子 分类数据型图 ​编辑回归模型分析型图 多子图网格型图 FacetGrid() 函数 PairGrid() 函数 绘图风格、颜色主题和绘图元素缩放比例 绘图风格 颜色主题 绘图元素缩放比列 图类型 关系类型图 数据集变量…