精华内容
下载资源
问答
  • gaussdb200 理论

    2021-06-10 14:07:41
    gauss200简介 ​ MPP即大规模并行处理(Massively Parallel Processing ),在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过专用...

    gauss200简介

    ​ MPP即大规模并行处理(Massively Parallel Processing ),在数据库非共享集群中,每个节点都有独立的磁盘存储系统和内存系统,业务数据根据数据库模型和应用特点划分到各个节点上,每台数据节点通过专用网络或者商业通用网络互相连接,彼此协同计算,作为整体提供数据 库服务,非共享数据库集群有完全的可伸缩性、高可用、高性能、优秀的性价比、资源共享等优势。

    file

    ​ 典型特点:

    	* 计算靠近数据,避免大量的数据迁移,获得更高的性能
    	* 无共享架构,相比共享架构拥有更高的扩展性
    

    gaussDB200架构

    ​ GaussDB 200采用Share-nothing架构,由多个拥有独立且互不共享CPU、内存、存储等系统资源的节点组成。在这样的系统架构中,业务数据被分散存储在多个物理节点上,数据分析任务被推送到数据所在位置就近执行,通过控制模块的协调,并行地完成大规模的数据处理工作,实现对数据处理的快速响应。

    file

    Share-nothing架构具备如下优点:

      • 最易于扩展的架构
        • 为商业智能BI(Business Intelligence)和数据分析的高并发、大数据量计算提供按需扩展的能力
        • 自动化的并行处理机制
      • 内部自动并行处理,无需人工分区或优化
        • 数据加载与访问方式与一般数据库相同
        • 数据分布在所有的并行节点上
        • 每个节点只处理其中一部分数据
      • 最优化的I/O处理
        • 所有的节点同时进行并行处理
        • 节点之间完全无共享,无I/O冲突
      • 增加节点实现存储、查询及加载性能的线性扩展

    gaussdb 200组成

    file

    名称 描述
    MPPDBServer(CM) GaussDB 200集群管理模块CM(Cluster Manager),即含CMServer进程的特殊MPPDBServer,负责管理和监控分布式系统中各个功能单元和物理资源的运行情况,确保整个系统的稳定运行。CM分为主CM和备CM。正常情况下,只由主CM提供GaussDB 200集群管理服务。当主CM发生故障的情况下,备CM会主动升为主CM提供GaussDB 200集群管理服务。CM通过CM服务完成对各个MPPDBServer管理。CM服务由CMServer、CMAgent、Monitor组成。CMServer是整个GaussDB 200集群的大脑,它会根据CMAgent上报上来的各MPPDBServer状态信息来决定是否需要状态变更。CMServer只部署在主备CM上。CMAgent是MPPDBServer上面部署的实例代理线程,负责接收CMServer下发的命令和上报MPPDBServer的Coordinator、Datanode、GTM的状态给CMServer。每个MPPDBServer均会部署一个CMAgent,也包括主备CM和主备GTM。Monitor是watchdog定时任务,其唯一的任务是在CMAgent停止的情况下将CMAgent重启。每个MPPDBServer均会部署一个Monitor,也包括主备CM和主备GTM。
    MPPDBServer(GTM) 全局事务管理模块GTM(Global Transaction Manager),即含GTM进程的特殊MPPDBServer,负责生成和维护全局事务ID、事务快照、时间戳等需要全局唯一的信息。GTM分为主GTM和备GTM。正常情况下,只由主GTM提供全局事务管理服务。当主GTM发生故障的情况下,备GTM会主动升为主GTM提供服务。
    MPPDBServer 业务模块,即除MPPDBServer(CM)、MPPDBServer(GTM)以外的MPPDBServer,由Coordinator及多个Datanode组成,负责执行CM、GTM下发的任务。业务模块与MPPDBServer(CM)、MPPDBServer(GTM)主要区别是不包含CMServer与GTM进程。
    Coordinator(CN) 负责提供外部应用接口、优化全局执行计划、向Datanode分发执行计划,以及汇总、处理执行结果。GaussDB 200通过CCN(Control Coordinator Node)负责集群内的资源全局负载控制,以实现自适应的动态负载管理。CM在第一次集群启动时,通过集群部署形式,选择编号最小的Coordinator作为CCN。若CCN故障之后,由CM选择新的CCN进行替换。
    Datanode(DN) 在集群中,DN有多个。每个DN存储了一部分数据。如果DN无高可用方案,则故障时会导致该实例上的数据无法访问。因此GaussDB 200对DN提供了高可用方案:主、备、从备。DN主、备、从备间的工作原理如下:主、备DN同步数据期间,如果主DN突然故障不可用,备DN会升为主DN。在原主DN恢复前,新升为主的DN会将数据日志同步到从备DN。原主DN恢复后将成为备DN,并且会使用“从备DN”上的数据日志恢复异常期间的数据。也就是说从备DN永远只作为从备使用,不会因为主DN或备DN故障而升级为主DN或备DN,从备只存放备DN故障时同步到从备的Xlog数据和数据通道复制产生的数据。
    Storage 服务器的本地存储资源,持久化存储数据(支持行存、列存、混合存储)。

    数据库对象

    对象名称 说明
    user 数据库用户,用于权限管理。
    database 可以创建多个不同数据库。
    schema 用于管理多个用户使用同一数据库。
    tablespace 表空间,定义数据库对象文件的存放位置。
    table 基本表,分为行存表和列存表。
    index 索引,可以调高数据的访问速度。
    view 视图,一个或多个表中某些字段组成的虚表。

    数据库逻辑结构图:

    file

    • Tablespace,即表空间,是一个目录,可以存在多个,里面存储的是它所包含的数据库的各种物理文件,每个表空间可以对应多个Database。
    • Database,即数据库,用于管理各类数据对象,各数据库间相互隔离,数据库管理的对象可分布在多个Tablespace上。
    • Datafile Segment,即数据文件,通常每张表只对应一个数据文件,如果某张表的数据大于1GB,则会分为多个数据文件存储。
    • Table,即表,每张表只能属于一个数据库,也只能对应到一个Tablespace,每张表对应的数据文件必须在同一个Tablespace中。
    • Block,即数据块,是数据库管理的基本单位,默认大小为8KB。

    gaussdb 200产品定位

    ​ GaussDB 200是企业级的大规模并行处理关系型数据库。GaussDB 200采用MPP(Massively Parallel Processing)架构,支持行存储与列存储,提供PB(Petabyte,2的50次方字节)级别数据量的处理能力,GaussDB 200在核心技术上跟传统数据库相比有巨大优势,可以解决很多行业用户的数据处理性能问题,可以为超大规模数据管理提供高性价比的通用计算平台,并可用于支撑各类数据仓库系统、BI(Business Intelligence)系统和决策支持系统,统一为上层应用的决策分析等提供服务。

    gaussdb 200应用场景

    ​ GaussDB 200面向行业大数据应用,可以适用于以下场景:

      • 详单查询具备PB级数据负载能力,通过内存分析技术满足海量数据边入库边查询要求,适用于安全、电信、金融、物联网等行业的详单查询业务。
      • 数据仓库具备百TB级数据支撑能力,可以高效处理百亿行多表连接查询,适用于操作数据存储ODS(Operational Data Store)、企业数据仓库EDW(Enterprise Data Warehouse)、数据集市DM(Data Mart)。
      • 混合负载基于海量数据查询统计分析能力与事务处理能力,行列混存技术同时满足联机事务处理OLTP(On-Line Transaction Processing)与联机分析处理OLAP(Online Analytical Processing)混合负载场景
      • 大数据分析支持结构化数据PB级分析能力。分布式并行数据库集群满足PB级结构化大数据的分析能力。

    gaussdb200业务流程

    file

    具体查询流程如下:

    1. 用户通过应用程序发出查询本地数据的SQL请求到Coordinator。
    2. Coordinator接收用户的SQL请求,分配服务进程,向GTM请求分配全局事务信息。
    3. GTM接收到Coordinator的请求,返回全局事务信息给Coordinator。
    4. Coordinator根据数据分布信息以及系统元信息,解析SQL为查询计划树,从查询计划树中提取可以发送到Datanode的执行步骤,封装成SQL语句或者子执行计划树,发送到Datanode执行。
    5. Datanode接收到读取任务后,查询具体Storage上的本地数据块。
    6. Datanode任务执行后,将执行结果返回给Coordinator。
    7. Coordinator将查询结果通过应用程序返回给用户。

    gaussdb200数据节点高可用

    file

    ​ gaussdb200提供了双重HA机制,第一层保护:主备机实时的数据页和日志同步,主机故障后备机接管,确保业务不中断,第二层保护:备机故障后,主机日志同步复制到从备节点(handoff机制),确保日志始终是双备份。

    友商对比

    特性 Teradata Oracle Exadata GreenPlum 华为GaussDB 200
    通用服务器支持 不支持 不支持 支持 支持
    依赖磁阵/SAN 存储 依赖 依赖 不依赖 不依赖
    架构 无共享架构,横向扩展最佳 全共享架构,横向扩展受限制 无共享架构, 协调节点(master)仅 支持主备,数据节点 (segment)能横向扩展 无共享架构, 协调节点(CN)节 点和数据节点(DN) 均能横向扩展
    向量化执行/ SIMD指令 不支持 不支持 不支持 支持
    行列存储 支持,表级列存储 支持,压缩单元级列存储 支持,表级别列存储 支持,表级别列存储
    列存储引擎 不支持 支持,压缩单元级列存储 不支持 支持

    海汼部落原创文章,原文链接:http://www.hainiubl.com/topics/75655

    展开全文
  • 1. GaussDB 200 1.1 背景介绍 GaussDB 200是一个基于开源数据库Postgres-XC开发的分布式并行关系型数据库系统。 GaussDB 200采用Share-nothing架构。 官方要求GaussDB200至少需要3个节点来安装。 GaussDB 200以...

    1. GaussDB 200

    1.1 背景介绍

    GaussDB 200是一个基于开源数据库Postgres-XC开发的分布式并行关系型数据库系统。

    GaussDB 200采用Share-nothing架构。

    官方要求GaussDB200至少需要3个节点来安装。

    GaussDB 200以OLAP为主,兼顾OLTP。以PostgreSQL为出发点。

    GaussDB 200是企业级的大规模并行处理关系型数据库。其采用MPP(Massive Parallel Processing)架构,支持行存储与列存储,提供PB(Petabyte, 2的50次方字节)级别数据量的处理能力。

    工商银行率先尝试使用,然后推广。

    在2019年10月左右,aussDB 200 合并 300 的部分设计,更名为 GaussDB A,GaussDB A以分析型为主方向;

    1.2 应用场景

    GaussDB 200应用于订单查询、数据仓库、混合负载、大数据分析。

    1.3 技术特点

    低成本、高性能、高可靠、支持海量数据。

    2. PostgreSql

    PostgreSQL是一个功能强大的开源对象关系型数据库系统,他使用和扩展了SQL语言,并结合了许多安全存储和扩展最复杂数据工作负载的功能。进行了30多年的积极开发。

    PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,具有强大的功能集,可扩展性等功能。

    3. GaussDB 200与PostgreSql异同

    1. GaussDB 200是一个MPP框架,必须集群部署,主要面向历史数据进行OLAP分析操作;主要面向分析,是分析型驱动;
    2. PostgreSql是一个关系型数据库,可单机部署也可集群部署,主要面向OLTP工作;主要面向应用,是事务型驱动,应用场景为支持日常业务运营;
    展开全文
  • gaussDB200 单节点安装

    2019-10-27 19:46:42
    该操作指导安装工程师将获取到的GaussDB 200软件包上传到指定节点。
  • gaussdb200.jdbc-1.0.0.jar

    2019-12-04 10:20:32
    cs80 gaussdb200驱动下载
  • GaussDB 200是企业级的大规模并行处理关系型数据库。GaussDB 200采用MPP(Massively Parallel Processing)架构,支持行存储与列存储,提供PB(Petabyte,2的50次方字节)级别数据量的处理能力。 GaussDB 200在核心...
  • GaussDB 200 6.5.1 软件安装 02.pdf,华为GaussDB数据库安装教程。本文档介绍GaussDB 200的部署方案及软件安装的具体操作过程。本文档适用于安装工程师。
  • GaussDB 200 6.5.1 产品文档 07.chm
  • GaussDB200 部署

    2021-06-10 14:32:48
    GaussDB安装需要使用fi manager,目前支持的centos最高版本为7.4,不能选择高于该版本。推荐配置内存16G,cpu核心数8C,硬盘300G。 软件准备 解压gaussdb.tar包,并解压至/opt目录下 上传操作系统镜像CentOS-7-x86_...

    前言

    GaussDB安装需要使用fi manager,目前支持的centos最高版本为7.4,不能选择高于该版本。推荐配置内存16G,cpu核心数8C,硬盘300G。

    软件准备

    解压gaussdb.tar包,并解压至/opt目录下

    上传操作系统镜像CentOS-7-x86_64-DVD-1810.iso

    file

    前置动作

    #修改主机名
    hostnamectl set-hostname yourhostname
    #修改hosts文件,增加yourip yourhostname
    yourip yourhostname
    #安装依赖包
    yum install acpid.x86_64 at.x86_64 attr.x86_64 autogen-libopts.x86_64 bc.x86_64 bind-libs.x86_64 bind-utils.x86_64 bridge-utils.x86_64 bzip2.x86_64 c-ares.x86_64 checkpolicy.x86_64 cifs-utils.x86_64 crash.x86_64 cryptsetup.x86_64 cups-client.x86_64 cvs.x86_64 cyrus-sasl.x86_64 cyrus-sasl-gssapi.x86_64 cyrus-sasl-plain.x86_64 ed.x86_64 gamin.x86_64 gdbm-devel.x86_64 glibc-devel.x86_64 glibc-headers.x86_64 gnutls.x86_64 hdparm.x86_64 hesiod.x86_64 http-parser.x86_64 iotop.noarch ipmitool.x86_64 iptables-services.x86_64 ipvsadm.x86_64 kernel-headers.x86_64 keyutils.x86_64 libasyncns.x86_64 libbasicobjects.x86_64 libcgroup.x86_64 libcollection.x86_64 libdb-devel.x86_64 libdhash.x86_64 libevent.x86_64 libgudev1.x86_64 libini_config.x86_64 libipa_hbac.x86_64 libitm.x86_64 libldb.x86_64 libmodman.x86_64 libnfsidmap.x86_64 libnl.x86_64 libpath_utils.x86_64 libpcap.x86_64 libproxy.x86_64 libref_array.x86_64 libreport-filesystem.x86_64 libsmbclient.x86_64 libsss_autofs.x86_64 libsss_certmap.x86_64 libsss_idmap.x86_64 libsss_nss_idmap.x86_64 libsss_sudo.x86_64 libtalloc.x86_64 libtar.x86_64 libtdb.x86_64 libtevent.x86_64 libtirpc.x86_64 libtool-ltdl.x86_64 libusb.x86_64 libusbx.x86_64 libwbclient.x86_64 libxml2-python.x86_64 lm_sensors-libs.x86_64 lsof.x86_64 m2crypto.x86_64 m4.x86_64 mailx.x86_64 mdadm.x86_64 mlocate.x86_64 net-snmp.x86_64 net-snmp-agent-libs.x86_64 net-snmp-libs.x86_64 net-snmp-utils.x86_64 nettle.x86_64 nscd.x86_64 nss_compat_ossl.x86_64 ntp.x86_64 ntpdate.x86_64 numactl.x86_64 numad.x86_64 oddjob.x86_64 oddjob-mkhomedir.x86_64 OpenIPMI.x86_64 OpenIPMI-libs.x86_64 OpenIPMI-modalias.x86_64 openldap-clients.x86_64 openldap-servers.x86_64 pam_krb5.x86_64 patch.x86_64 pax.x86_64 pciutils.x86_64 perl-Compress-Raw-Bzip2.x86_64 perl-Compress-Raw-Zlib.x86_64 perl-Data-Dumper.x86_64 perl-DBI.x86_64 perl-devel.x86_64 perl-ExtUtils-Install.noarch perl-ExtUtils-MakeMaker.noarch perl-ExtUtils-Manifest.noarch perl-ExtUtils-ParseXS.noarch perl-IO-Compress.noarch perl-Net-Daemon.noarch perl-PlRPC.noarch perl-Test-Harness.noarch perl-version.x86_64 pm-utils.x86_64 portreserve.x86_64 procmail.x86_64 psmisc.x86_64 pygobject2.x86_64 pyOpenSSL.x86_64 pyparsing.noarch pytalloc.x86_64 python-chardet.noarch python-dateutil.noarch python-dmidecode.x86_64 python-ethtool.x86_64 python-kitchen.noarch python-sssdconfig.noarch pytz.noarch quota.x86_64 quota-nls.noarch redhat-lsb-core.x86_64 redhat-lsb-submod-security.x86_64 rng-tools.x86_64 rpcbind.x86_64 rsync.x86_64 samba-client-libs.x86_64 samba-common.noarch samba-common-libs.x86_64 sdparm.x86_64 sendmail.x86_64 sg3_utils-libs.x86_64 smartmontools.x86_64 spax.x86_64 sssd.x86_64 sssd-ad.x86_64 sssd-client.x86_64 sssd-common.x86_64 sssd-common-pac.x86_64 sssd-ipa.x86_64 sssd-krb5.x86_64 sssd-krb5-common.x86_64 sssd-ldap.x86_64 sssd-proxy.x86_64 stix-fonts.noarch sysstat.x86_64 system-config-firewall-base.noarch systemtap-sdt-devel.x86_64 tcp_wrappers.x86_64 time.x86_64 traceroute.x86_64 trousers.x86_64 unixODBC.x86_64 unzip.x86_64 usermode.x86_64 yum-utils.noarch zip.x86_64 expect -y
    #检查操作系统字符集,如果不为zh_CN.UTF-8,则修改为zh_CN.UTF-8
    cat /etc/locale.conf
    #挂载操作系统镜像
    mount /opt/CentOS-7-x86_64-DVD-1708.iso /media/ -o loop
    

    安装GaussDB 200

    • 解压安装包
    tar -zxvf GaussDB_200_6.5.1_RHEL.tar.gz -C ../
    tar -zxvf FusionInsight_Manager_6.5.1_RHEL.tar.gz -C ../
    tar -zxvf FusionInsight_SetupTool_6.5.1.tar.gz -C ../
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uihHzVLt-1623306764332)(http://www.hainiubl.com/uploads/md_images/202106/09/22/![image.png)]

    • 拷贝安装包
    cp FusionInsight_MPPDB_6.5.1_RHEL.tar.gz /opt/FusionInsight_Manager/software/packs/
    cp FusionInsight_BASE_6.5.1_RHEL.tar.gz /opt/FusionInsight_Manager/software/packs/
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8IpR2gG0-1623306764335)(http://www.hainiubl.com/uploads/md_images/202106/09/22/![image.png)]

    • 预安装配置
    cd /opt
    cp -r /opt/FusionInsight_SetupTool/preset/ /opt/
    sh /opt/preset/preset.sh
    
    • 编辑preinstall配置文件
    vim /opt/FusionInsight_SetupTool/preinstall/preinstall.ini
    

    写入如下内容:

    g_hosts="你的机器IP" 
    g_parted=0 
    g_parted_conf="你的机器IP:host0.ini;" 
    g_hostname_conf="你的机器IP:你的机器IP:你的机器hostname;" 
    g_add_pkg=1 
    g_pkgs_dir="centos-7.6:/media/" 
    g_swap_off=1 
    g_user_name="root" 
    g_port=22 
    g_log_file="/tmp/fi-preinstall.log" 
    g_check=1 
    g_debug=0 
    g_wce_conf=0 
    g_platform="x86_64" 
    g_optimize="default" 
    g_kms_conf=0 
    g_core_dump=0 
    g_core_dump_dir="/var/log/core"
    
    • 编辑host0配置文件
    vim /opt/FusionInsight_SetupTool/preinstall/partition/ini/host0.ini
    

    写入如下内容:

    #mount               required    care    condition
    dbdata_om.conf       y           y       n
    backup_om.conf       y           y       n
    mppdb1.conf          y           y       n
    
    • 执行预安装命令
    cd /opt/FusionInsight_SetupTool && ./setuptool.sh preinstall -n
    
    • 修改install安装配置文件
    vim /opt/FusionInsight_Manager/software/install.ini
    

    写入如下内容:

    [HA]
        ha_mode=single
        local_ip1=你的机器IP
        local_ip2=
        local_ip3=
        local_ip4=
        peer_ip1=
        peer_ip2=
        peer_ip3=
        peer_ip4=
        ws_float_ip=
        ws_float_ip_interface=
        ws_float_ip_netmask=
        ws_gateway=
        om_float_ip=
        om_float_ip_interface=
        om_float_ip_netmask=
        om_gateway=
        ntp_server_ip=
        om_mediator_ip=
        sso_ip=
        sso_port=
        bigdata_home=/opt/huawei/Bigdata
        bigdata_data_home=/srv/BigData
        cluster_nodes_scale=
        tls_protocol_min=
    [/HA]
    
    • 执行安装命令
    mkdir -p /srv/BigData
    cd /opt/FusionInsight_Manager/software && ./install.sh -f /opt/FusionInsight_Manager/software/install.ini
    

    file

    • web操作
    su - omm
    sh ${BIGDATA_HOME}/om-server/om/sbin/enable_single_host_cluster.sh
    sh ${BIGDATA_HOME}/om-server/om/sbin/restart-controller.sh
    

    http://xxx.xxx.xxx.xxx:8080/web/

    用户名与密码:admin/Admin@123

    file

    • 创建集群

    file

    file

    file

    file

    file

    file

    file

    file

    GaussDB200测试

    #gaussdb使用
    #omm用户执行
    source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile 
    #查询集群示例状况
    gs_om -t status --detail
    #确认postgresql端口
    cat /srv/BigData/mppdb/data1/coordinator/postgresql.conf | grep port
    #连接gaussdb
    gsql -d postgres -p 25308
    #创建用户
    create user xiniu with password "yourpassword"
    #创建库
    create database db_xiniu;
    #退出数据库
    \q
    #使用新用户登录
    gsql -d db_xiniu -p 25308 -U xiniu -W "yourpassword"
    

    海汼部落原创文章,原文链接:http://www.hainiubl.com/topics/75660

    展开全文
  • GaussDB 200 6.5.1 产品文档 05.chm
  • GaussDB 200是华为技术有限公司兼容Postgres的自研MPP(大规模并行处理)数据库,其主要面向海量数据分析场景。 本文档是GaussDB 200数据库开发指南。 注:版权归Huawei所有
  • gaussdb200 实操

    2021-06-10 14:13:58
    连接gaussdb 切换用户 su - omm 加载环境变量 source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile 连接数据库 gsql -d postgres -p 25308 创建用户 create user xiniu with password "xiniu_1688"; 创建...

    连接gaussdb

    • 切换用户

      su - omm
      
    • 加载环境变量

      source ${BIGDATA_HOME}/mppdb/.mppdbgs_profile
      
    • 连接数据库

      gsql -d postgres -p 25308
      
    • 创建用户

      create user xiniu with password "xiniu_1688";
      
    • 创建数据库

      官方建议:用户自定义数据库数量不超过3个

      create database xiniu_db;
      
    • 退出gsql

      \q
      
    • 指定用户登陆,正常情况下不使用omm用户登陆

      gsql -d xiniu_db -p 25308 -U xiniu -W "xiniu_1688"
      

    查询集群各节点状态

    gs_om -t status --detail
    

    file

    cat /srv/BigData/mppdb/data1/coordinator/postgresql.conf | grep port
    

    file

    表空间

    • 创建表空间

      # 使用管理员用户进入gsql
      su - omm
      gsql -d postgres -p 25308
      # 创建命名空间
      create tablespace xiniu relative location 'hdfs_tablespace/hdfs_tablespace_1';
      create tablespace xiniu2 relative location 'hdfs_tablespace/hotdata';
      
    • 创建表并指定表空间

      create database xiniu_db2 with tablespace = xiniu;
      

    file

    基本操作

    • 创建行表

      ​ 建表的时候如果不指定orientation则默认为行表

      set default_tablespace = 'xiniu';
      create table test1(
        id integer
      )
      distribute by hash (id);
      # 因为用户xiniu没有操作xiniu表空间的权限,所以建表会失败
      
    • 表空间权限管理

      grant create on tablespace xiniu to xiniu;
      

    file

    • 再次建表

      set default_tablespace = 'xiniu';
      create table test1(
        id integer
      )
      distribute by hash (id);
      

    file

    • 创建列表

      -- compression是压缩等级(high、middle、low)
      -- orientation是指定列存参数
      set default_tablespace = 'xiniu';
      create table test2(
        id integer,
        name char(15),
        age integer
      )
      with (orientation = column ,compression = middle)
      distribute by hash (id);
      set default_tablespace = 'xiniu';
      create table test4(
        id integer,
        name char(15),
        age integer
      )
      with (orientation = column ,compression = low)
      distribute by hash (id);
      

    file

    • 插入数据

      -- 创建表
      CREATE TABLE customer_t1
      (
          c_customer_sk             integer,
          c_customer_id             char(5),
          c_first_name              char(6),
          c_last_name               char(8)
      )
      with (orientation = column,compression=middle)
      distribute by hash (c_last_name);
      
      -- 单行插入数据
      INSERT INTO customer_t1 VALUES (3769, 'hello', 'Grace');
      
      -- 多行插入数据
      INSERT INTO customer_t1 (c_customer_sk, c_customer_id, c_first_name) VALUES 
          (6885, 'maps', 'Joes'),
          (4321, 'tpcds', 'Lily'),
          (9527, 'world', 'James');
          
      -- 从select结果集插入数据
      CREATE TABLE customer_t2
      (
          c_customer_sk             integer,
          c_customer_id             char(5),
          c_first_name              char(6),
          c_last_name               char(8)
      ) ;
      -- 建表的时候不指定分布键,则由系统选择一个可以作为分布键的字段作为分布键
      -- NOTICE:  The 'DISTRIBUTE BY' clause is not specified. Using 'c_customer_sk' as the distribution column by default.
      -- HINT:  Please use 'DISTRIBUTE BY' clause to specify suitable data distribution column.
      
      INSERT INTO customer_t2 SELECT * FROM customer_t1;
      
    • 更新数据

      -- 更新一个字段
      UPDATE customer_t1 SET c_customer_sk = 9876 WHERE c_customer_sk = 9527;
      -- 使用表达式更新
      UPDATE customer_t1 SET c_customer_sk = c_customer_sk + 100 where c_customer_sk = 9876;
      -- 更新多个字段
      UPDATE customer_t1 SET  c_customer_id = 'Admin', c_first_name = 'Local' WHERE c_customer_sk = 6885; 
      
    • 查表

      -- 查看表属性
      \d+ customer_t1;
      

    file

    • 查数

      -- 与hive一致
      select * from customer_t1;
      select count(1) from customer_t1;
      select distinct (c_customer_sk) from customer_t1;
      

    file

    • 删除数据

      -- 删除指定行
      DELETE FROM customer_t1 WHERE c_customer_sk = 3769;
      -- 删除所有行
      DELETE FROM customer_t1;
      -- 清空表
      TRUNCATE TABLE customer_t1;
      -- 删除表
      DROP TABLE customer_t1;
      
    • 查看数据库用户

      SELECT * FROM pg_user;
      

    file

    gaussdb200常用操作

    • schema

      schema命名不能以pg_开头,那是系统预留的。

      -- 创建schema
      CREATE SCHEMA myschema;
      -- 创建schema并且同时指定给某用户
      CREATE SCHEMA myschema AUTHORIZATION xiniu;
      -- 使用omm管理员创建一个测试user xiniu2
      create user xiniu2 with password "Yghn_1688";
      -- 管理schema权限
      GRANT USAGE ON schema myschema TO xiniu2;
      GRANT CREATE ON schema myschema TO xiniu2;
      GRANT ALL ON schema myschema TO xiniu2;
      -- 指定schema建表 使用xiniu建表
      -- 设置searchpath
      set search_path to myschema;
      CREATE TABLE myschema.mytable(id int, name varchar(20));-- 找个表是使用xiniu用户创建的,其他用户不能访问
      -- 使用xiniu2登陆xiniu_db
      gsql -d xiniu_db -p 25308 -U xiniu2 -W Yghn_1688
      -- 查看schema
      \dn
      -- 在myschema下创建表(xiniu2用户)
      create table myschema.xiniu2table(id integer);-- 此时只有xiniu2用户有myschema.xiniu2table的权限
      -- 对表进行权限管理,使不同用户在同一个schema中拥有各自的权限
      grant select on myschema.mytable to xiniu2;
      grant select on myschema.xiniu2table to xiniu;
      -- 同一个数据库中可以存在不同的schema,不同的schema中的表名可以重复
      -- 使用xiniu2用户再创建一个schema
      -- 如果xiniu2没有创建schema的权限,则需要使用管理员用户给xiniu2赋予数据库操作权限
      -- grant all on database xiniu_db to xiniu2;
      create schema xiniu2schema;
      create table xiniu2schema.mytable (id integer);
      -- 如上可以发现在同一个数据库(xiniu_db)中出现了同名的表(mytable),这就是schema较为实用的地方,并且可以对schema进行赋权管理。
      

    file

    file

    • 分区

      • 语法格式
      CREATE TABLE [ IF NOT EXISTS ] partition_table_name
      ( [ 
          { column_name data_type [ COLLATE collation ] [ column_constraint [ ... ] ]
          | table_constraint
          | LIKE source_table [ like_option [...] ] }[, ... ]
      ] )
          [ WITH ( {storage_parameter = value} [, ... ] ) ]
          [ COMPRESS | NOCOMPRESS ]
          [ TABLESPACE tablespace_name ]
          [ DISTRIBUTE BY { REPLICATION | { [ HASH ] ( column_name ) } } ]
          [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ]
          PARTITION BY { 
              {VALUES (partition_key)} |
              {RANGE (partition_key) ( partition_less_than_item [, ... ] )} |
              {RANGE (partition_key) ( partition_start_end_item [, ... ] )}
          } [ { ENABLE | DISABLE } ROW MOVEMENT ]; 
      
      • 创建分区表(gaussdb200只支持范围分区)
      -- 创建分区表
      CREATE TABLE myschema.customer_address
      (
          ca_address_sk       integer                  NOT NULL   ,
          ca_address_id       integer                  NOT NULL   ,
          ca_street_number    character(10)                       ,
          ca_street_name      character varying(60)               ,
          ca_street_type      character(15)                       ,
          ca_suite_number     character(10)                       ,
          ca_city             character varying(60)               ,
          ca_county           character varying(30)               ,
          ca_state            character(2)                        ,
          ca_zip              character(10)                       ,
          ca_country           character varying(20)               ,
          ca_gmt_offset       numeric(5,2)                        ,
          ca_location_type    character(20)
      )
      TABLESPACE xiniu
      DISTRIBUTE BY HASH (ca_address_sk)
      PARTITION BY RANGE (ca_address_id)
      (
              PARTITION P1 VALUES LESS THAN(5000),
              PARTITION P2 VALUES LESS THAN(10000),
              PARTITION P3 VALUES LESS THAN(15000),
              PARTITION P4 VALUES LESS THAN(20000),
              PARTITION P5 VALUES LESS THAN(25000),
              PARTITION P6 VALUES LESS THAN(30000),
              PARTITION P7 VALUES LESS THAN(40000),
              PARTITION P8 VALUES LESS THAN(MAXVALUE)
      )
      ENABLE ROW MOVEMENT;
      

    file

    • 修改分区
    -- 删除分区
    ALTER TABLE myschema.customer_address DROP PARTITION P8;
    
    -- 增加分区
    ALTER TABLE myschema.customer_address ADD PARTITION P8 VALUES LESS THAN (MAXVALUE);
    
    -- 插入数据
    insert into myschema.customer_address (ca_address_sk,ca_address_id) values (1,4999);
    
    
    -- 修改ca_address_sk值
    update myschema.customer_address set ca_address_id = 5000 where ca_address_sk = 1;
    -- 修改行迁移开关
    ALTER TABLE myschema.customer_address DISABLE ROW MOVEMENT;
    -- 关闭行迁移开关后再进行修改
    update myschema.customer_address set ca_address_id = 4999 where ca_address_sk = 1;
    
    -- 修改分区名
    ALTER TABLE myschema.customer_address RENAME PARTITION P8 TO P_9;
    
    -- 表空间权限管理(管理员用户)
    grant all on tablespace xiniu2 to xiniu;
    -- 修改指定分区的表空间
    ALTER TABLE myschema.customer_address MOVE PARTITION P6 TABLESPACE xiniu2;
    

    file

    这里的分区键采用的是ca_address_id,非分布键,那么这个分区键的值就存在被修改的可能性,一旦分区键的值发生了变化,可能就会影响到数据的分布,如果movement开关关闭会导致修改失败,如果movement开关打开,则可以正常修改,并且会将数据迁移到对应的分区上。

    重点强调一下指定分区的表空间的意义……,非常重要,相信在未来一定会非常实用。

    重点强调一下指定分区的表空间的意义……,非常重要,相信在未来一定会非常实用。

    重点强调一下指定分区的表空间的意义……,非常重要,相信在未来一定会非常实用。

    • 查询分区数据
    -- 查询分区
    SELECT * FROM myschema.customer_address PARTITION (P2);
    SELECT * FROM myschema.customer_address PARTITION FOR (5000);
    
    • 索引

      索引可以提高数据的访问速度,但同时也增加了插入、更新和删除操作的处理时间,所以是否要为表增加索引,索引建立在哪些字段上,是创建索引前必须要考虑的问题。需要分析应用程序的业务处理、数据使用、经常被用作查询的条件或者被要求排序的字段来确定是否建立索引。

      索引建立在数据库表中的某些列上,所以在创建索引时,应该仔细考虑在哪些列上创建索引?

      • 在经常需要搜索查询的列上创建索引,可以加快搜索的速度。
      • 在作为主键的列上创建索引,强制该列的唯一性和组织表中数据的排列结构。
      • 在经常使用连接的列上创建索引,这些列主要是一些外键,可以加快连接的速度。
      • 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的。
      • 在经常需要排序的列上创建索引,因为索引已经排序,这样查询可以利用索引的排序,加快排序查询时间。
      • 在经常使用WHERE子句的列上创建索引,加快条件的判断速度。
      • 为经常出现在关键字ORDER BY、GROUP BY、DISTINCT后面的字段建立索引。
      -- 创建表
      CREATE TABLE myschema.web_returns_p2
      (
          ca_address_sk       integer                  NOT NULL   ,
          ca_address_id       integer                  NOT NULL   ,
          ca_street_number    character(10)                       ,
          ca_street_name      character varying(60)               ,
          ca_street_type      character(15)                       ,
          ca_suite_number     character(10)                       ,
          ca_city             character varying(60)               ,
          ca_county           character varying(30)               ,
          ca_state            character(2)                        ,
          ca_zip              character(10)                       ,
          ca_country           character varying(20)               ,
          ca_gmt_offset       numeric(5,2)                        ,
          ca_location_type    character(20)
      )
      TABLESPACE xiniu
      DISTRIBUTE BY HASH (ca_address_sk)
      PARTITION BY RANGE (ca_address_sk)
      (
              PARTITION P1 VALUES LESS THAN(5000),
              PARTITION P2 VALUES LESS THAN(10000),
              PARTITION P3 VALUES LESS THAN(15000),
              PARTITION P4 VALUES LESS THAN(20000),
              PARTITION P5 VALUES LESS THAN(25000),
              PARTITION P6 VALUES LESS THAN(30000),
              PARTITION P7 VALUES LESS THAN(40000),
              PARTITION P8 VALUES LESS THAN(MAXVALUE) TABLESPACE xiniu2
      )
      ENABLE ROW MOVEMENT;
      -- 倒数
      INSERT INTO myschema.web_returns_p2 SELECT * FROM myschema.customer_address;
      
      -- 创建索引,注意分区表是不支持全局索引的,索引我们用的是local本地索引。
      CREATE INDEX myschema_web_returns_p2_index1 ON myschema.web_returns_p2 (ca_address_id) local;
      -- 查询所有索引
      SELECT RELNAME FROM PG_CLASS WHERE RELKIND='i';
      -- 查看指定索引
      \di+ myschema.myschema_web_returns_p2_index1; 
      

      gaussdb200支持如下四种索引:

      索引方式 描述
      唯一索引 可用于约束索引属性值的唯一性,或者属性组合值的唯一性。如果一个表声明了唯一约束或者主键,则GaussDB 200自动在组成主键或唯一约束的字段上创建唯一索引(可能是多字段索引),以实现这些约束。目前,GaussDB 200只有B-Tree可以创建唯一索引。
      多字段索引 一个索引可以定义在表中的多个属性上。目前,GaussDB 200中的B-Tree支持多字段索引,且最多可在32个字段上创建索引。
      部分索引 建立在一个表的子集上的索引,这种索引方式只包含满足条件表达式的元组。
      表达式索引 索引建立在一个函数或者从表中一个或多个属性计算出来的表达式上。表达式索引只有在查询时使用与创建时相同的表达式才会起作用。
      -- 创建一张普通表
      CREATE TABLE myschema.customer_address_bak AS TABLE myschema.customer_address;
      

      创建唯一索引

      -- 使用场景,经常查询的字段上设置,且全局唯一,在查询与修改上效率都有明显提升效果
      CREATE INDEX index_ca_address_sk ON myschema.customer_address_bak (ca_address_sk);
      

      创建多字段索引

      -- 经常查询的多个字段
      CREATE INDEX more_column_index ON myschema.customer_address_bak(ca_address_sk ,ca_street_number );
      

      创建部分索引

      -- 在指定范围内建立索引,一般应用在冷热数据上,如果全表做索引太影响写入效率,且其他数据查询频率又不高,此时可以选择热数据的范围做索引
      CREATE INDEX part_index ON myschema.customer_address_bak(ca_address_sk) WHERE ca_address_sk > 5050;
      

      创建表达式索引

      -- 通过表达式对某一列进行预处理,再形成索引,想想他写入速度就快不到哪去,但是如果经常在查询中经常使用到trunc某一个字段,那创建这类索引还是值得的。
      CREATE INDEX para_index ON myschema.customer_address_bak (trunc(ca_street_number));
      
    • 视图

      视图与hive没区别

      -- 创建索引
      CREATE OR REPLACE VIEW MyView AS SELECT * FROM myschema.customer_address_bak WHERE ca_address_id = 4999;
      -- 查看索引
      \d+ MyView;
      

    file

    • 事务

      BEGIN;
      SELECT * FROM myschema.customer_address;
      UPDATE myschema.customer_address SET ca_address_id = 5001 WHERE ca_address_sk = 1;
      SELECT * FROM myschema.customer_address;
      END;
      

    excute&prepare

    -- 创建表reason
    CREATE TABLE myschema.reason ( 
        CD_DEMO_SK          INTEGER          NOT NULL,
        CD_GENDER           character(16)            ,
        CD_MARITAL_STATUS   character(100)
    )
    ;
    -- 为一个INSERT语句创建一个预备语句
    PREPARE insert_reason(integer,character(16),character(100)) AS INSERT INTO myschema.reason VALUES($1,$2,$3);
    -- 执行预备语句
    EXECUTE insert_reason(52, 'AAAAAAAADDAAAAAA', 'reason 52'); 
    -- excute也可以直接执行一条sql,经常在存储过程或者函数中使用
    -- 查询验证
    SELECT * FROM myschema.reason;
    -- 删除表reason
    DROP TABLE myschema.reason;
    

    file

    海汼部落原创文章,原文链接:http://www.hainiubl.com/topics/75656

    展开全文
  • gaussdb200 存储过程

    2021-06-10 14:34:39
    gaussdb200存储过程 声明部分:声明PL/SQL用到的变量,类型及游标,以及局部的存储过程和函数。 DECLARE 执行部分:过程及SQL语句,程序的主要部分。必选。 BEGIN 执行异常部分:错误处理。可选。 EXCEPTION...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,754
精华内容 1,101
关键字:

gauss200