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.pswp.cn/web/42155.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/42155.shtml
英文地址,請注明出處:http://en.pswp.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包中…

算法力扣刷題 三十六【二叉樹迭代遍歷】

前言 記錄三十五 介紹了二叉樹基礎,和遞歸法模版及遍歷方式; 遞歸:代碼簡單,但要想清楚三步: 確定參數和返回值;確定終止條件,并return什么?;終止條件外的邏輯&#xf…

【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),會根據周圍的顏色信息進行顏色調整&…

tcp并發設計

4注意:原始代碼,如果先關閉服務器端,再次開啟服務器的時候會報"connect: Connection refused "錯誤,這是因為先關服務器端,導致系統認為客戶端仍然在與服務器端連接造成。 可以使用setsockopt setsockopt函…

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 地址。一般都用在防火墻是邊界的場景下 防火墻需要的部署/配置: 接…

【入門篇】STM32尋址范圍(更新中)

寫在前面 STM32的尋址范圍涉及存儲器映射和32位地址線的使用。并且STM32的內存地址訪問是按字節編址的,即每個存儲單元是1字節(8位)。 一、尋址大小與范圍 地址線根數 地址編號(二進制) 地址編號數(即內存大小) <

實現基于Elasticsearch的搜索服務

實現基于Elasticsearch的搜索服務 大家好&#xff0c;我是微賺淘客系統3.0的小編&#xff0c;也是冬天不穿秋褲&#xff0c;天冷也要風度的程序猿&#xff01; 1. Elasticsearch簡介 Elasticsearch是一個開源的分布式搜索引擎&#xff0c;提供強大的全文搜索和分析功能。本文…

10、DDD分層架構

微服務架構模型有很多種&#xff0c;例如洋蔥架構、CQRS和六邊形架構等。雖然這些架構模式提出的時代和背景不同&#xff0c;但其核心理念都是為了設計出“高內聚&#xff0c;低耦合”的微服務&#xff0c;輕松實現微服務的架構演進。DDD分層架構的出現&#xff0c;使微服務的架…

什么是ThreadLocal以及內存泄漏問題、hash沖突問題

ThreadLocal是什么 ThreadLocal類用來提供線程內部的局部變量 它主要有三大特性&#xff1a; 線程安全: 在多線程并發的場景下保證線程安全傳遞數據&#xff1a;通過ThreadLocal在同一線程傳遞公共變量線程隔離&#xff1a;每個線程的變量都是獨立的&#xff0c;不會互相影響…

這次讓我們從幾個點認識一下Mysql的Innodb

MySQL 的 InnoDB 存儲引擎是 MySQL 默認和最常用的存儲引擎之一。它主要關注的是高可靠性、性能以及完整的事務支持。以下是對 InnoDB 存儲引擎的詳細介紹&#xff1a; 1. 數據庫特性 1.1 事務支持 InnoDB 是完全支持事務的存儲引擎&#xff0c;支持四種主要的事務隔離級別&…

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

前言 在開發中&#xff0c;使用uniapp開發的項目開發效率是極高的&#xff0c;使用一套代碼就能夠同時在多端上線&#xff0c;像筆者之前寫過的使用Flutter端和webview端之間的相互通信方法和問題&#xff0c;這種方式本質上實際上是h5和h5之間的通信&#xff0c;網上有非常多…

ios身份證實名認證接口開發示例助力電商物流實名認證

為了更好的利用貨車資源&#xff0c;也方便企業正常的運送貨物&#xff0c;“互聯網電商”平臺可謂風起云涌。貨車司機和有發貨需求的人們可以在物流平臺注冊&#xff0c;貨車司機接單為有運送需求的用戶提供有償貨運服務。那么&#xff0c;如何讓企業放心的將貨物安心的交予貨…

物聯網實訓室建設可行性報告

一、建設物聯網實訓室的目的和意義 隨著信息技術的快速發展&#xff0c;物聯網&#xff08;IoT&#xff09;已成為推動社會進步和經濟發展的關鍵技術之一。物聯網技術的集成應用&#xff0c;不僅能夠提高生產效率&#xff0c;還能促進智慧城市、智能家居、智能農業等多個領域的…