1. 程式人生 > >hive多表聯查實現取最新資料

hive多表聯查實現取最新資料

hive不支援update語句,但我們可以通過增加一個變更表來間接實現update功能。

假設我們有一張user表,對user表的更新都作為新記錄插入到user_delta表中,每條插入都有插入時間欄位updated。獲取最新的user資訊:

SELECT
  COALESCE(b.`id`, a.`id`) AS `id`  --COALESCE是返回首個不為空的表示式
  ,COALESCE(b.`name`, a.`name`) AS `name`
  ,COALESCE(b.`age`, a.`age`) AS `age`
  ,COALESCE(b.`updated`, a.`updated`
) AS `updated` FROM dw_stage.`user` a FULL OUTER JOIN ( -- 增量資料會包含重複資料,因此需要選擇最新的那一條 SELECT `id`, `name`, `age`, `updated` FROM ( SELECT *, ROW_NUMBER() OVER (PARTITION BY `id` ORDER BY `updated` DESC) AS `n` FROM dw_stage.`user_delta` ) b WHERE `n` = 1 ) b ON a.`id` = b.`id`;

mysql中不支援ROW_NUMBER() OVER (PARTITION BY)分窗語句,可以用如下方式實現相同功能:

set @time_rank=0;
set @current_CustomerID=Null;select * from (
SELECT *, 
@time_rank:=if(@current_CustomerID = CustomerID, @time_rank + 1, 1) as num, 
@current_CustomerID := CustomerID 
from OrderInfo 
ORDER BY CustomerID, CreateTime desc 
) tmp 
where num = 1;

這樣會取出每個CustomerID最新CreateTime的記錄。
然後就可以用聯查獲取最新資料了。

相關推薦

hive聯查實現最新資料

hive不支援update語句,但我們可以通過增加一個變更表來間接實現update功能。 假設我們有一張user表,對user表的更新都作為新記錄插入到user_delta表中,每條插入都有插入時間欄位updated。獲取最新的user資訊: SELEC

mongodb的聯查與後續的資料處理

背景與簡述 背景 使用nosql作多表操作時很麻煩的,所以平時都沒使用過多表,但最近遇到一個專案必須使用多表,沒法,就研究了一下mongodb的多表聯查功能. mongodb的多表聯查主要通過聚合完場,使用的是關鍵子lookup,而後續處理中lookup

(六)springboot + mybatis plus實現聯查分頁3.X版本

註明 : 上兩篇文章我們講解了springboot+mybatis-plus對於單表的CRUD和條件構造器的使用方法,但是對於我們的實戰專案中多表聯查也是經常會出現的。今天我們就來說下怎麼在springboot+MP模式下實現多表聯查並分頁。 MP推薦使用的是

Spring Data JPA 實現聯查的另一種方式

       通過封裝實體類來實現多表聯查的方式,利用Spring Data JPA @Query定義中的SpEL中的 ( rd.orderId=:#{#orderPageReq.orderId} or :#{#orderPageReq.orderId} is null

spring data jpa 實現條件複雜查詢及聯查

最近發現JPA在處理單表時,很方便,但多表就比較複雜了。今天寫一下端午這兩天琢磨的多條件查詢,還有多表聯查。文章比較長,大部分都是程式碼,不願意看的程式碼copy下去,直接可以實現;想交流的可以看完,然後留言交流。maven依賴啊,配置,繼承寫法等知識點不展開說了,之前寫過一

springboot + mybatis plus實現聯查分頁

auto score ice get pro err type 實現 app 1 配置分頁插件 public class MybatisPlusConfig { @Bean public PaginationInterceptor paginationInt

SQL聯查總結

col users 內連接 class pan 右外連接 查詢 sql 查詢條件 交叉連接:(不常用)返回兩個表的笛卡爾乘積(也即全組合排列)中符合查詢條件的數據行。 內連接返回連接表中符合連接條件和查詢條件的數據行。 左外連接返回符合連接條件和查詢條件(即:內連接)的

使用Mybatis進行聯查操作

tail into style 分享圖片 ces oci getname .get 其他 (1)增加一個測試數據庫shop_order,sql語句如下: CREATE DATABASE `shop_order`; USE `shop_order`; CREATE TA

MySQL 查詢實現分析

OS 是你 例子 dump table 多表查詢 一個 ont 由於 1、查看第一個表 mytable 的內容:   mysql> select * from mytable;   +----------+------+------------+-------

SpringBoot整合mybatis聯查之數據庫建

建表 相同字段 將他 必備 關聯 per con 表示 status 1.各關聯表盡量不要使用相同的字段。因為在多表聯查時,如果出現相同的字段,數據庫自動使這些相同字段的值相等。 比如說,訂單表有一個表示訂單狀態的status字段,而它的外鍵關聯的表car有

MYSQL聯查效率分析及優化

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!         &n

MyBatis聯查 引出 RDB關係對映問題

一. 關係型資料庫表關係回顧: 1. 一對一: 丈夫表和妻子表是典型的一對一關係;     RDB中的實現方式: 分別建立丈夫表和妻子表, 將對方表主鍵設為外來鍵, 因為主鍵的唯一性, 保證了一對一關係; 2. 一對多: 公司和員工一般是一對多關係; (注意

Sql基礎之聯查

現構造多個數據表以供查詢表 表a id name  1  張三 2  李四 3  王五 4  小趙 表b ID userid jqnumber 1  1       2張 2  2       4張 表c ID  userid  wcj 1   1       2人 2  

Hive欄位分組Top N且保留某列不相同記錄

  一、問題背景   1.先吐槽一下中國聯通自己的大資料開放能力平臺提供的計算叢集,Hive用的1.1,Spark用的1.5,Kafka0.8,我的天吶,原始的讓人抓狂,好多已經寫好的模型都要重寫......   2.資料格式   第一列是device_number,第

Django框架 + Mysql 班級管理系統(聯查

這裡運用了後端重新整理頁面來實現使用者的一些操作,話不多說,直接上程式碼 首先咱們要先建立一個專案目錄 進入我們電腦cmd 終端中,我這裡使用的是gitbash,cd到我們的專案目錄中 接下來的操作非常重要 建立我們的專案名稱classMS(classma

關於tp5聯查的使用

tinkphp5.1多表聯查個人使用筆記 模型裡用hasMany()寫關聯表到其他表,並且繫結外來鍵 例如: 第二種,比較通用的方式,資料排序使用order('排序欄位名',‘排序方式desc’),paginate('頁數',‘’簡潔模式,'配置檔案')一般用來做分頁。

MySql中聯查是要注意的事項

1.簡單介紹一下多表聯查的概念 當要查詢的資料在多張表時,使用多表聯查 2.多表聯查的分類 MySQL聯合查詢 交叉聯合查詢 cross join 內連線聯合查詢 inner join (MySQL簡寫join) 外連線聯合查詢: 左外連線聯合查詢 left oute

mysql 管理 查詢的時候資料為null

1.1原sql查詢的時候left join的 某張表的資料為null SELECT t.bill_no billNo, t.item_code itemCode, t.status pickTicketStatus, a.status pickTick

Java面試題-資料庫聯查,student,course,sc,teacher

筆試題全是多表聯查,所以就寫了寫,發現以我現在的水平是真的費勁 建立表 /* SQLyog Ultimate v12.5.0 (64 bit) MySQL - 5.6.25-log : Database - moni */ /*!40101 SET NAMES utf8 */

資料庫索引與聯查

2. 索引不會包含有NULL值的列 只要列中包含有NULL值都將不會被包含在索引中,複合索引中只要有一列含有NULL值,那麼這一列對於此複合索引就是無效的。所以我們在資料庫設計時不要讓欄位的預設值為NULL。 3. 使用短索引 對串列進行索引,如果可能應該指定一個字首長度。例如,如果有一個CHAR(255)