MySQL MaxCompute與AnalyticDB實現資料處理與轉換過程

大雄45發表於2023-02-04
導讀 AnalyticDB MySQL(簡稱ads)與 MaxCompute(簡稱odps)進行資料轉換時,個別語法有差別,記錄下來,方便備查,文中透過示例程式碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧
1、行轉列函式

odps 中行轉列函式 wm_concat,將列資訊轉成行顯示,可指定分隔符。

語法格式

wm_concat(separator, string) ,其中separator為分隔符,支援字串去重,即distinct.

select wm_concat('|',sku_id)
from t_business_order_odps
where
create_time >= '2022-09-30 00:00:00';

ads 中行轉列函式 group_concat,即將列資訊轉成行顯示,預設逗號分隔。如在mysql中查詢表的所有列名。

select group_concat(COLUMN_NAME)
from information_schema.COLUMNS
where
TABLE_NAME = 't_business_order';
2、判空函式

odps 中判空函式 coalesce ,如若無運費,則顯示為0。

select coalesce(freight_amount,0)
from t_business_order_odps
where
create_time >= '2022-09-30 00:00:00';

odps 中判斷函式 decode ,如若無運費,則顯示為0。

語法格式

decode(expression, search, result[, search, result]…[, default])

表示:三元運運算元,即實現IF-THEN-ELSE分支選擇的功能

select decode(order_amount,freight_amount,0)
from t_business_order_odps
where
create_time >= '2022-09-30 00:00:00';

ads 中判空函式 ifnull,如若無運費,則顯示為0。

select ifnull(freight_amount,0)
from t_business_order
where
create_time >= '2022-09-30 00:00:00';
3、時間函式

odps 中 時間欄位型別為 datetime,獲取當前時間函式為 getdate()。

select coalesce(freight_amount,0),getdate() as etl_time
from t_business_order_odps
where
create_time >= '2022-09-30 00:00:00';

ads 中時間欄位型別為 timestamp,獲取當前時間函式為 now()。

select ifnull(freight_amount,0),now() as etl_time
from t_business_order
where
create_time >= '2022-09-30 00:00:00';
4、建表語句

odps 中 字串欄位型別為 string,時間欄位型別為 datetime。

CREATE TABLE t_business_order_odps (
    prov_name string COMMENT '省名稱',
    city_name string COMMENT '地市名',
    cty_name string COMMENT '區縣名稱',
    order_no string COMMENT '訂單號',
    order_amount bigint COMMENT '運費',
    freight bigint COMMENT '運費',
    insert_month bigint COMMENT '插入月份',
    created_time datetime COMMENT '建立時間'
)
COMMENT '業務訂單主表;

ads 中字串欄位型別為 varchar,時間欄位型別為 timestamp。

CREATE TABLE t_business_orde (
    prov_name varchar COMMENT '省名稱',
    city_name varchar COMMENT '地市名',
    cty_name varchar COMMENT '區縣名稱',
    order_no varchar COMMENT '訂單號',
    order_amount bigint COMMENT '運費',
    freight bigint COMMENT '運費',
    insert_month bigint COMMENT '插入月份',
    created_time timestamp COMMENT '建立時間'
)
PARTITION BY HASH KEY (order_no) PARTITION NUM 128
TABLEGROUP ads_sc_rpt
OPTIONS (UPDATETYPE='batch')
COMMENT '業務訂單主表';

知識梳理

OPTIONS 型別有兩種

1)batch 批次表,即資料批次入庫,適用於從odps同步到ads;

2)realtime 實時表,即資料單條入庫,適用於日誌等資訊單條入庫。

原文來自:


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2933663/,如需轉載,請註明出處,否則將追究法律責任。

相關文章