云服务器内容精选
-
查询分区 查询分区p2019。 1 2 SELECT * FROM web_returns_p1 PARTITION (p2019); SELECT * FROM web_returns_p1 PARTITION FOR (20201231); 查看分区表信息,可使用系统表dba_tab_partitions。 1 SELECT * FROM dba_tab_partitions where table_name='web_returns_p1';
-
分割一个分区 范围分区表和列表分区表分割分语法有所区别: 使用ALTER TABLE语句为范围分区表分割一个分区。例如,将表web_returns_p1分区pxxxx以20201231为分割点分割为p2020和p20xx两个分区。 1 ALTER TABLE web_returns_p1 SPLIT PARTITION pxxxx AT(20201231) INTO (PARTITION p2020,PARTITION p20xx); 使用ALTER TABLE语句为列表分区表分割一个分区。例如,将表sales_info分区province2_202201分割为province3_202201和province4_202201两个分区。 1 ALTER TABLE sales_info SPLIT PARTITION province2_202201 VALUES(('202201', 'city5')) INTO (PARTITION province3_202201,PARTITION province4_202201);
-
创建列表(list)分区表 LIST分区表可以使用任意允许值比较的列作为分区键列。创建LIST分区表时,必须要为每一个分区声明每一个值分区。 示例:创建LIST分区表sales_info。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE sales_info ( sale_time timestamptz, period int, city text, price numeric(10,2), remark varchar2(100) ) DISTRIBUTE BY HASH(sale_time) PARTITION BY LIST (period, city) ( PARTITION province1_202201 VALUES (('202201', 'city1'), ('202201', 'city2')), PARTITION province2_202201 VALUES (('202201', 'city3'), ('202201', 'city4'), ('202201', 'city5')), PARTITION rest VALUES (DEFAULT) );
-
对已有的表进行分区 表只能在创建时被分区。 如果用户有一个表想要分区,用户必须创建一个分过区的表,把原始表的数据载入到新表,再删除原始表并且把分过区的表重命名为原始表的名称。 用户还必须重新授权表上的权限。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE web_returns_p2 ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer ) WITH (orientation = column) DISTRIBUTE BY HASH (wr_item_sk) PARTITION BY RANGE(wr_returned_date_sk) ( PARTITION p2016 START(20161231) END(20191231) EVERY(10000), PARTITION p0 END(maxvalue) ); 1 2 3 4 5 INSERT INTO web_returns_p2 SELECT * FROM web_returns_p1; DROP TABLE web_returns_p1; ALTER TABLE web_returns_p2 RENAME TO web_returns_p1; GRANT ALL PRIVILEGES ON web_returns_p1 TO dbadmin; GRANT SELECT ON web_returns_p1 TO jack;
-
分区策略选择 当表有以下特征时,可以考虑使用表分区策略: 数据具有明显区间性的字段。 分区表需要根据有明显区间性字段进行表分区。比如按照日期、区域、数值等字段进行分区,时间字段是最常见的分区字段。 业务查询有明显的区间范围特征。 查询数据可落到区间范围指定的分区内,这样才能通过分区剪枝,只扫描查询需要的分区,从而提升数据扫描效率,降低数据扫描的IO开销。 表数据量比较大。 小表扫描本身耗时不大,分区表的性能收益不明显,因此只建议对大表采取分区策略。列存储模式下因为每个列是单独的文件存储,且最小的存储单元CU可存储6w行数据,因此对于列存分区表,建议每个分区的数据不小于DN个数*6w。
-
创建范围(range)分区表 示例:创建一个按wr_returned_date_sk范围分区的表web_returns_p1。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE web_returns_p1 ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer ) WITH (orientation = column) DISTRIBUTE BY HASH (wr_item_sk) PARTITION BY RANGE (wr_returned_date_sk) ( PARTITION p2016 VALUES LESS THAN(20161231), PARTITION p2017 VALUES LESS THAN(20171231), PARTITION p2018 VALUES LESS THAN(20181231), PARTITION p2019 VALUES LESS THAN(20191231), PARTITION pxxxx VALUES LESS THAN(maxvalue) ); 对于分区间隔固定、批量创建分区的场景。可使用如下示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE web_returns_p2 ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer ) WITH (orientation = column) DISTRIBUTE BY HASH (wr_item_sk) PARTITION BY RANGE(wr_returned_date_sk) ( PARTITION p2016 START(20161231) END(20191231) EVERY(10000), PARTITION p0 END(maxvalue) ); 示例:创建一个按时间日期作为分区的表web_returns_p2,其中time作为分区键。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE web_returns_p2 ( id integer, idle numeric, IO numeric, scope text, IP text, time timestamp ) WITH (TTL='7 days',PERIOD='1 day') PARTITION BY RANGE(time) ( PARTITION P1 VALUES LESS THAN('2022-01-05 16:32:45'), PARTITION P2 VALUES LESS THAN('2022-01-06 16:56:12') );
-
分区策略选择 当表有以下特征时,可以考虑使用表分区策略: 数据具有明显区间性的字段。 分区表需要根据有明显区间性字段进行表分区。比如按照日期、区域、数值等字段进行分区,时间字段是最常见的分区字段。 业务查询有明显的区间范围特征。 查询数据可落到区间范围指定的分区内,这样才能通过分区剪枝,只扫描查询需要的分区,从而提升数据扫描效率,降低数据扫描的IO开销。 表数据量比较大。 小表扫描本身耗时不大,分区表的性能收益不明显,因此只建议对大表采取分区策略。列存储模式下因为每个列是单独的文件存储,且最小的存储单元CU可存储6w行数据,因此对于列存分区表,建议每个分区的数据不小于DN个数*6w。
-
创建范围(range)分区表 示例:创建一个按wr_returned_date_sk范围分区的表web_returns_p1。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE web_returns_p1 ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer ) WITH (orientation = column) DISTRIBUTE BY HASH (wr_item_sk) PARTITION BY RANGE (wr_returned_date_sk) ( PARTITION p2016 VALUES LESS THAN(20161231), PARTITION p2017 VALUES LESS THAN(20171231), PARTITION p2018 VALUES LESS THAN(20181231), PARTITION p2019 VALUES LESS THAN(20191231), PARTITION pxxxx VALUES LESS THAN(maxvalue) ); 对于分区间隔固定、批量创建分区的场景。可使用如下示例: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE web_returns_p2 ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer ) WITH (orientation = column) DISTRIBUTE BY HASH (wr_item_sk) PARTITION BY RANGE(wr_returned_date_sk) ( PARTITION p2016 START(20161231) END(20191231) EVERY(10000), PARTITION p0 END(maxvalue) ); 示例:创建一个按时间日期作为分区的表web_returns_p2,其中time作为分区键。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE web_returns_p2 ( id integer, idle numeric, IO numeric, scope text, IP text, time timestamp ) WITH (TTL='7 days',PERIOD='1 day') PARTITION BY RANGE(time) ( PARTITION P1 VALUES LESS THAN('2022-01-05 16:32:45'), PARTITION P2 VALUES LESS THAN('2022-01-06 16:56:12') );
-
创建列表(list)分区表 LIST分区表可以使用任意允许值比较的列作为分区键列。创建LIST分区表时,必须要为每一个分区声明每一个值分区。 示例:创建LIST分区表sales_info。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 CREATE TABLE sales_info ( sale_time timestamptz, period int, city text, price numeric(10,2), remark varchar2(100) ) DISTRIBUTE BY HASH(sale_time) PARTITION BY LIST (period, city) ( PARTITION province1_202201 VALUES (('202201', 'city1'), ('202201', 'city2')), PARTITION province2_202201 VALUES (('202201', 'city3'), ('202201', 'city4'), ('202201', 'city5')), PARTITION rest VALUES (DEFAULT) );
-
对已有的表进行分区 表只能在创建时被分区。 如果用户有一个表想要分区,用户必须创建一个分过区的表,把原始表的数据载入到新表,再删除原始表并且把分过区的表重命名为原始表的名称。 用户还必须重新授权表上的权限。例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE web_returns_p2 ( wr_returned_date_sk integer, wr_returned_time_sk integer, wr_item_sk integer NOT NULL, wr_refunded_customer_sk integer ) WITH (orientation = column) DISTRIBUTE BY HASH (wr_item_sk) PARTITION BY RANGE(wr_returned_date_sk) ( PARTITION p2016 START(20161231) END(20191231) EVERY(10000), PARTITION p0 END(maxvalue) ); 1 2 3 4 5 INSERT INTO web_returns_p2 SELECT * FROM web_returns_p1; DROP TABLE web_returns_p1; ALTER TABLE web_returns_p2 RENAME TO web_returns_p1; GRANT ALL PRIVILEGES ON web_returns_p1 TO dbadmin; GRANT SELECT ON web_returns_p1 TO jack;
-
分割一个分区 范围分区表和列表分区表分割分语法有所区别: 使用ALTER TABLE语句为范围分区表分割一个分区。例如,将表web_returns_p1分区pxxxx以20201231为分割点分割为p2020和p20xx两个分区。 1 ALTER TABLE web_returns_p1 SPLIT PARTITION pxxxx AT(20201231) INTO (PARTITION p2020,PARTITION p20xx); 使用ALTER TABLE语句为列表分区表分割一个分区。例如,将表sales_info分区province2_202201分割为province3_202201和province4_202201两个分区。 1 ALTER TABLE sales_info SPLIT PARTITION province2_202201 VALUES(('202201', 'city5')) INTO (PARTITION province3_202201,PARTITION province4_202201);
-
查询分区 查询分区p2019。 1 2 SELECT * FROM web_returns_p1 PARTITION (p2019); SELECT * FROM web_returns_p1 PARTITION FOR (20201231); 查看分区表信息,可使用系统表dba_tab_partitions。 1 SELECT * FROM dba_tab_partitions where table_name='web_returns_p1';
-
查看数据库中包含的表 例如,在PG_TABLES系统表中查看public schema中包含的所有表。 1 SELECT distinct(tablename) FROM pg_tables WHERE SCHEMANAME = 'public'; 结果类似如下这样: 1 2 3 4 5 6 7 8 9 tablename ------------------- err_hr_staffs test err_hr_staffs_ft3 web_returns_p1 mig_seq_table films4 (6 rows)
-
查看和停止正在运行的查询语句 通过视图PG_STAT_ACTIVITY可以查看正在运行的查询语句。方法如下: 设置参数track_activities为on。 1 SET track_activities = on; 当此参数为on时,数据库系统才会收集当前活动查询的运行信息。 查看正在运行的查询语句。以查看正在运行的查询语句所连接的数据库名、执行查询的用户、查询状态及查询对应的PID为例: 1 SELECT datname, usename, state,pid FROM pg_stat_activity; 如果state字段显示为idle,则表明此连接处于空闲,等待用户输入命令。 如果仅需要查看非空闲的查询语句,则使用如下命令查看: 1 SELECT datname, usename, state FROM pg_stat_activity WHERE state != 'idle'; 若需要取消运行时间过长的查询,通过PG_TERMINATE_BACKEND函数,根据线程ID结束会话。 1 SELECT PG_TERMINATE_BACKEND(139834759993104); 显示类似如下信息,表示结束会话成功。 1 2 3 4 PG_TERMINATE_BACKEND ---------------------- t (1 row) 显示类似如下信息,表示用户执行了结束当前会话的操作。 1 2 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command gsql客户端使用PG_TERMINATE_BACKEND函数结束当前会话后台线程时,客户端不会退出而是自动重连。即还会返回“The connection to the server was lost. Attempting reset: Succeeded.” 1 2 3 FATAL: terminating connection due to administrator command FATAL: terminating connection due to administrator command The connection to the server was lost. Attempting reset: Succeeded.
-
查看视图 查看MyView视图,查询结果为当前实时数据。 1 SELECT * FROM myview; 查看当前用户下的视图。 1 SELECT * FROM user_views; 查看所有视图。 1 SELECT * FROM dba_views; 查看某视图的具体信息。 执行如下命令查询dba_users视图的详细信息。 1 2 3 4 5 6 7 8 \d+ dba_users View "PG_CATA LOG .DBA_USERS" Column | Type | Modifiers | Storage | Description ----------+-----------------------+-----------+----------+------------- USERNAME | CHARACTER VARYING(64) | | extended | View definition: SELECT PG_AUTHID.ROLNAME::CHARACTER VARYING(64) AS USERNAME FROM PG_AUTHID;
更多精彩内容
CDN加速
GaussDB
文字转换成语音
免费的服务器
如何创建网站
域名网站购买
私有云桌面
云主机哪个好
域名怎么备案
手机云电脑
SSL证书申请
云点播服务器
免费OCR是什么
电脑云桌面
域名备案怎么弄
语音转文字
文字图片识别
云桌面是什么
网址安全检测
网站建设搭建
国外CDN加速
SSL免费证书申请
短信批量发送
图片OCR识别
云数据库MySQL
个人域名购买
录音转文字
扫描图片识别文字
OCR图片识别
行驶证识别
虚拟电话号码
电话呼叫中心软件
怎么制作一个网站
Email注册网站
华为VNC
图像文字识别
企业网站制作
个人网站搭建
华为云计算
免费租用云托管
云桌面云服务器
ocr文字识别免费版
HTTPS证书申请
图片文字识别转换
国外域名注册商
使用免费虚拟主机
云电脑主机多少钱
鲲鹏云手机
短信验证码平台
OCR图片文字识别
SSL证书是什么
申请企业邮箱步骤
免费的企业用邮箱
云免流搭建教程
域名价格