Greenplum(二)【SQL】

前言

        Greenplum 的剩余部分主要其实主要就是 DDL 和之前学的 MySQL 不大一样,毕竟 Greenplum 是基于 PostgreSQL 数据库的,不过那些 DML 和 MySQL、Hive 基本上大差不差,所以就没有必要浪费时间了。

1、DDL

1.1、库操作

1.1.1、创建数据库

语法

CREATE DATABASE name
[ [ WITH ] [ OWNER [=] db_owner ] -- 指定数据库所有者[ TEMPLATE [=] template ] -- 指定数据库模板(规范和约束),默认是 template1[ ENCODING [=] encoding ] -- 指定当前数据库的编码[ TABLESPACE [=] tablespace ]  -- 表的命名空间(默认是 pg_default)[CONNECTION LIMIT [=] connlimit ]  -- 限制当前数据库的最大连接数 -1代表无限制
]

案例

CREATE DATABASE my_db1
WITH OWNER gpadmin
ENCODING 'utf-8'
TABLESPACE pg_dafault
CONNECTION LIMIE 10;

1.1.2、切换数据库

如果是使用 PSQL 的 CLI 命令行的话,我们可以使用下面的命令来切换数据库:

\c my_db1

使用 DataGrip 只能通过下面的按钮来切换

 1.1.3、创建 schema

        schema 相当于是一种归类分组的作用,毕竟海量数据场景下,一个数据库下面可能有成千上万张表,Greenplum 在库和表之间添加了一层 schema 使得表可以更好被管理。

CREATE SCHEMA my_biz;
1.1.4、查询所有数据库

同样,如果在 PSQL 的 CLI 命令行的话可以通过下面的命令来查看所有数据库:

\l

也可以使用下面的 SQL 命令:

-- 显示所有的库
SELECT * FROM pg_database;

1.1.5、删除数据库

 如果要删除数据库,必须先离开该数据库(\c 切换到别的数据库)才能删除

DROP DATABASE my_db1;

 1.2、表操作

1.2.1、创建表

语法
CREATE [EXTERNAL] TABLE table_name( -- 创建外部表,建表的同时可以指定一个实际数据的路径(location 可以是linux,也可以是 HDFS)column1 datatype [NOT NULL] [DEFAULT] [CHECK] [UNIQUE], -- 字段约束column2 datatype,column3 datatype,.....columnN datatype,[PRIMARY KEY()] -- 指定当前主键
)[ WITH ()] -- 定义数据追加方式、压缩格式、压缩级别等[LOCATION()] -- 如果使用外部表才会配合使用这个关键字[FORMAT] -- 定义当前表的存储格式[COMMENT] -- 注释[PARTITION BY] -- 分区字段 同时也是创建分区表的关键字[DISTRIBUTE BY ()]; -- 指定分布数据的键值(比如使用哈希算法计算数据的存储位置)
内部表和外部表的区别

(1)内部表(Regular Tables)

数据存储:内部表的数据直接存储在 GreenPlum 数据库的数据文件中。这意味着数据被物理存储在数据库服务器上。

事务管理:内部表完全支持事务管理。这包括 ACID 属性(原子性、一致性、隔离性和持久性),确保数据完整性和可靠性。

索引和约束:你可以在内部表上创建索引和约束,这有助于提高查询性能和维护数据完整性。

管理和维护:内部表可以使用数据库的全部管理和维护功能,如备份和恢复。

适用性:适用于需要高性能查询和事务完整性的数据。

(2)外部表(External Tables)

数据存储:外部表的数据存储在数据库外部,如在文件系统、Hadoop HDFS 或任何可通过 SQL/MED(SQL Management of External Data)访问的数据源。外部表仅存储数据的元数据和位置信息。

事务管理:外部表不支持事务管理。它们主要用于读取和加载操作,不保证 ACID 属性。

索引和约束:由于数据实际存储在外部,你不能在外部表上创建索引或强制执行数据库级别的约束。

管理和维护:外部表的管理相对简单,因为它们只是对外部数据源的引用。备份和恢复通常不适用于外部表本身,而是应用于数据源。

适用性:适用于 ETL(Extract, Transform, Load)操作,即从外部数据源提取数据,然后可能将其转换和加载到内部表中进行进一步处理。

案例

        创建外部表这里使用的数据源是 linux 文件系统下的一个 csv文件,需要我们使用 Greenplum 为该路径开启一个 gpfdist 服务: 

-- -d指定数据所在目录 -p 指定端口
gpfdist -d ./ -p 8081 &
-- 创建内部表
CREATE TABLE doctor(doctor_id serial primary key ,name varchar(100),department varchar(100),hire_date date
);INSERT INTO doctor (name, department, hire_date) VALUES('小美','护士','2024-07-08'),('二狗','呼吸内科','2024-07-08'),('铁蛋','骨科','2024-07-08');DROP EXTERNAL TABLE supplier;
-- 外部表
CREATE EXTERNAL TABLE supplier(id varchar(10),name varchar(20),job varchar(20),birthday varchar(20))
LOCATION ('gpfdist://hadoop102:8081/patient.csv')
FORMAT 'CSV';-- 查询外部表
SELECT * FROM supplier;

查询结果

  

1.2.2、修改表

修改表名
ALTER TABLE table_name RENAME TO new_name;
增加/修改/替换列信息
-- 新增列
ALTER TABLE doctor ADD COLUMN addr varchar(20);
-- 更新列名
ALTER TABLE doctor  RENAME addr TO address;
-- 更新列数据类型
ALTER TABLE doctor ALTER COLUMN age TYPE int;
-- 删除列信息
ALTER TABLE doctor DROP COLUMN address;

1.2.3、清空表

注意:只能清除内部表,但是不能清除外部表 

TRUNCATE TABLE doctor;

1.2.4、删除表

DROP [EXTERNAL] TABLE table_name;

2、DML

2.1、数据导入

2.1.1、copy 方式

语法

COPY table_name FROM file_path DELIMITER sep;

创建内部表并准备数据:

CREATE TABLE student(name varchar(20),department varchar(20),age int
);

导入并查询(这里的文件路径为主节点的文件路径,上面的外部表数据源虽然也在主节点但是需要通过 gpfdist 协议,和这里不一样):

COPY student FROM '/home/gpadmin/software/test/student.csv' DELIMITER ',';SELECT * FROM student;

查询结果:

 

2.1.2、通过查询向表中查询数据

INSERT INTO student
SELECT name,job AS department,0 AS age FROM supplier;

2.1.3、通过查询语句创建并加载数据

CREATE TABLE student2 AS SELECT * FROM student;

2.2、数据导出

COPY student2 TO '/home/gpadmin/software/test/student.txt';

2.3、数据更新和删除

 2.3.1、更新数据

UPDATE student2 SET age = 18,name = 'test' WHERE age = 0;

2.3.2、删除数据

DELETE FROM student2 WHERE age = 20;

总结 

        剩下的一些查询语句已经在 MySQL、HQL 中练习很多了,这里不再浪费时间了,下去之后多花点时间练练 SQL 题就OK了。

        关于 Greenplum 再深入的内容比如分布式事务、数据备份与迁移等资料网上比较少,之后慢慢精进。

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

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

相关文章

python爬虫加入进度条

安装tqdm和requests库 pip install tqdm -i https://pypi.tuna.tsinghua.edu.cn/simplepip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple带进度条下载 import time # 引入time模块,用于处理时间相关的功能 from tqdm import * # 从tqdm包中…

【AI大模型】赋能儿童安全:楼层与室内定位实践与未来发展

文章目录 引言第一章:AI与室内定位技术1.1 AI技术概述1.2 室内定位技术概述1.3 楼层定位的挑战与解决方案 第二章:儿童定位与安全监控的需求2.1 儿童安全问题的现状2.2 智能穿戴设备的兴起 第三章:技术实现细节3.1 硬件设计与选择传感器选择与…

SpringSecurity中文文档(Servlet Authorization Architecture )

Authorization 在确定了用户将如何进行身份验证之后,还需要配置应用程序的授权规则。 Spring Security 中的高级授权功能是其受欢迎的最有说服力的原因之一。无论您选择如何进行身份验证(无论是使用 Spring Security 提供的机制和提供者,还是与容器或其…

两张图片合并(右上角添加水印,兼容矢量图)保留原来的颜色

无缝合并两张图片(封面右上角添加logo)-- opencv : 进行添加logo(水印)由于使用了cv2.seamlessClone,cv2.seamlessClone使用了泊松克隆(Poisson Cloning),会根据周围的颜色信息进行颜色调整&…

three-tile 一个开源的轻量级三维瓦片库

three-tile 介绍 three-tile 是一个开源的轻量级三维瓦片库,它基于threejs使用typescript开发,提供一个三维地形模型,能轻松给你的应用增加三维瓦片地图。 源码:https://github.com/sxguojf/three-tile 示例:https:/…

【TB作品】51单片机 Proteus仿真 00013红外proteus仿真循迹避障小车

实验报告:智能小车系统设计与实现 一、背景介绍 本实验旨在设计并实现一个基于STC89C52单片机控制的智能小车系统。该系统通过超声波传感器进行避障,通过红外接收器实现远程控制,同时具备循迹功能。整个系统的核心是单片机,它通…

YOLOv10改进 | 损失函数篇 | InnerIoU、InnerSIoU、InnerWIoU、FocusIoU等损失函数

一、本文介绍 本文给大家带来的是YOLOv10最新改进,为大家带来最近新提出的InnerIoU的内容同时用Inner的思想结合SIoU、WIoU、GIoU、DIoU、EIOU、CIoU等损失函数,形成 InnerIoU、InnerSIoU、InnerWIoU、等新版本损失函数,同时还结合了Focus和…

LeetCode42(接雨水)[三种解法:理解动态规划,双指针,单调栈]

接雨水 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 这是一道困难题,难度确实有点层次.我们先来朴素思想走一波. 要求能接多少雨水,我们可以具化到每个硅谷,每个硅谷能存多少雨水,那么答案就是每个…

PDA:Prompt-based Distribution Alignment for Unsupervised Domain Adaptation

文章汇总 式中, y s y^s ys表示源域数据的one-hot ground-truth, K K K为类数, w i w_i wi​和 z ~ s \tilde{z}_s z~s​分别表示源域经过提示调优的最终文本表示和最终图像表示的第 i i i类。 同理,为了进一步利用目标领域的数据…

防火墙详解(USG6000V)

0、防火墙组网模式 防火墙能够工作在三种模式下分别是路由模式、透明模式、旁路检测模式、混合模式 0.1、路由模式 路由模式:防火墙全部以第三层对外连接,即接口具有IP 地址。一般都用在防火墙是边界的场景下 防火墙需要的部署/配置: 接…

10、DDD分层架构

微服务架构模型有很多种,例如洋葱架构、CQRS和六边形架构等。虽然这些架构模式提出的时代和背景不同,但其核心理念都是为了设计出“高内聚,低耦合”的微服务,轻松实现微服务的架构演进。DDD分层架构的出现,使微服务的架…

【uniapp-ios】App端与webview端相互通信的方法以及注意事项

前言 在开发中,使用uniapp开发的项目开发效率是极高的,使用一套代码就能够同时在多端上线,像笔者之前写过的使用Flutter端和webview端之间的相互通信方法和问题,这种方式本质上实际上是h5和h5之间的通信,网上有非常多…

物联网实训室建设可行性报告

一、建设物联网实训室的目的和意义 随着信息技术的快速发展,物联网(IoT)已成为推动社会进步和经济发展的关键技术之一。物联网技术的集成应用,不仅能够提高生产效率,还能促进智慧城市、智能家居、智能农业等多个领域的…

python04——类(基础new)

类其实也是一种封装的思想,类就是把变量、方法等封装在一起,然后可以通过不同的实例化对其进行调用操作。 1.类的定义 class 类名: 变量a def __init__ (self,参数2,参数2...):初始化函数!!&…

简单实现联系表单Contact Form自动发送邮件

如何实现简单Contact Form自动邮件功能?怎样简单设置? 联系表单不仅是访客与网站所有者沟通的桥梁,还可以收集潜在客户的信息,从而推动业务的发展。AokSend将介绍如何简单实现一个联系表单,自动发送邮件的过程&#x…

【游戏客户端】大话slg玩法架构(一)滚动基类

【游戏客户端】大话slg玩法架构(一)滚动基类 大家好,我是Lampard家杰~~ 今天我们兑现诺言,给大家分享SLG玩法的实现j架构,关于SLG玩法的介绍可以参考这篇上一篇文章:【游戏客户端】制作率土之滨Like玩法 PS…

机器学习统计学基础 - 最大似然估计

最大似然估计(Maximum Likelihood Estimation, MLE)是一种常用的参数估计方法,其基本原理是通过最大化观测数据出现的概率来寻找最优的参数估计值。具体来说,最大似然估计的核心思想是利用已知的样本结果,反推最有可能…

binutils ifunc 流程图

上图是x86 binutils 的流程图。 函数说明_bfd_x86_elf_link_hash_table_createInit local STT_GNU_IFUNC symbol hash.elf_x86_64_check_relocsAdd support for handling STT_GNU_IFUNC symbols_bfd_elf_x86_get_local_sym_hashFind and/or create a hash entry for local sym…

Leetcode—97. 交错字符串【中等】

2024每日刷题&#xff08;140&#xff09; Leetcode—97. 交错字符串 2d动规实现代码 class Solution { public:bool isInterleave(string s1, string s2, string s3) {int m s1.length();int n s2.length();int len s3.length();if(m n ! len) {return false;}vector<…

SpringBoot日常:封装rabbitmq starter组件

文章目录 逻辑实现RabbitExchangeEnumRabbitConfigRabbitModuleInfoRabbitModuleInitializerRabbitPropertiesRabbitProducerManagerPOM.xmlspring.factories 功能测试application.yml配置生产者&#xff1a;消费者&#xff1a;测试结果&#xff1a;总结 本章内容主要介绍编写一…