华为云用户手册

  • 后续操作 域名 验证。 您必须配合完成域名验证来证明您对所申请绑定的域名的所有权,详细操作请参见域名验证。 (OV、EV)组织验证。 验证您是否发起了证书申请,详细操作请参见组织验证。 签发证书。 以上操作完成后,请您耐心等待,CA机构将还需要一段时间进行处理。CA机构审核通过后,将会签发证书。 安装证书。 将已签发的续费证书安装到您的Web服务器或部署到 华为云产品 ,替换即将过期的旧证书,详细操作请参见安装SSL证书。 查看续费证书是否安装成功。 续费证书安装到Web服务器后,可通过浏览器查看证书是否已更新。 通过Web浏览器访问您的网站。 单击浏览器地址栏的,查看证书的有效期是否已更新。 如果证书有效期已显示为新证书的有效期,表示您的续费证书已完成更新。 图1 有效期
  • 下载地址 目前仅支持下载部分品牌和证书类型的根证书,具体的下载地址如下 : DigiCert-DV-TLS-CA-G1 DigiCert-EV-root DigiCert-OV-DV-root GeoTrust-CN-RSA-CA-G1 GeoTrust-EV-CN-RSA-G1 GlobalSign-R3-root DigiCert Global Root G2 DigiCert Global RootCA
  • 约束条件 如果资源所有者与您属于同一组织,且启用“启用与组织共享资源”功能,将自动获得共享资源的访问权限,无需接受邀请。 如果资源所有者与您不属于同一组织,或者属于同一组织但未启用“启用与组织共享资源”功能,将收到加入资源共享实例的邀请。 资源共享实例的邀请默认保留7天,如果在到期前未接受邀请,系统会自动拒绝邀请,如还需使用共享资源,请再次创建共享实例以生成新的邀请。 若需要启用“启用与组织共享资源”功能,具体操作请参见启用与组织共享资源。
  • SSL证书所有者和接受者权限说明 所有者可以对SSL证书执行任何操作,接受者仅可以执行部分操作,接受者支持的操作说明如表 SSL证书接受者支持的操作列表所示。 表1 SSL证书接受者支持的操作列表 角色 支持的操作 操作说明 接受者 scm:cert:get 通过控制台或API进行访问 scm:cert:getApplicationInfo 通过控制台或API进行访问 scm:cert:getDomainValidation 通过控制台或API进行访问 scm:cert:listDeployedResources 通过控制台或API进行访问 scm:cert:listCertificatesByTag 通过控制台或API进行访问 scm:cert:listTagsByCertificate 通过控制台或API进行访问 scm:cert:listAllTags 通过控制台或API进行访问 scm:cert:push 通过控制台或API进行访问 scm:cert:listPushHistory 通过控制台或API进行访问 scm:cert:enableAutoDeploy 通过控制台或API进行访问 scm:cert:listAutoDeployedResources 通过控制台或API进行访问 scm:cert:deployResources 通过控制台或API进行访问 scm:cert:listDeployResourcesHistory 通过控制台或API进行访问 scm:cert:getDeployQuota 通过控制台或API进行访问
  • SCM自定义策略样例 示例1:授权用户下载证书 { "Version": "1.1", "Statement": [ { "Action": [ "scm:cert:download" ], "Effect": "Allow" } ] } 示例2:拒绝用户删除证书 拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先原则。 如果您给用户授予“SCM Administrator”的系统策略,但不希望用户拥有“SCM Administrator”中定义的删除证书权限,您可以创建一条拒绝删除证书的自定义策略,然后同时将“SCM Administrator”和拒绝策略授予用户,根据Deny优先原则,则用户可以对证书执行除了删除证书外的所有操作。拒绝策略示例如下: { "Version": "1.1", "Statement": [ { "Action": [ "scm:cert:delete" ], "Effect": "Deny" } ] } 示例3:多个授权项策略 一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下: { "Version": "1.1", "Statement": [ { "Action": [ "scm:cert:complete", "scm:cert:push", "cdn:configuration:queryHttpsConf" ], "Effect": "Allow" } ] }
  • 域名验证概述 证书提交申请后,您需要进行域名授权验证。按照CA中心的规范,如果您申请了SSL证书,您必须配合完成域名验证来证明您对所申请绑定的域名的所有权。 当您按照要求正确配置域名验证信息,待域名授权验证完成,CA系统中心审核通过后,才会签发证书。 如果不完成域名验证,您的证书将无法通过审核,且您的证书申请将会一直显示“待完成域名验证”的状态。 华为云SSL证书管理提供以下几种方式,根据您申请证书时,选择的验证方式进行操作: 表1 域名验证方式 验证方式 说明 适用场景 自动DNS验证 指您授权SCM服务修改域名的DNS解析记录,自动在解析记录中添加一条用于验证记录,无需您手动修改域名解析记录。 购买的是DV(域名型)证书; 绑定域名是在华为云上申请的域名,且已使用华为云云解析服务(Domain Name Service); 以上条件必须全部满足系统才会进行自动DNS验证。 手动DNS验证 指您需要在域名的DNS解析服务商手动修改域名的DNS解析记录,在解析记录中添加一条用于验证的记录。 您有权限修改域名的DNS解析设置(即拥有域名管理权限); 申请证书时,域名验证方式选择了手动DNS验证(DV型证书无需此项)。 邮箱验证 即您登录域名管理员邮箱,接收域名确认邮件并回复CA机构发送的域名确认邮件。 您有权限登录域名管理员邮箱(即拥有域名管理权限)。 文件验证 指由您手动从SCM控制台获取证书验证文件,然后在服务器的网站根目录下创建指定文件。 购买的是IP证书 您有权限向网站所在服务器的根目录写入内容(即拥有服务器管理权限)。 服务器开放了80或443端口,支持监听HTTP、HTTPS访问。 注意: 目前CA机构仅支持向80或443端口发起认证请求。如果您的服务器未开放80或443端口,则请勿使用文件验证方式。 父主题: 域名验证
  • 操作步骤 请登录您在申请证书时填写的联系人邮箱。 打开来自CA机构的组织验证邮件。 回复CA机构的邮件以选择组织验证方式。 组织验证包括电话、 企业邮箱 、律师函方式等,其中律师函方式需要额外收费500元。请根据您的实际情况进行选择。 如果需要更改组织验证方式,请直接回复CA中心的邮件。 请您留意所选择的验证方式,配合CA机构进行处理。 例如,您选择的组织验证方式为电话验证,则CA机构将通过企业/组织的公开电话与您联系,请您留意并及时进行处理。
  • 操作步骤 登录您申请域名的域名管理员邮箱。 打开来自CA机构的域名确认邮件。 CA机构发送域名确认邮件需要大约一个工作日。如您短时间内未收到域名确认邮件,请耐心等待。如一个工作日后仍未收到邮件,请检查域名管理员邮箱正确性。 预留域名管理员邮箱地址配置错误:需要您撤回当前 SSL证书申请 ,并重新配置邮箱地址信息,具体操作请参见撤回SSL证书申请,是否撤回成功以华为云SSL证书列表呈现最终状态为准。 预留域名管理员邮箱地址配置无误:一个工作日后仍未收到邮件,请您提工单联系我们,并在工单中进行描述。 单击邮件中的认证按钮,完成域名验证。 验证完成后,CA机构可能还需要一段时间审核域名信息。在此期间,证书状态为“待完成域名验证”。 如您已完成域名验证操作,由于CA机构需要2-3个工作日对您提交的信息进行验证,请您耐心等待。CA机构审核通过后,证书审核才可以进入“待完成组织验证”状态。
  • 步骤三:查看验证配置是否生效 打开浏览器,访问URL地址“https://yourdomain/.well-known/pki-validation/fileauth.txt”或“http://yourdomain/.well-known/pki-validation/fileauth.txt”。 请将URL地址中的yourdomain替换成您申请证书时绑定的域名。 如果您的域名是普通域名,则请参照以下方法进行操作: 例如,如果您的域名为example.com,则访问的URL地址为:https://example.com/.well-known/pki-validation/fileauth.txt或http://example.com/.well-known/pki-validation/fileauth.txt 如果您的域名为泛域名,则请参照以下方法进行操作: 例如,如果您的域名为*.domain.com,则访问的URL地址为:https://domain.com/.well-known/pki-validation/fileauth.txt或http://domain.com/.well-known/pki-validation/fileauth.txt 确认验证URL地址在浏览器中是否可正常访问,且页面中显示的内容和订单进度页面中的记录值是否内容一致。 如果界面回显的记录值与SSL证书管理控制台的域名验证页面中显示记录值中显示的记录值一致,则说明域名授权验证已生效。 如果界面回显信息不一致,则说明域名授权验证未生效。 如果配置未生效,请从以下几方面进行排查和处理: 检查该验证URL地址是否在HTTPS可访问的地址中存在。如果存在,请在浏览器中使用HTTPS重新访问,如果浏览器提示“证书不可信”或者显示的内容不正确,请您暂时关闭该域名的HTTPS服务。 确保该验证URL地址在任何一个地方都能正确访问。由于有些品牌的检测服务器均在国外,请确认您的站点是否有国外镜像,或者是否使用了智能DNS服务。 检查该验证URL地址是否存在301或302跳转。如存在此类重定向跳转,请取消相关设置关闭跳转。 您可使用wget -S URL地址命令检测该验证URL地址是否存在跳转。
  • SSL证书使用概述 华为云SSL证书提供多个品牌和类型的证书,详情请参见各证书之间的区别。本文档介绍如何购买和使用华为云SSL证书。 您的网站使用SSL证书后,将会通过HTTPS加密协议来传输数据,可帮助服务器端和客户端之间建立加密链接,从而保证数据传输的安全。 相关流程如图 证书使用流程所示,具体说明如表 证书使用流程说明所示。 图1 证书使用流程 表1 证书使用流程说明 步骤 操作 说明 1 购买SSL证书 在SSL证书管理平台,根据您的域名类型选购对应的证书。 各类型证书之间的区别以及选择请参见各类型SSL证书之间的区别、如何选择SSL证书?。 2 提交SSL证书申请 成功购买证书后,您需要为证书绑定域名、填写证书申请人的详细信息并提交审核。 3 域名验证 按照CA中心的规范,证书提交申请后您需要配合完成域名授权验证来证明您对所申请绑定域名的所有权。 SCM提供有以下几种验证方式: 自动DNS验证:符合条件的证书可选。 手动DNS验证:所有类型证书均可选。 邮箱验证:仅OV、EV型证书可选。 文件验证:仅IP证书支持。 4 组织验证(OV、EV) 仅当申请OV、OV Pro、EV和EV Pro类型证书时,需要该操作。 域名验证完成后,CA机构需要确认企业/组织是否发起了此次的证书订单申请。 5 签发SSL证书 验证完成后,CA机构还需要一段时间进行处理,请您耐心等待。具体申请时间请参见各证书的申请时长。 CA机构审核通过后,将签发证书。证书自签发之时开始生效,有效期为1年。 6 安装SSL证书 证书签发后,您可以一键部署证书到华为云其他云产品或下载证书并安装到服务器上进行使用。 将证书部署到其他云产品后,将帮助您提升对应云产品访问数据的安全性。 SSL证书安装到Web服务器后,您的Web服务器才能实现HTTPS加密通信,实现通信安全。 7 续费SSL证书 自2020年9月1日起,全球CA机构颁发的SSL证书有效期最长为一年,证书到期后将不再被浏览器信任,建议您提前开通自动续费或在证书即将到期前三十天进行手动续费,避免因证书过期对您的业务产生影响。 SSL证书续费操作相当于重新申请了一张与原证书规格(即证书品牌、证书类型、域名类型、域名数量、主域名)完全相同的证书。证书续费后,您需要将续费签发的新证书重新安装到您的Web服务器或部署到华为云其他云产品,替换即将过期的旧证书。 8 吊销SSL证书 如果您不再需要某张已签发的SSL证书或某张SSL证书密钥丢失或出于其他安全因素考虑,可以在SSL证书管理控制台申请吊销证书。 吊销证书指将已签发的证书从CA签发机构处注销。证书吊销后将失去加密效果,浏览器不再信任该证书。
  • 约束与限制 满足以下条件(必须全部满足)的SSL证书订单,可申请退订: 您通过华为云SSL证书管理控制台购买了SSL证书。 距离SSL证书订单下单时间(完成支付的时间)不超过7个自然日,即距离SSL证书订单完成支付时间顺延不超过7*24小时。 例如,12月1日12:00完成SSL证书订单支付,则在12月8日11:59前可以退订,12月8日11:59后将不支持退订。 购买7天后不支持退款。 已购买的SSL证书符合以下情况之一: 未提交证书申请,证书状态为“待申请”。 提交过证书申请,证书未签发,且已取消申请,证书状态为“待申请”。 提交过证书申请,证书已签发,且在下单后7个自然日内完成了证书吊销流程(不仅是提交了吊销申请,须完成吊销流程),证书状态为“已吊销”。 全额退款将退还您在购买SSL证书时所支付的费用。 退款仅限于退还您在购买或续费SSL证书或相关服务订单时所支付的费用,代金券、优惠券抵扣的部分不支持退回。 多年期证书,第一张证书已签发,并在下单后7个自然日内完成了证书吊销流程,支持全额退订。
  • 后续处理 提交审核后,证书颁发机构将向您填写的邮箱发送一封域名验证邮件,您需要按照需求进行域名验证。如果您不进行域名验证,您的证书将一直处于“CA审核中(追加域名)”状态,且您的证书将无法通过审核。验证时间根据不同CA中心的要求而不同,请您关注您的邮箱和电话,及时回馈能有效缩短您的数字证书的验证时间。 新增附加域名仅需进行域名验证,待域名验证完成,CA系统中心审核通过后,即可签发证书。 域名验证详细操作请参见域名验证。
  • SCM支持 云审计 的操作列表 云审计服务记录SSL证书管理相关的操作事件,如表1所示。 表1 云审计服务支持的SCM操作列表 操作名称 资源类型 事件名称 修改证书 scm modifyScmCert 新建证书订单 scm createScmNewCert 购买证书 scm purchaseScmCert 上传用户认证信息 scm uploadScmUserMessage 补全证书信息 scm completeScmCert 下载证书 scm downloadScmCert 删除证书 scm deleteScmCert 取消证书审核 scm cancelScmCert 吊销证书 scm revokeScmCert 上传证书 scm uploadScmCert 推送证书到ELB scm pushScmCertToELB 父主题: SCM关键操作审计管理
  • 示例流程 图1 给用户授权SCM权限流程 创建用户组并授权 在 IAM 控制台创建用户组,并授予SSL证书管理服务的管理员权限“SCM Administrator”。 创建用户并加入用户组 在IAM控制台创建用户,并将其加入1中创建的用户组。 用户登录并验证权限 新创建的用户登录控制台,切换至授权区域,验证权限: 在“服务列表”中选择 云证书管理服务 ,如果未提示权限不足,表示“SCM Administrator”已生效。
  • sequence创建流程 GaussDB (DWS)中,GTM(Global Transaction Manager,即全局事务管理器)负责生成和维护全局事务ID、事务快照、sequence等需要全局唯一的信息。sequence在GaussDB(DWS)中的创建流程如下图所示: 图1 sequence创建流程 具体过程为: 接收SQL命令的CN从GTM申请UUID。 GTM返回一个UUID。 CN将获取的UUID与用户创建的sequenceName绑定。 CN将绑定关系下发到其他节点上,其他节点同步创建sequence元数据表。 CN将UUID和sequence的startID发送到GTM端,在GTM行进行永久保存。 因此,sequence的维护和申请实际是在GTM上完成的。当申请nextval,每个执行nextval调用的实例会根据该sequence的UUID到GTM上申请序列值,每次申请的序列值范围与cache有关,只有当cache消耗完之后才会继续到GTM上申请。因此,增大sequence的cache有利于减少CN/DN与GTM通信的次数。
  • sequence相关的典型优化场景 业务场景: 某业务场景中使用 CDM 数据同步工具进行数据迁移,从源端入库目标端GaussDB(DWS)。导入速率与经验值相差较大,业务将CDM并发从1调整为5,同步速率仍无法提升。查看语句执行情况,除COPY入库外,其余业务均正常执行,无性能瓶颈,且观察无资源瓶颈,因此初步判断为该业务自身存在瓶颈,查看该表COPY相关的作业等待视图情况: 如上图所示,由于CDM作业执行了5个并发,因此在活跃视图中可以看到5个COPY语句,根据这5个COPY语句对应的query_id查看等待视图情况。查看到这5个COPY中,同一时刻,仅有1个COPY在向GTM申请序列值,其余的COPY在等待轻量级锁。因此,即使作业中开启了5并发在运行,实际效果较1并发并没有带来明显提升。 问题原因: 目标表在建表时使用了serial类型,默认创建的sequence的cache为1,导致在并发COPY入库时,CN频繁与GTM建连,且多个并发之间存在轻量锁争抢,导致数据同步效率低。 解决方案: 此种场景下可以调大sequence的cache值,防止频繁GTM建联带来的瓶颈。本业务场景示例中,业务每次同步的数据量在10万左右,根据业务评估,将cache值修改为10000(实际使用时应根据业务设置合理的cache值,既能保证快速访问,又不会造成序列号浪费)。 8.2.1.100及以上集群版本中支持使用ALTER SEQUENCE的方式修改cache值。 8.2.1及之前低版本集群中GaussDB(DWS)不支持通过ALTER SEQUENCE的方式修改cache值,可以通过如下方式修改已有sequence的cache值,以mytable表为例: 解除当前sequence与目标表的关联关系 1 2 ALTER SEQUENCE mytable_b_seq owned by none; ALTER TABLE mytable alter b drop default; 记录当前sequence值,作为新建sequence的start value。 1 SELECT nextval('mytable_b_seq'); 删除sequence。 1 DROP SEQUENCE mytable_b_seq; 新建sequence并绑定目标表,xxx替换为上一步查到的nextval值。 1 2 3 CREATE SEQUENCE mytable_b_seq START with xxx cache 10000 owned by mytable.b; ALTER SEQUENCE mytable_b_seq owner to u1;--u1为mytable表的属主,如果当前用户即为属主,可不执行此语句。 ALTER TABLE mytable alter b set default nextval('mytable_b_seq');
  • 创建sequence的两种方式 方式一:使用CREATE SEQUENCE语句创建序列,在新建的表中通过nextval调用。 1 2 3 4 5 CREATE SEQUENCE seq_test increment by 1 minvalue 1 no maxvalue start with 1; CREATE SEQUENCE CREATE TABLE table_1(id int not null default nextval('seq_test'), name text); CREATE TABLE 方式二:建表时使用serial类型,会自动创建一个sequence,并且会将该列的默认值设置为nextval。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE mytable(a int, b serial) distribute by hash(a); NOTICE: CREATE TABLE will create implicit sequence "mytable_b_seq" for serial column "mytable.b" CREATE TABLE \d+ mytable Table "dbadmin.mytable" Column | Type | Modifiers | Storage | Stats target | Description --------+---------+-----------------------------------------------------+---------+--------------+------------- a | integer | | plain | | b | integer | not null default nextval('mytable_b_seq'::regclass) | plain | | Has OIDs: no Distribute By: HASH(a) Location Nodes: ALL DATANODES Options: orientation=row, compression=no
  • 验证 在DWS新建的test数据库下,执行以下SQL语句查询表apex2_dynamic_add_remain_test的行数,如与源数据行数一致,说明数据一致。 1 SELECT COUNT(*) FROM db_user01.apex2_dynamic_add_remain_test; 执行以下语句检查数据倾斜率。 数据分布率在10%以内说明数据离散分布正常。数据迁移完成。 1 SELECT TABLE_SKEWNESS('db_user01.apex2_dynamic_add_remain_test'); 父主题: 迁移表全量数据
  • 创建时序表(手动设置分区边界) 手动指定分区边界的起始值。例如,手动设置默认的分区边界时间P1为“2022-05-30 16:32:45”、P2为“2022-05-31 16:56:12”,创建时序表GENERATOR1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE IF NOT EXISTS GENERATOR1( genset text TSTag, manufacturer text TSTag, model text TSTag, location text TSTag, ID bigint TSTag, voltage numeric TSField, power bigint TSField, frequency numeric TSField, angle numeric TSField, time timestamptz TSTime) with (orientation=TIMESERIES, period='1 day') distribute by hash(model) partition by range(time) ( PARTITION P1 VALUES LESS THAN('2022-05-30 16:32:45'), PARTITION P2 VALUES LESS THAN('2022-05-31 16:56:12') ); 查询当前时间: 1 2 3 4 select now(); now ------------------------------- 2022-05-31 20:36:09.700096+08(1 row) 查询分区以及分区边界: 1 2 3 4 5 6 7 8 SELECT relname, boundaries FROM pg_partition where parentid=(SELECT oid FROM pg_class where relname='generator1') order by boundaries ; relname | boundaries -------------+---------------------------- p1 | {"2022-05-30 16:32:45+08"} p2 | {"2022-05-31 16:56:12+08"} p1654073772 | {"2022-06-01 16:56:12+08"} p1654160172 | {"2022-06-02 16:56:12+08"} ......
  • 场景介绍 时序表继承普通表的行存和列存语法,降低了用户学习成本,易理解和使用。 时序表具备数据生命周期管理的能力,每天各种维度的数据爆炸式增长,需要定期给表增加新的分区,避免新数据无法存储。而对于很久之前的数据,其价值较低且不经常访问,可以定期删除无用的数据。因此时序表需要具备定时增加分区和定时删除分区的能力。 本实践主要讲解如何快速创建适合自己业务的时序表,并对时序表进行分区管理,从而真正发挥时序表的优势。将对应的列指定为合适的类型,能够帮助用户更好的提高导入、查询等场景的性能,让业务场景运行的更加高效。如下图所示,以发电机组数据采样为例: 图1 发电机组数据采样示意图
  • 查询指定SCHEMA下的表大小及表对应索引的大小 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 SELECT t.tablename, indexname, c.reltuples AS num_rows, pg_size_pretty(pg_relation_size(quote_ident(t.tablename)::text)) AS table_size, pg_size_pretty(pg_relation_size(quote_ident(indexrelname)::text)) AS index_size, CASE WHEN indisunique THEN 'Y' ELSE 'N' END AS UNIQUE, idx_scan AS number_of_scans, idx_tup_read AS tuples_read, idx_tup_fetch AS tuples_fetched FROM pg_tables t LEFT OUTER JOIN pg_class c ON t.tablename=c.relname LEFT OUTER JOIN ( SELECT c.relname AS ctablename, ipg.relname AS indexname, x.indnatts AS number_of_columns, idx_scan, idx_tup_read, idx_tup_fetch, indexrelname, indisunique FROM pg_index x JOIN pg_class c ON c.oid = x.indrelid JOIN pg_class ipg ON ipg.oid = x.indexrelid JOIN pg_stat_all_indexes psai ON x.indexrelid = psai.indexrelid ) AS foo ON t.tablename = foo.ctablename WHERE t.schemaname='public' ORDER BY 1,2;
  • 查询数据库大小 查询数据库的大小。 1 select datname,pg_size_pretty(pg_database_size(datname)) from pg_database; 示例: 1 2 3 4 5 6 7 select datname,pg_size_pretty(pg_database_size(datname)) from pg_database; datname | pg_size_pretty -----------+---------------- template1 | 61 MB template0 | 61 MB postgres | 320 MB (3 rows)
  • 快速查询全库中所有表占用空间大小 8.1.3及以上集群版本在大集群大数据量(表数量大于1000)场景下,如果进行全库表查询,建议优先使用pgxc_wlm_table_distribution_skewness视图,该视图可以查到全库内的各表空间使用情况以及数据倾斜分布情况。其中,total_size和avg_size的单位为字节(bytes)。 1 2 3 4 5 6 7 SELECT *, pg_size_pretty(total_size) as tableSize FROM pgxc_wlm_table_distribution_skewness ORDER BY total_size desc; schema_name | table_name | total_size | avg_size | max_percent | min_percent | skew_percent | tablesize --------------------+---------------------------------------------------+------------+-----------+-------------+-------------+--------------+----------- public | history_tbs_test_row_1 | 804347904 | 134057984 | 18.02 | 15.63 | 7.53 | 767 MB public | history_tbs_test_row_3 | 402096128 | 67016021 | 18.30 | 15.60 | 8.90 | 383 MB public | history_tbs_test_row_2 | 401743872 | 66957312 | 18.01 | 15.01 | 7.47 | 383 MB public | i_history_tbs_test_1 | 325263360 | 54210560 | 17.90 | 15.50 | 6.90 | 310 MB 查询结果显示history_tbs_test_row_1表占用空间最大,且数据有一定的倾斜。 视图pgxc_wlm_table_distribution_skewness需要打开GUC参数use_workload_manager和enable_perm_space才能进行查询,在低版本查询全库时建议使用table_distribution()函数,如果仅查询某一张表的大小,推荐使用table_distribution(schemaname text, tablename text)函数。 8.2.1及以上集群版本中,GaussDB(DWS)已支持pgxc_wlm_table_distribution_skewness视图,可直接查询。 在8.1.3集群版本中,可使用如下定义创建视图后再进行查询: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 CREATE OR REPLACE VIEW pgxc_wlm_table_distribution_skewness AS WITH skew AS ( SELECT schemaname, tablename, pg_catalog.sum(dnsize) AS totalsize, pg_catalog.avg(dnsize) AS avgsize, pg_catalog.max(dnsize) AS maxsize, pg_catalog.min(dnsize) AS minsize, (maxsize - avgsize) * 100 AS skewsize FROM pg_catalog.gs_table_distribution() GROUP BY schemaname, tablename ) SELECT schemaname AS schema_name, tablename AS table_name, totalsize AS total_size, avgsize::numeric(1000) AS avg_size, ( CASE WHEN totalsize = 0 THEN 0.00 ELSE (maxsize * 100 / totalsize)::numeric(5, 2) END ) AS max_percent, ( CASE WHEN totalsize = 0 THEN 0.00 ELSE (minsize * 100 / totalsize)::numeric(5, 2) END ) AS min_percent, ( CASE WHEN totalsize = 0 THEN 0.00 ELSE (skewsize / maxsize)::numeric(5, 2) END ) AS skew_percent FROM skew;
  • 查询数据库 使用gsql的\l元命令查看数据库系统的数据库列表。 1 2 3 4 5 6 7 8 9 10 \l List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+-------+-----------+---------+-------+------------------- gaussdb | Ruby | SQL_ASCII | C | C | template0 | Ruby | SQL_ASCII | C | C | =c/Ruby + | | | | | Ruby=CTc/Ruby template1 | Ruby | SQL_ASCII | C | C | =c/Ruby + | | | | | Ruby=CTc/Ruby (3 rows) 如果用户在数据库安装的时候没有指定LC_COLLATE、LC_CTYPE参数,则LC_COLLATE、LC_CTYPE参数的默认值为C。 如果用户在创建数据库时没有指定LC_COLLATE、LC_CTYPE参数,则默认使用模板数据库的排序顺序及字符分类。 详细内容可参见CREATE DATABASE参数说明。 通过系统表pg_database查询数据库列表。 1 2 3 4 5 6 7 SELECT datname FROM pg_database; datname ----------- template1 template0 gaussdb (3 rows)
  • 用户资源查询 查询所有用户的资源限额和资源使用情况。 1 SELECT * FROM PG_TOTAL_USER_RESOURCE_INFO; 例如,当前所有用户的资源使用情况如下: 1 2 3 4 5 6 7 username | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed ----------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+-------------+--------------+------------+------------- perfadm | 0 | 17250 | 0 | 0 | 0 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 usern | 0 | 17250 | 0 | 48 | 0 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 userg | 34 | 15525 | 23.53 | 48 | 0 | -1 | 0 | -1 | 814955731 | -1 | 6111952 | 1145864 | 763994 | 143233 | 42678 | 8001 userg1 | 34 | 13972 | 23.53 | 48 | 0 | -1 | 0 | -1 | 814972419 | -1 | 6111952 | 1145864 | 763994 | 143233 | 42710 | 8007 (4 rows) 查询具体某个用户的资源限额和资源使用情况。 1 SELECT * FROM GS_WLM_USER_RESOURCE_INFO('username'); 例如,查询Tom的资源使用情况: 1 2 3 4 5 SELECT * FROM GS_WLM_USER_RESOURCE_INFO('Tom'); userid | used_memory | total_memory | used_cpu | total_cpu | used_space | total_space | used_temp_space | total_temp_space | used_spill_space | total_spill_space | read_kbytes | write_kbytes | read_counts | write_counts | read_speed | write_speed -------+-------------+--------------+----------+-----------+------------+-------------+-----------------+------------------+------------------+-------------------+-------------+--------------+-------------+--------------+------------+------------- 16523 | 18 | 2831 | 0 | 19 | 0 | -1 | 0 | -1 | 0 | -1 | 0 | 0 | 0 | 0 | 0 | 0 (1 row) 查询具体某个用户的IO资源使用情况。 1 SELECT * FROM pg_user_iostat('username'); 例如,查询Tom的IO资源使用情况: 1 2 3 4 5 SELECT * FROM pg_user_iostat('Tom'); userid | min_curr_iops | max_curr_iops | min_peak_iops | max_peak_iops | io_limits | io_priority -------+---------------+---------------+---------------+---------------+-----------+------------- 16523 | 0 | 0 | 0 | 0 | 0 | None (1 row)
  • 普通用户 普通用户由SQL语句CREATE USER创建。不具有对表空间创建,修改,删除,分配权限,访问需要被赋权;仅对自己创建的表/模式/函数/自定义视图有所有权限,仅可以在自己的表上建索引,仅可查看部分系统表和系统视图。 数据库集群包含一个或多个已命名数据库。用户在整个集群范围内是共享的,但是其数据并不共享。 常见用户相关操作如下,此处使用的密码需要用户自定义: 创建用户。 1 CREATE USER Tom PASSWORD '{Password}'; 修改用户密码。 将用户Tom的登录密码由password修改为newpassword。 1 ALTER USER Tom IDENTIFIED BY 'newpassword' REPLACE '{Password}'; 给用户授权。 要创建有“创建数据库”权限的用户,需要加CREATEDB关键字。 1 CREATE USER Tom CREATEDB PASSWORD '{Password}'; 为用户追加CREATEROLE权限。 1 ALTER USER Tom CREATEROLE; 撤销权限。 1 REVOKE ALL PRIVILEGES FROM Tom; 锁定或解锁用户。 锁定Tom账户: 1 ALTER USER Tom ACCOUNT LOCK; 解锁Tom用户: 1 ALTER USER Tom ACCOUNT UNLOCK; 删除用户。 1 DROP USER Tom CASCADE;
  • 用户信息查询 涉及用户、角色及权限相关的系统视图有ALL_USERS、PG_USER和PG_ROLES,系统表有PG_AUTHID和PG_AUTH_MEMBERS。 ALL_USERS视图存储记录数据库中所有用户,但不对用户信息进行详细的描述。 PG_USER视图存储用户信息,包含用户ID,是否可以创建数据库以及用户所在资源池等信息。 PG_ROLES视图存储数据库角色的相关信息。 PG_AUTHID系统表存储有关数据库认证标识符(角色)的信息,包含角色是否可以登录,创建数据库等信息。 PG_AUTH_MEMBERS存储角色的成员关系,即某个角色组包含了哪些其他角色。 通过PG_USER可以查看数据库中所有用户的列表,还可以查看用户ID(USESYSID)和用户权限。 1 2 3 4 5 6 7 8 9 10 11 12 SELECT * FROM pg_user; usename | usesysid | usecreatedb | usesuper | usecatupd | userepl | passwd | valbegin | valuntil | respool | parent | spacelimit | useconfig | nodegroup | tempspacelimit | spillspacelim it ---------+----------+-------------+----------+-----------+---------+----------+----------+----------+--------------+--------+------------+-----------+-----------+----------------+-------------- --- Ruby | 10 | t | t | t | t | ******** | | | default_pool | 0 | | | | | kim | 21661 | f | f | f | f | ******** | | | default_pool | 0 | | | | | u3 | 22662 | f | f | f | f | ******** | | | default_pool | 0 | | | | | u1 | 22666 | f | f | f | f | ******** | | | default_pool | 0 | | | | | dbadmin | 16396 | f | f | f | f | ******** | | | default_pool | 0 | | | | | u5 | 58421 | f | f | f | f | ******** | | | default_pool | 0 | | | | | (6 rows) ALL_USERS视图存储记录数据库中所有用户,但不对用户信息进行详细的描述。 1 2 3 4 5 6 7 8 9 10 11 12 SELECT * FROM all_users; username | user_id ----------+--------- Ruby | 10 manager | 21649 kim | 21661 u3 | 22662 u1 | 22666 u2 | 22802 dbadmin | 16396 u5 | 58421 (8 rows) 系统表PG_ROLES存储访问数据库角色的相关信息。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 SELECT * FROM pg_roles; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolauditadmin | rolsystemadmin | rolconnlimit | rolpassword | rolvalidbegin | rolv aliduntil | rolrespool | rolparentid | roltabspace | rolconfig | oid | roluseft | rolkind | nodegroup | roltempspace | rolspillspace ---------+----------+------------+---------------+-------------+--------------+-------------+----------------+---------------+----------------+--------------+-------------+---------------+----- ----------+--------------+-------------+-------------+-----------+-------+----------+---------+-----------+--------------+--------------- Ruby | t | t | t | t | t | t | t | t | t | -1 | ******** | | | default_pool | 0 | | | 10 | t | n | | | manager | f | t | f | f | f | f | f | f | f | -1 | ******** | | | default_pool | 0 | | | 21649 | f | n | | | kim | f | t | f | f | f | t | f | f | f | -1 | ******** | | | default_pool | 0 | | | 21661 | f | n | | | u3 | f | t | f | f | f | t | f | f | f | -1 | ******** | | | default_pool | 0 | | | 22662 | f | n | | | u1 | f | t | f | f | f | t | f | f | f | -1 | ******** | | | default_pool | 0 | | | 22666 | f | n | | | u2 | f | t | f | f | f | f | f | f | f | -1 | ******** | | | default_pool | 0 | | | 22802 | f | n | | | dbadmin | f | t | f | f | f | t | f | f | t | -1 | ******** | | | default_pool | 0 | | | 16396 | f | n | | | u5 | f | t | f | f | f | t | f | f | f | -1 | ******** | | | default_pool | 0 | | | 58421 | f | n | | | (8 rows) 要查看用户属性,可查询系统表PG_AUTHID,它存储有关数据库认证标识符(角色)的信息。一个集群中只有一份pg_authid,并非每个数据库一份。需要有系统管理员权限才可以访问此系统表。 1 2 3 4 5 6 7 SELECT * FROM pg_authid; rolname | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolauditadmin | rolsystemadmin | rolconnlimit | rolpassword | rolvalidbegin | rolvaliduntil | rolrespool | roluseft | rolparentid | roltabspace | rolkind | rolnodegroup | roltempspace | rolspillspace | rolexcpdata | rolauthinfo ----------+----------+------------+---------------+-------------+--------------+-------------+----------------+---------------+----------------+--------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+---------------+---------------+--------------+----------+-------------+-------------+---------+--------------+--------------+---------------+-------------+------------- Ruby | t | t | t | t | t | t | t | t | t | -1 | sha256366f1e665be208e6015bc3c5795d13e4dc297a148dca6c60346018c80e5c04c9ba170384ce44609b31baa741f09a3ea5bedc7dadb906286ca994067c3fbf672dc08c981929e326ca08c005d8df942994e146ed3302af47000b36e9852b50e39dmd585de11aafebd90ec620b201fc36f07a5ecdficefade3a1456ec0aca9a0ee01e3bf2971d1dbafd604e596149e2e2928be4060dec2bd8688776588b4cd8c64fd38f1b0beab1603129fa396556ba8aa4c7d6e137a04623 | | | default_pool | t | 0 | | n | 0 | | | | sysadmin | f | t | f | f | f | t | f | f | t | -1 | sha256ecaa7f0ca4436143af43074f16cdd825783ad1a5d659fd94f5e2fa5124e7da44045ecf40bda1a97975fcf5920dca0c8be375be5c71b51cb1eeeba0851fb3648cfa49f55989f83fd9baf1a9d5853ce19125f4fc29a7c709c095ed02d00638410dmd556d6e2dcc41594dc7ad8ee909ef81637ecdficefadefd7d9704ee06affef9581cd6a50a546607f88891198e96a5e84e7e83dccf56c5cd20a500bbc5248e8ea51f0bca70c5a8dcf00953f8b62c7a181368153abce760 | | | default_pool | f | 0 | | n | | | | | Tom | f | t | f | t | f | t | f | f | f | -1 | sha256f43c4f52ac51e297bc4dbdbc751fcf05319c15681dbf5a9c5777d2edce45cb592a948b25457a728e99a3e0608592f33b0a4312eba6124936522304ba298caa2002a04578860fecb0286d7c7baec09365eafd049b2b99f74f21a08864dd7d3f2amd515ee49f0b18ef8e7d0cd27d91ce2fa9decdficefade16bab5f05b6d7c86a19ae6406cc59c437506c3f6187bfdf3eefc7a7c7033afa076361b255cc8b6ccb6e19d4767effaec654b3308cc72cebb891d00a4a10362da | | | default_pool | f | 0 | | n | | | | | (3 rows)
  • 系统管理员 在启动GaussDB(DWS)集群时创建的用户dbadmin是系统管理员,其拥有系统的最高权限,能够执行所有的操作(表空间,表,索引,模式,函数,自定义视图的操作权限及系统表和系统视图的查看权限)。 要创建新的数据库管理员,则以管理员用户身份连接数据库,并使用带SYSADMIN选项的CREATE USER语句或ALTER USER语句进行设置。 例如: 创建用户Jim为系统管理员。 1 CREATE USER Jim WITH SYSADMIN password '{Password}'; 修改用户Tom为系统管理员。(ALTER USER时,要求用户已存在。) 1 ALTER USER Tom SYSADMIN;
  • GDS实践指南 安装GDS前必须确认GDS所在服务器环境的系统参数是否和数据库集群的系统参数一致。 GDS与GaussDB(DWS)通信要求物理网络畅通,尽量使用万兆网。因为千兆网无法承载高速的数据传输压力,极易出现断连,使用千兆网时GaussDB(DWS)无法提供通信保障。满足万兆网的同时,要求数据磁盘组I/O性能大于GDS单核处理能力上限(约400MB/s),才能保证单文件导入速率最大化。 提前做好服务部署规划,数据服务器上,建议一个Raid只布1~2个GDS。GDS跟DN的数据比例建议在1:3至1:6之间。一台加载机的GDS进程不宜部署太多,千兆网卡部署1个GDS进程即可,万兆网卡机器建议部署不大于4个进程。 提前对GDS导入导出的数据目录做好层次划分,避免一个数据目录包含过多的文件,并及时清理过期文件。 合理规划目标数据库的字符集,强烈建议使用UTF8作为数据库的字符集,不建议使用sql_ascii编码,因为极易引起混合编码问题。GDS导出时保证外表的字符集和客户端字符集一致即可,导入时保证客户端编码,数据文件内容编码和客户端一致。 如果存在无法变更数据库,客户端,外表字符集时,可以尝试使用iconv命令进行手动转换。 1 2 #注意 -f 表示源文件的字符集,-t为目标字符集 iconv -f utf8 -t gbk utf8.txt -o gbk.txt 关于GDS导入实践可参考使用GDS导入数据。 GDS支持 CS V、TEXT、FIXED三种格式,缺省为TEXT格式。不支持二进制格式,但是可以使用encode/decode函数处理二进制类型。例如: 对二进制表导出: 1 2 3 4 5 6 7 8 9 10 11 12 --创建表。 CREATE TABLE blob_type_t1 ( BT_COL BYTEA ) DISTRIBUTE BY REPLICATION; -- 创建外表 CREATE FOREIGN TABLE f_blob_type_t1( BT_COL text ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:7789/', FORMAT 'text', DELIMITER E'\x08', NULL '', EOL '0x0a' ) WRITE ONLY; INSERT INTO blob_type_t1 VALUES(E'\\xDEADBEEF'); INSERT INTO blob_type_t1 VALUES(E'\\xDEADBEEF'); INSERT INTO blob_type_t1 VALUES(E'\\xDEADBEEF'); INSERT INTO blob_type_t1 VALUES(E'\\xDEADBEEF'); INSERT INTO f_blob_type_t1 select encode(BT_COL,'base64') from blob_type_t1; 对二进制表导入: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 --创建表。 CREATE TABLE blob_type_t2 ( BT_COL BYTEA ) DISTRIBUTE BY REPLICATION; -- 创建外表 CREATE FOREIGN TABLE f_blob_type_t2( BT_COL text ) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:7789/f_blob_type_t1.dat.0', FORMAT 'text', DELIMITER E'\x08', NULL '', EOL '0x0a' ); insert into blob_type_t2 select decode(BT_COL,'base64') from f_blob_type_t2; SELECT * FROM blob_type_t2; bt_col ------------ \xdeadbeef \xdeadbeef \xdeadbeef \xdeadbeef (4 rows) 对同一张外表重复导出会覆盖之前的文件,因此不要对同一个外表重复导出。 若不确定文件是否为标准的csv格式,推荐将quote参数设置为0x07,0x08或0x1b等不可见字符来进行GDS导入导出,避免文件格式问题导致任务失败。 1 2 3 4 5 CREATE FOREIGN TABLE foreign_HR_staffS_ft1 ( MANAGER_ID NUMBER(6), section_ID NUMBER(4) ) SERVER gsmpp_server OPTIONS (location 'file:///input_data/*', format 'csv', mode 'private', quote '0x07', delimiter ',') WITH err_HR_staffS_ft1; GDS支持并发导入导出,gds -t参数用于设置gds的工作线程池大小,控制并发场景下同时工作的工作线程数且不会加速单个sql任务。gds -t缺省值为8,上限值为200。在使用管道功能进行导入导出时,-t参数应不低于业务并发数。 GDS外表参数delimiter是多字符时,建议TEXT格式下字符不要完全相同。例如,不建议使用delimiter '---'。 GDS多表并行导入同一个文件提升导入性能(仅支持text和csv文件)。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 -- 创建目标表。 CREATE TABLE pipegds_widetb_1 (city integer, tel_num varchar(16), card_code varchar(15), phone_code varchar(16), region_code varchar(6), station_id varchar(10), tmsi varchar(20), rec_date integer(6), rec_time integer(6), rec_type numeric(2), switch_id varchar(15), attach_city varchar(6), opc varchar(20), dpc varchar(20)); -- 创建带有file_sequence字段的外表。 CREATE FOREIGN TABLE gds_pip_csv_r_1( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-1'); CREATE FOREIGN TABLE gds_pip_csv_r_2( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-2'); CREATE FOREIGN TABLE gds_pip_csv_r_3( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-3'); CREATE FOREIGN TABLE gds_pip_csv_r_4( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-4'); CREATE FOREIGN TABLE gds_pip_csv_r_5( like pipegds_widetb_1) SERVER gsmpp_server OPTIONS (LOCATION 'gsfs://127.0.0.1:8781/wide_tb.txt', FORMAT 'text', DELIMITER E'|+|', NULL '', file_sequence '5-5'); --将wide_tb.txt并发导入到pipegds_widetb_1。 \parallel on INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_1; INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_2; INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_3; INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_4; INSERT INTO pipegds_widetb_1 SELECT * FROM gds_pip_csv_r_5; \parallel off file_sequence参数详细内容,可参考CREATE FOREIGN TABLE (GDS导入导出)章节。 父主题: 导入导出
  • 设计调优后二次表创建 本节所附为调优表实践中进行了存储方式、压缩级别、分布方式和分布列选择后,二次建表语法。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 CREATE TABLE store_sales ( ss_sold_date_sk integer , ss_sold_time_sk integer , ss_item_sk integer not null, ss_customer_sk integer , ss_cdemo_sk integer , ss_hdemo_sk integer , ss_addr_sk integer , ss_store_sk integer , ss_promo_sk integer , ss_ticket_number bigint not null, ss_quantity integer , ss_wholesale_cost decimal(7,2) , ss_list_price decimal(7,2) , ss_sales_price decimal(7,2) , ss_ext_discount_amt decimal(7,2) , ss_ext_sales_price decimal(7,2) , ss_ext_wholesale_cost decimal(7,2) , ss_ext_list_price decimal(7,2) , ss_ext_tax decimal(7,2) , ss_coupon_amt decimal(7,2) , ss_net_paid decimal(7,2) , ss_net_paid_inc_tax decimal(7,2) , ss_net_profit decimal(7,2) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY hash (ss_item_sk); CREATE TABLE date_dim ( d_date_sk integer not null, d_date_id char(16) not null, d_date date , d_month_seq integer , d_week_seq integer , d_quarter_seq integer , d_year integer , d_dow integer , d_moy integer , d_dom integer , d_qoy integer , d_fy_year integer , d_fy_quarter_seq integer , d_fy_week_seq integer , d_day_name char(9) , d_quarter_name char(6) , d_holiday char(1) , d_weekend char(1) , d_following_holiday char(1) , d_first_dom integer , d_last_dom integer , d_same_day_ly integer , d_same_day_lq integer , d_current_day char(1) , d_current_week char(1) , d_current_month char(1) , d_current_quarter char(1) , d_current_year char(1) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY replication; CREATE TABLE store ( s_store_sk integer not null, s_store_id char(16) not null, s_rec_start_date date , s_rec_end_date date , s_closed_date_sk integer , s_store_name varchar(50) , s_number_employees integer , s_floor_space integer , s_hours char(20) , s_manager varchar(40) , s_market_id integer , s_geography_class varchar(100) , s_market_desc varchar(100) , s_market_manager varchar(40) , s_division_id integer , s_division_name varchar(50) , s_company_id integer , s_company_name varchar(50) , s_street_number varchar(10) , s_street_name varchar(60) , s_street_type char(15) , s_suite_number char(10) , s_city varchar(60) , s_county varchar(30) , s_state char(2) , s_zip char(10) , s_country varchar(20) , s_gmt_offset decimal(5,2) , s_tax_precentage decimal(5,2) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY replication; CREATE TABLE item ( i_item_sk integer not null, i_item_id char(16) not null, i_rec_start_date date , i_rec_end_date date , i_item_desc varchar(200) , i_current_price decimal(7,2) , i_wholesale_cost decimal(7,2) , i_brand_id integer , i_brand char(50) , i_class_id integer , i_class char(50) , i_category_id integer , i_category char(50) , i_manufact_id integer , i_manufact char(50) , i_size char(20) , i_formulation char(20) , i_color char(20) , i_units char(10) , i_container char(10) , i_manager_id integer , i_product_name char(50) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY replication; CREATE TABLE time_dim ( t_time_sk integer not null, t_time_id char(16) not null, t_time integer , t_hour integer , t_minute integer , t_second integer , t_am_pm char(2) , t_shift char(20) , t_sub_shift char(20) , t_meal_time char(20) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY replication; CREATE TABLE promotion ( p_promo_sk integer not null, p_promo_id char(16) not null, p_start_date_sk integer , p_end_date_sk integer , p_item_sk integer , p_cost decimal(15,2) , p_response_target integer , p_promo_name char(50) , p_channel_dmail char(1) , p_channel_email char(1) , p_channel_catalog char(1) , p_channel_tv char(1) , p_channel_radio char(1) , p_channel_press char(1) , p_channel_event char(1) , p_channel_demo char(1) , p_channel_details varchar(100) , p_purpose char(15) , p_discount_active char(1) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY replication; CREATE TABLE customer_demographics ( cd_demo_sk integer not null, cd_gender char(1) , cd_marital_status char(1) , cd_education_status char(20) , cd_purchase_estimate integer , cd_credit_rating char(10) , cd_dep_count integer , cd_dep_employed_count integer , cd_dep_college_count integer ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY hash (cd_demo_sk); CREATE TABLE customer_address ( ca_address_sk integer not null, ca_address_id char(16) not null, ca_street_number char(10) , ca_street_name varchar(60) , ca_street_type char(15) , ca_suite_number char(10) , ca_city varchar(60) , ca_county varchar(30) , ca_state char(2) , ca_zip char(10) , ca_country varchar(20) , ca_gmt_offset decimal(5,2) , ca_location_type char(20) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY hash (ca_address_sk); CREATE TABLE household_demographics ( hd_demo_sk integer not null, hd_income_band_sk integer , hd_buy_potential char(15) , hd_dep_count integer , hd_vehicle_count integer ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY replication; CREATE TABLE customer ( c_customer_sk integer not null, c_customer_id char(16) not null, c_current_cdemo_sk integer , c_current_hdemo_sk integer , c_current_addr_sk integer , c_first_shipto_date_sk integer , c_first_sales_date_sk integer , c_salutation char(10) , c_first_name char(20) , c_last_name char(30) , c_preferred_cust_flag char(1) , c_birth_day integer , c_birth_month integer , c_birth_year integer , c_birth_country varchar(20) , c_login char(13) , c_email_address char(50) , c_last_review_date char(10) ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY hash (c_customer_sk); CREATE TABLE income_band ( ib_income_band_sk integer not null, ib_lower_bound integer , ib_upper_bound integer ) WITH (ORIENTATION = column,COMPRESSION=middle) DISTRIBUTE BY replication; 父主题: 附录:表创建语法
共100000条