MySQL用户入门Greenplum

时间:2022-06-17
本文章向大家介绍MySQL用户入门Greenplum,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

说明

本文描述问题及解决方法同样适用于 腾讯云Snova云数仓

背景

Greenplum(以下简称GP)是基于PostgreSQL的MPP数据库。在使用方式和语法上和PostgreSQL基本一致,而PostgreSQL与MySQL在使用上还是有一些差异。本文在操作层面列举了一些最基本的差异,让MySQL用户能够快速上手GP。

基本概念

数据库(Database)和模式(Schema)

MySQL : MySQL中模式是数据库的别名,这二者没什么区别,创建一个模式就是创建一个数据库。

GP : 在GP中模式属于数据库内的一个概念,用于在数据库中组织对象,起到类似于命名空间的作用,这样用户可以在一个数据库下创建多个模式,这些不同的模式可以有不同的访问权限,并且不同模式下的表名是可以重复。

说明:如果要进行类比的话,GP中的模式更像MySQL中的数据库,在MySQL中用户可以访问同一个实例中的不同数据库,但是在GP中一个连接只能访问一个数据库,但是可以同时访问多个模式,比如join多个模式中的表。

基本操作

操作

MySQL

GP

切换数据库

USE {dbname}

c {dbname}

查看所有数据库

SHOW DATABASE

l

切换Schema

SET search_path={schemaname}

查看所有表

SHOW TABLES

d

查看表结构

DESC {tablename}

d+ {tablename}

按列展示结果

G(跟在SQL语句后)

x(单独运行,再次运行切回按行)

查看运行时间

默认展示

timing

查看客户端连接

SHOW PROCESSLIST

SELECT * FROM pg_stat_activity

客户端工具

mysql -h{hostname} -P{port} -u{user} -p{pwd} {dbname}

PGPASSWORD={pwd} psql -h{hostname} -p{port} -U{user} -d {dbname}

基本语法

自增长字段

自增长字段是数据库比较常见的特性,也是MySQL与GP使用习惯差距较大的地方。

MySQL

CREATE TABLE `mysql_test` (
  `id` bigint  NOT NULL AUTO_INCREMENT, 
  `name` varchar(32) NOT NULL,
  PRIMARY KEY(`id`)
  ) ENGINE=InnoDB  DEFAULT CHARSET=utf8

GP

GP中的自增长需要使用到序列Sequence

有2种创建方式

CREATE TABLE gp_test (
  id SERIAL NOT NULL, 
  name varchar(32) NOT NULL ,
  PRIMARY KEY(id)
  ) 
 CREATE SEQUENCE users_id_seq INCREMENT BY 2 MINVALUE  10000 MAXVALUE 99999;
 CREATE TABLE gp_test (
  id bigint NOT NULL DEFAULT NEXTVAL ('users_id_seq'),
  name varchar(32) NOT NULL ,
  PRIMARY KEY(id)
  )    

以上2种方式本质上都一样,只不过第一种方式自动创建了一个Sequence,并且与表中字段id绑定到一起。

注释

MySQL中表和字段的注释通常都写在建表语句中,GP则需要单独的语句。

MySQL

CREATE TABLE `mysql_test` (
  `id` bigint  NOT NULL AUTO_INCREMENT COMMENT '自增长主键', 
  `name` varchar(32) NOT NULL COMMENT '姓名',
  PRIMARY KEY(`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='员工信息表'

GP

CREATE TABLE gp_test (
  id SERIAL, 
  name varchar(32) ,
  PRIMARY KEY(id)
)

COMMENT ON COLUMN gp_test.id is '自增长主键'; 
COMMENT ON COLUMN gp_test.name is '姓名'; 
COMMENT ON table  gp_test is '员工信息表'; 

字段类型

字段类型在各个数据库间都会有不同的差异,以下列举MySQL与GP字段类型的一些主要差异

MySQL

GP

TINYINT

SMALLINT

MEDIUMINT

INTEGER

TINYINT UNSIGNED

SMALLINT check({columnname} >= 0)

FLOAT

REAL

DATETIME

TIMESTAMP

LONGTEXT

TEXT

MEDIUMTEXT

TEXT

BLOB

BYTEA