主頁 >  其他 > 阿里云MaxComputer SQL學習之DML

阿里云MaxComputer SQL學習之DML

2022-01-23 07:39:30 其他

🐯上一節中,我們介紹了阿里云MaxComputer中的資料定義語言,這一節中,我們將學習資料操作語言,對往期內容感興趣的小伙伴可以查看如下內容👇:

  • 第一篇: Hadoop之Hive資料的匯入與匯出(DML).
  • 第二篇: Hadoop之Hive查詢陳述句.
  • 第三篇:Hadoop之Hive的7種Join陳述句.
  • 第四篇: Hadoop之Hive的排序.
  • 第五篇: Hadoop之Hive的磁區表.
  • 第六篇: Hadoop之Hive的分桶表.
  • 阿里云系列: 阿里云MaxComputer SQL學習之DDL.

🐅讓我們進入今日份的阿里云MaxComputer的學習,上一章節有粉絲反應沒有例子,這次我使用阿里云的DataWorks給大家演示一下,

目錄

  • 1. MaxComputer SQL的DML
    • 1.1 查詢資料
      • 實驗
    • 1.2 更新資料
      • 實驗
    • 1.3 多路輸出
      • 實驗
    • 1.4 表關聯
      • 實驗
    • 1.5 Mapjoin(提高效率)
      • 實驗
    • 1.6 分支運算式
      • 實驗
  • 2. 總結
  • 3. 參考資料

1. MaxComputer SQL的DML

DML主要包括如下的兩種操作:

  • 查詢資料:單表查詢、表連接(join)、分支條件判斷等,
  • 更新資料:插入資料、覆寫插入、多路輸出等等,

1.1 查詢資料

--語法格式:
SELECT [ALL | DISTINCT] <select_expr>, <select_expr>,...
FROM <table_reference>
[WHERE <where_condition>]
[GROUP BY ?col_list>]
[HAVING <having_condition>]
[ORDER BY <order_condition>]
[DISTRIBUTE BY <distribute_condition> [SORT BY <sort_condition>] ]
[LIMIT <number>]
  • 列可以用列名指定,* 代表所有的列,
  • 支持嵌套子查詢,子查詢必須要有別名
  • 子查詢可以與其他表或者子查詢做join

實驗

先來看看表t_dml中的資料
在這里插入圖片描述

  1. 檢查表中“浙江省”相關的資料資訊
    在這里插入圖片描述

  2. 核查銷售時間大于或等于某日期的資料資訊
    在這里插入圖片描述

  3. 檢查總量大于某量的城市資訊
    在這里插入圖片描述

  4. 統計浙江省銷量大于某量的銷售城市排名 (子查詢)
    在這里插入圖片描述

  5. 城市排名統計
    在這里插入圖片描述

1.2 更新資料

  • 插入到普通表或者靜態磁區
--基本語法:輸出到普通表或者靜態磁區
INSERT (INTO|OVERWRITE} TABLE <table_name> [PARTITION (<pt_spec>)] [<col_name>,<col_ name>...)]
<select statement>
FROM <from_statement>
  • 插入到動態磁區
--基本語法:輸出到動態磁區
INSERT (INTO|OVERWRITE) TABLE <table_name> PARTITION (<ptcol_name>[, <ptcol_name>...])
<select_statement? FROM <from_statement>;
  • 動態磁區就是磁區值是由磁區欄位的值來決定,靜態磁區是磁區欄位已經指定為固定值
  • 如果目標表有多級磁區,在運行insert陳述句時允許指定部分磁區為靜態,但是靜態磁區必須是高級磁區,
  • 動態磁區的磁區值不可以為NULL,

實驗

  1. 插入一條記錄
insert into table t_dml select -1,'1900-01-01 00:00:00','','',0,0,0 from dual;

在這里插入圖片描述
2. 添加磁區
在這里插入圖片描述
3. 往磁區添加資料
在這里插入圖片描述
4. 覆寫插入
在這里插入圖片描述
5. 磁區表資料操作 (依次執行下面的三個操作,添加磁區、插入資料、檢查磁區表資料)
在這里插入圖片描述
6. 清空磁區表
使用覆寫插入的方式清空非磁區表

 insert overwrite table t_dml select * from t_dml where 1=2;  --清空操作

在這里插入圖片描述
通過洗掉的方式洗掉磁區

alter table t_dml_p drop if exists partition (sale_date='2015-01-01');

在這里插入圖片描述

1.3 多路輸出

多路輸出的意思是一個select輸出向多個表或多個磁區插入資料

--基本語法
FROM <from statement>
INSERT OVERWRITE INTO TABLE <table_name1> [PARTITION (<pt_spec1>)]
?select_statement1>
INSERT OVERWRITE INTO TABLE <table_name2> [PARTITION (?pt_spec2>)]
?select_statement2>
. . .;

多路輸出的限制:

  • 單個sql里最多可以寫255路輸出
  • 對于磁區表,同一目標磁區不可以出現多次
  • 對于未磁區表,該表不能做為目標表多次出現
  • 對于同一張表的不同磁區,不能同時有insert overwrite 和insert into 操作

實驗

將表 t_dml 中的資料detail_id編號大于5340000的插入一張臨時表備查,并將5月1日的記錄插入磁區表 t_dml_p 的20150501磁區中去,將5月2日的資料插入20150502磁區,分為三個步驟:
1) 目標表增加磁區
2) 備份核查資料
3) 多路輸出不同磁區

  1. 增加磁區,依次增加兩個磁區,操作如下

在這里插入圖片描述
2. 創建臨時表
在這里插入圖片描述
3. 將表t_dml中的資料按不同條件同時輸出到新建的表和新建的t_dml_p的兩個磁區中

from t_dml
insert into table t_dml_01

select detail_id,sale_date,province,city,product_id,cnt,amt
where detail_id > 5340000

insert overwrite table t_dml_p  partition (sale_date='20150501')
select detail_id,province,city,product_id,cnt,amt
where sale_date >= '2015-05-01 00:00:00'
and sale_date <= '2015-05-01 23:59:59'

insert overwrite table t_dml_p  partition (sale_date='20150502')
select detail_id,province,city,product_id,cnt,amt
where sale_date >= '2015-05-02 00:00:00'
and sale_date <= '2015-05-02 23:59:59' ;

在這里插入圖片描述

1.4 表關聯

下圖是連接的幾種情況:陰影部分表示最后的結果部分
在這里插入圖片描述

SELECT [t1.col_name, ]
[t2.col_name,]
FROM
<tab_name1> t1
[LEFT OUTER] JOIN <tab_name2> t2
ON <[t1.col_name = t2.col_name]
[AND t1.col_name = t2.col_name]
......>

實驗

先展示一下t_product表,事實表t_dml包含了銷售記錄資訊,其中欄位 product_id為產品標識,可以關聯另一張維表t_product獲得產品的說明資訊,
在這里插入圖片描述

  1. 按照產品分類(category_name)統計銷售金額
    在這里插入圖片描述

1.5 Mapjoin(提高效率)

  1. 可以使用不等值的or作為連接條件
-- 示例1:不等值 or 作為連接條件
SELECT /*+ MAPJOIN(a) */
a. shop_name
,a. total_price
,b. total_price
FROM sale_detail_sj a
JOIN sale_detail b
ON a.total_price<b.total_price
OR a.total_price + b.total_price < 500;
  1. 提升性能
--示例2:提升性能
SELECT /* + MAPJOIN(a) */
a. shop_name
,b. customer_id
,b. total_price
FROM shop a
JOIN sale_detail b
ON a.shop_name = b.shop_name;
  • 使用情景:一個大表和一個或多個小表做join
  • 基本原理:將用戶指定的小表全部加載到執行 join 操作的程式的記憶體中,從而加快 join 的執行速度
  • 注意事項:
    left outer join 的左表必須是大表
    right outer join 的右表必須是大表
    inner join 左表或右表均可以作為大表
    full outer join不能使用 mapjoin
    支持小表為子查詢,需要使用別名
    可以使用不等值連接或者使用 or 連接多個條件
    目前最多支持指定128張小表
    所有小表加載至記憶體后占用的記憶體總和不得超過512M

實驗

由于各種原因,造成銷售資訊表 t_dml 中的記錄存在一些質量問題,可能的問題包括:
1- 產品標識錯誤: 可以通過單價判斷,單價相等的標識不同,則可能存在錯誤
2- 價格錯誤:如果銷售記錄中的平均單價高于產品維表中的定價,則可能存在問題
請協助發現這些可能存在問題的記錄,

  1. left outer join 實作質量問題
    在這里插入圖片描述
  2. inner join (join) 實作質量問題
    在這里插入圖片描述

在做關聯時,如果關聯條件比較復雜(比如包含 or 等連接條件)或者是關聯條件中存在非等值關聯(比如大于、小于或者不等于等),則普通的 join 無法實作,可以采用帶有 mapjoin HINT 的 join 方法,

1.6 分支運算式

case when 有兩種寫法:

  1. case后面接欄位
--兩種 CASE WHEN 語法:
--1. case+value
CASE <value>
WHEN <condition 1> then <result 1>
WHEN <condition 2> then <result 2>
else <result  n>
END
-- 例如:
SELECT CASE gender WHEN 1 THEN '男' WHEN 2 THEN '女' END
FROM table1;
  1. case when后面接欄位(大多數用這種,更靈活)
-- 2. case when+value
CASE
WHEN <condition 1> then <result 1>
WHEN <condition 2> then <result 2>
else <result n>
END
--例如:
SELECT CASE WHEN gender=1 THEN '男' WHEN gender=2 THEN '女' END
FROM table1;
  • 如果回傳結果型別不一樣,會進行型別轉換,回傳統一的結果,
  • 非貪婪式,碰到第一個滿足條件的結果就會回傳,

實驗

在目前的售價上實行9折優惠,一次購買6個及以上產品的,給與8折優惠,請基于5月份資料想評估一下此次活動的成本(為了簡單可行,活動成本定義為目前銷售額減掉優惠后的銷售額)
在這里插入圖片描述

2. 總結

在這一部分中,需要注意的點:

  • 企業中所有表的查詢都需要帶上磁區,
  • 記住mapjoin的原理,面試重點,

3. 參考資料

《阿里云全球培訓中心》
《阿里云DataWorks使用手冊》

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419141.html

標籤:其他

上一篇:3、Scala源檔案的撰寫和運行及編譯結果的反編譯深入分析(單例設計模式)

下一篇:RabbitMQ安裝以及訊息模型使用攻略

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 2023年最新微信小程式抓包教程

    01 開門見山 隔一個月發一篇文章,不過分。 首先回顧一下《微信系結手機號資料庫被脫庫事件》,我也是第一時間得知了這個訊息,然后跟蹤了整件事情的經過。下面是這起事件的相關截圖以及近日流出的一萬條資料樣本: 個人認為這件事也沒什么,還不如關注一下之前45億快遞資料查詢渠道疑似在近日復活的訊息。 訊息是 ......

    uj5u.com 2023-04-20 08:48:24 more
  • web3 產品介紹:metamask 錢包 使用最多的瀏覽器插件錢包

    Metamask錢包是一種基于區塊鏈技術的數字貨幣錢包,它允許用戶在安全、便捷的環境下管理自己的加密資產。Metamask錢包是以太坊生態系統中最流行的錢包之一,它具有易于使用、安全性高和功能強大等優點。 本文將詳細介紹Metamask錢包的功能和使用方法。 一、 Metamask錢包的功能 數字資 ......

    uj5u.com 2023-04-20 08:47:46 more
  • vulnhub_Earth

    前言 靶機地址->>>vulnhub_Earth 攻擊機ip:192.168.20.121 靶機ip:192.168.20.122 參考文章 https://www.cnblogs.com/Jing-X/archive/2022/04/03/16097695.html https://www.cnb ......

    uj5u.com 2023-04-20 07:46:20 more
  • 從4k到42k,軟體測驗工程師的漲薪史,給我看哭了

    清明節一過,盲猜大家已經無心上班,在數著日子準備過五一,但一想到銀行卡里的余額……瞬間心情就不美麗了。最近,2023年高校畢業生就業調查顯示,本科畢業月平均起薪為5825元。調查一出,便有很多同學表示自己又被平均了。看著這一資料,不免讓人想到前不久中國青年報的一項調查:近六成大學生認為畢業10年內會 ......

    uj5u.com 2023-04-20 07:44:00 more
  • 最新版本 Stable Diffusion 開源 AI 繪畫工具之中文自動提詞篇

    🎈 標簽生成器 由于輸入正向提示詞 prompt 和反向提示詞 negative prompt 都是使用英文,所以對學習母語的我們非常不友好 使用網址:https://tinygeeker.github.io/p/ai-prompt-generator 這個網址是為了讓大家在使用 AI 繪畫的時候 ......

    uj5u.com 2023-04-20 07:43:36 more
  • 漫談前端自動化測驗演進之路及測驗工具分析

    隨著前端技術的不斷發展和應用程式的日益復雜,前端自動化測驗也在不斷演進。隨著 Web 應用程式變得越來越復雜,自動化測驗的需求也越來越高。如今,自動化測驗已經成為 Web 應用程式開發程序中不可或缺的一部分,它們可以幫助開發人員更快地發現和修復錯誤,提高應用程式的性能和可靠性。 ......

    uj5u.com 2023-04-20 07:43:16 more
  • CANN開發實踐:4個DVPP記憶體問題的典型案例解讀

    摘要:由于DVPP媒體資料處理功能對存放輸入、輸出資料的記憶體有更高的要求(例如,記憶體首地址128位元組對齊),因此需呼叫專用的記憶體申請介面,那么本期就分享幾個關于DVPP記憶體問題的典型案例,并給出原因分析及解決方法。 本文分享自華為云社區《FAQ_DVPP記憶體問題案例》,作者:昇騰CANN。 DVPP ......

    uj5u.com 2023-04-20 07:43:03 more
  • msf學習

    msf學習 以kali自帶的msf為例 一、msf核心模塊與功能 msf模塊都放在/usr/share/metasploit-framework/modules目錄下 1、auxiliary 輔助模塊,輔助滲透(埠掃描、登錄密碼爆破、漏洞驗證等) 2、encoders 編碼器模塊,主要包含各種編碼 ......

    uj5u.com 2023-04-20 07:42:59 more
  • Halcon軟體安裝與界面簡介

    1. 下載Halcon17版本到到本地 2. 雙擊安裝包后 3. 步驟如下 1.2 Halcon軟體安裝 界面分為四大塊 1. Halcon的五個助手 1) 影像采集助手:與相機連接,設定相機引數,采集影像 2) 標定助手:九點標定或是其它的標定,生成標定檔案及內參外參,可以將像素單位轉換為長度單位 ......

    uj5u.com 2023-04-20 07:42:17 more
  • 在MacOS下使用Unity3D開發游戲

    第一次發博客,先發一下我的游戲開發環境吧。 去年2月份買了一臺MacBookPro2021 M1pro(以下簡稱mbp),這一年來一直在用mbp開發游戲。我大致分享一下我的開發工具以及使用體驗。 1、Unity 官網鏈接: https://unity.cn/releases 我一般使用的Apple ......

    uj5u.com 2023-04-20 07:40:19 more