日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

RedShift到MaxCompute迁移实践指导

發布時間:2024/8/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 RedShift到MaxCompute迁移实践指导 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡介:?本文主要介紹Amazon Redshift如何遷移到MaxCompute,主要從語法對比和數據遷移兩方面介紹,由于Amazon Redshift和MaxCompute存在語法差異,這篇文章講解了一下語法差異

1.概要

本文檔詳細介紹了Redshift和MaxCompute之間SQL語法的異同。這篇文檔有助于加快sql任務遷移到MaxCompute。由于Redshift和MaxCompute之間語法存在很多差異,因此我們需要修改Redshift上編寫的腳本,然后才能在MaxCompute中使用,因為服務之間的SQL方言不同。

2.遷移前RedShift于MaxCompute的各項對比差異

2.1.1數據類型對比及類型轉化

類別

MaxCompute

建議轉化成MaxCompute類型

Redshift

數值類型

smallint

Y

Y

Y

integer

N

int

Y

bigint

Y

int

Y

decimal

Y

Y

Y

numeric

N

decimal

Y

real

N

float

Y

double

Y

Y

Y

float

Y

float

Y

TINYINT

Y

smallint

N

字符類型

varchar(n)

Y

Y

Y

char(n)

Y

Y

Y

STRING

Y

text

N

string

Y

日期

TIMESTAMP

Y

Y

Y

TIMESTAMPTZ

N

Y

DATE

Y

Y

Y

TIME

N

Y

DateTime

Y

N

boolean 數據類型

boolean

Y

Y

Y

復雜數據類型

ARRAY

Y

Y

N

MAP

Y

Y

N

STRUCT

Y

Y

N

HLLSketch

N

Y

MaxCompoute數據類型參考2.0數據類型版本 - MaxCompute - 阿里云

2.1.2語法對比

MaxCompute沒有schenma、group、庫、存儲過程的概念。只有project、表、分區,MaxCompute建表時沒有自增序列 外鍵等,不支持指定編碼默認utf-8,內部表不支持指定存儲格式默認Aliorc

主要區別

表結構

不能修改分區列列名,只能修改分區列對應的值。

支持增加列,但是不支持刪除列以及修改列的數據類

型。

SQL 常見問題

INSERT 語法上最直觀的區別是:Insert into/overwrite 后面

有個關鍵字 Table。

數據插入表的字段映射不是根據 Select 的別名做的,而

是根據 Select 的字段的順序和表里的字段的順序

UPDATE/DELETE

只有事務表支持UPDATE/DELETE

join

Join 必須要用 on 設置關聯條件,不支持笛卡爾積

觸發器

不支持觸發器、

創建外部函數

maxCompute沒有外部函數

精度

DOUBLE 類型存在精度問題。 不建議在關聯時候進行直接等號關聯兩

個 DOUBLE字段,建議把兩個數做減

法,如果差距小于一個預設的值就認為

是相同,例如 abs(a1- a2) <

0.000000001。

目前產品上已經支持高精度的類型

DECIMAL。

日期

MaxCompute主要的日期類型是datetime(格式yyyy-mm-dd hh:mi:ss) timestamp date,datetime支持的內建函數更加豐富,建議日期轉成datetime做運算,日期函數鏈接

存儲過程

使用MaxCompute的pyodps修改

物化視圖

要更新物化化視圖中的數據,MaxCompute只能手動更新,不支持自動更新

redshift 支持在select語句中引用別名如

select money/100 as a ,round(money/100,3) from table

MaxCompute修改

select money/100 as a ,round(a,3) from table

2.1.3復合表達式

MaxCompute

REDAHIFT

+、-

Y

Y

^、|/、||/

Y

Y

*、/、%

Y

Y

@

N

Y

&、|、

Y

Y

||

Y

Y

#、~、<<、>>

使用shift函數替換

Y

2.1.4條件比較

MaxCompute

REDAHIFT

<> 或 !=

Y

Y

like

Y

Y

BETWEEN?expression?AND

Y

Y

IS [ NOT ] NULL

Y

Y

EXISTS

Y

Y

POSIX 運算符

N

Y

SIMILAR TO

N

Y

IN

Y

Y

正則 ~

Rlike

Y

~~

like

Y

2.1.5DDL語法

主要差異:

1.MaxCompute不支持主鍵自增和PRIMARY KEY

2.指定默認值default]不支持使用函數

3.decimal指定默認值不支持-1

語法

MaxCompute

REDSHIFT

CREATE TABLE—PRIMARY KEY

N

Y

CREATE TABLE—NOT NULL

Y

Y

CREATE TABLE—CLUSTER BY

Y

N

CREATE TABLE—EXTERNAL TABLE

Y(OSS, OTS, TDDL)

N

CREATE TABLE—TEMPORARY TABLE

N

Y

table_attributes

N(Mc內部表不需要添加屬性)

Y

CREATE TABLE—AS

Y

Y

create materialized view

Y

Y

2.1.6DML語法差異

語法

MaxCompute

REDSHIFT

CTE

Y

Y

SELECT—into

N

Y

SELECT—recursive CTE

N

Y

SELECT—GROUP BY ROLL UP

Y

N

SELECT—GROUPING SET

Y

Y

SELECT—IMPLICT JOIN

Y

Y

SEMI JOIN

Y

N

SELEC TRANSFROM

Y

N

SELECT—corelated subquery

Y

Y

LATERAL VIEW

Y

Y

SET OPERATOR—UNION (disintct)

Y

Y

SET OPERATOR—INTERSECT

Y

Y

SET OPERATOR—MINUS/EXCEPT

Y

Y

INSERT INTO ... VALUES

Y

Y

INSERT INTO (ColumnList)

Y

Y

UPDATE … WHERE

Y(事務表支持)

Y

DELETE … WHERE

Y(事務表支持)

Y

ANALYTIC—reusable WINDOWING CLUSUE

Y

Y

ANALYTIC—CURRENT ROW

Y

Y

ANALYTIC—UNBOUNDED

Y

Y

ANALYTIC—RANGE …

Y

Y

WHILE DO

N

Y

VIEW WITH PARAMETERS

Y

N

select?*?into

N

Y

2.1.7內建函數對比

其他未列出的redshift函數不支持。

函數類型

MaxCompute

POSTGRESQL

在MaxCompute SQL中是否支持分區剪裁

日期函數

ADD_MES

CONVERT_TIMEZONE

DATE_CMP_TIMESTAMP

DATE_CMP_TIMESTAMPTZ

DATE_PART_YEAR

DATE_CMP

INTERVAL_CMP

+

SYSDATE

TIMEOFDAY

TIMESTAMP_CMP

TIMESTAMP_CMP_DATE

TIMESTAMP_CMP_TIMESTAMPTZ

TIMESTAMPTZ_CMP

TIMESTAMPTZ_CMP_DATE

TIMESTAMPTZ_CMP_TIMESTAMP

to_timestamp

TIMEZONE

DATEDIFF

DATEDIFF

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

DATE_ADD

DATEADD

  • MaxCompute模式下:不支持(建議使用DATEADD)。
  • Hive模式下:支持。

DATEPART

date_part

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

DATETRUNC

date_trunc

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

FROM_UNIXTIME

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

GETDATE

CURRENT_DATE

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

ISDATE

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

LASTDAY

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

TO_DATE

TO_DATE

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

TO_CHAR

to_char

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

UNIX_TIMESTAMP

extract

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

WEEKDAY

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

WEEKOFYEAR

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

YEAR

extract

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

QUARTER

EXTRACT

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

MONTH

EXTRACT

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

DAY

EXTRACT

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

DAYOFMONTH

  • MaxCompute模式下:不支持。
  • Hive模式下:支持。

HOUR

EXTRACT

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

MINUTE

EXTRACT

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

ADD_MONTHS

運算符+

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

LAST_DAY

LAST_DAY

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

NEXT_DAY

NEXT_DAY

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

MONTHS_BETWEEN

MONTHS_BETWEEN

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

數學函數

exp

ATAN2

DEXP

DLOG1

DLOG10

ABS

ABS

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ACOS

ACOS

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ASIN

ASIN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ATAN

ATAN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

CEIL

CEIL

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

CONV

convert

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

COS

COS

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

COSH

ACOS

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

COT

COT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

EXP

EXP

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

FLOOR

FLOOR

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LN

LN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LOG

LOG

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

POW

power

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

RAND

random

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ROUND

ROUND

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SIN

SIN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SINH

asin

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SQRT

SQRT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

TAN

TAN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

TANH

atan

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

TRUNC

TRUNC

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LOG2

LOG

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LOG10

LOG

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

BIN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

HEX

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

UNHEX

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

RADIANS

RADIANS

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

DEGREES

DEGREES

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SIGN

SIGN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

E

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

PI

PI

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

FACTORIAL

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

CBRT

CBRT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SHIFTLEFT

<<

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

SHIFTRIGHT

>>

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

SHIFTRIGHTUNSIGNED

>>>

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

窗口函數

CUME_DIST

FIRST_VALUE/LAST_VALUE

LISTAGG

NTH_VALUE

PERCENTILE_CONT

PERCENTILE_DISC

RATIO_TO_REPORT (?ratio_expression?) OVER ( [ PARTITION BY?partition_expression?] )

STDDEV_SAMP

VAR_SAMP | VARIANCE | VAR_POP

PERCENT_RANK

DENSE_RANK

DENSE_RANK

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

RANK

RANK

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LAG

LAG

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LEAD

LEAD

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

PERCENT_RANK

PERCENT_RANK

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ROW_NUMBER

ROW_NUMBER

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

CLUSTER_SAMPLE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

NTILE

NTILE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

聚合函數

PERCENTILE_APPROX

APPROXIMATE PERCENTILE_DISC

LISTAGG

PERCENTILE_CONT

ANY_VALUE

ANY_VALUE

COUNT

COUNT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

AVG

AVG

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

MAX

MAX

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

MIN

MIN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

MEDIAN

PERCENTILE_disc

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

STDDEV

STDDEV

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

STDDEV_SAMP

STDDEV_SAMP

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SUM

SUM

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

WM_CONCAT

string_agg

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

COLLECT_LIST

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

COLLECT_SET

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

VARIANCE/VAR_POP

VARIANCE/VAR_POP

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

VAR_SAMP

VAR_SAMP

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

COVAR_POP

COVAR_POP

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

COVAR_SAMP

COVAR_SAMP

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

PERCENTILE

PERCENTILE_disc

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

字符串函數

||

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

BPCHARCMP

BTRIM

CHAR_LENGTH

CHARACTER_LENGTH

CHARINDEX

COLLATE

CRC32

DIFFERENCE

INITCAP

OCTETINDEX

OCTET_LENGTH

QUOTE_IDENT

QUOTE_LITERAL

POSITION

REPEAT

LEFT /RIGHT

STRPOS

STRTOL

CHAR_MATCHCOUNT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

CHR

CHR

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

CONCAT

CONCAT|array_concat

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

GET_JSON_OBJECT

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

INSTR

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

IS_ENCODING

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

KEYVALUE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LENGTH

LENGTH

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LENGTHB

LEN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

MD5

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

REGEXP_EXTRACT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

REGEXP_INSTR

REGEXP_INSTR

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

REGEXP_REPLACE

REGEXP_REPLACE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

REGEXP_SUBSTR

REGEXP_SUBSTR

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

REGEXP_COUNT

REGEXP_COUNT

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

SPLIT_PART

SPLIT_PART

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SUBSTR

SUBSTR

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SUBSTRING

SUBSTRING

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

TOLOWER

LOWER

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

TOUPPER

UPPER

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

TRIM

TRIM

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LTRIM

LTRIM

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

RTRIM

RTRIM

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

REVERSE

REVERSE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

REPEAT

REPEAT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ASCII

ASCII

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

CONCAT_WS

CONCAT_WS

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LPAD

LPAD

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

RPAD

RPAD

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

REPLACE

REPLACE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SOUNDEX

SOUNDEX

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

SUBSTRING_INDEX

SUBSTRING_INDEX

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

TRANSLATE

TRANSLATE

  • MaxCompute模式下:不支持。
  • Hive模式下:不支持。

URL_DECODE

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

URL_ENCODE

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

CRC32

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

其他函數

CAST

CAST

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

COALESCE

COALESCE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

DECODE

DECODE

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

GET_IDCARD_AGE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

GET_IDCARD_BIRTHDAY

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

GET_IDCARD_SEX

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

GREATEST

GREATEST

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ORDINAL

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

LEAST

LEAST

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

MAX_PT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

UUID

uuid_generate_v1

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SAMPLE

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

IF

IF

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

CASE WHEN

CASE WHEN

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SPLIT

SPLIT

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

STR_TO_MAP

  • MaxCompute模式下:支持。
  • Hive模式下:不支持。

EXPLODE

split_to_array

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

MAP

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

MAP_KEYS

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

MAP_VALUES

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

NVL

NVL

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ARRAY

ARRAY

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SIZE

get_array_length

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

ARRAY_CONTAINS

@>

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

POSEXPLODE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

TRANS_ARRAY

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

INLINE

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

NAMED_STRUCT

  • MaxCompute模式下:支持。
  • Hive模式下:支持。

SUBARRAY

2.1.8 MaxCompute 產品特性

功能

MaxCompute 產品組件

特性介紹

數據存儲

MaxCompute 表 (基于盤古

分布式存儲)

MaxCompute 支持大規模計算存儲,適用于

TB 以上規模的存 儲及計算需求,最大可達 EB

級別。同一個 MaxCompute 項 目支持企業從

創業團隊發展到獨角獸的數據規模需求; 數據

分布式存儲,多副本冗余,數據存儲對外僅開放

表的 操作接口,不提供文件系統訪問接口

MaxCompute 支持大規模計算存儲,適用于

TB 以上規模的存 儲及計算需求,最大可達 EB

級別。同一個 MaxCompute 項目支持企業從

創業團隊發展到獨角獸的數據規模需求;

數據分布式存儲,多副本冗余,數據存儲對外僅

開放表的操作接口,不提供文件系統訪問接口;

自研數據存儲結構,表數據列式存儲,默認高度

壓縮,后續將提供兼容 ORC的Ali-ORC存儲格

式;

支持外表,將存儲在OSS 對象存儲、OTS表格

存儲的數據映射為二維表;

支持Partition、Bucket 的分區、分桶存儲;

更底層不是 HDFS,是阿里自研的盤古文件系

統,但可借助 HDFS 理解對應的表之下文件的

體系結構、任務并發機制使用時,存儲與計算解

耦,不需要僅僅為了存儲擴大不必要的計算資

源;

存儲

Pangu

阿里自研分布式存儲服務,類似 HDFS。

MaxCompute 對外目前只暴露表接口,不能直

接訪問文件系統。

資源調度

Fuxi

阿里自研的資源調度系統,類似 Yarn

數據上傳下載

Tunnel

Streaming Tunnel

不暴露文件系統,通過 Tunnel 進行批量數據上傳下載

開發&診斷

Dataworks/Studio/Logview

配套的數據同步、作業開發、工作流編排調度、

作業運維及診斷工具。開源社區常見的

Sqoop、Kettle、Ozzie 等實現數據同步和調度

用戶接口

CLT/SDK

統一的命令行工具和 JAVA/PYTHON SDK

SQL

MaxCompute SQL

TPC-DS 100%支持,同時語法高度兼容 Hive,

有Hive 背景,開發者直接上手,特別在大數據

規模下性能強大。

* 完全自主開發的 compiler,語言功能開發更

靈活,迭代快,語法語義檢查更加靈活高效

* 基于代價的優化器,更智能,更強大,更適合

復雜的查詢

* 基于LLVM 的代碼生成,讓執行過程更高效

* 支持復雜數據類型(array,map,struct)

* 支持Java、Python語言的UDF/UDAF/UDTF

* 語法:Values、CTE、SEMIJOIN、FROM倒

裝、Subquery Operations 、 Set

Operations(UNION /INTERSECT /MINUS)、

SELECT TRANSFORM 、User Defined Type、

GROUPING SET(CUBE/rollup/GROUPING

SET)、腳本運行模式、參數化視圖

* 支持外表(外部數據源+StorageHandler,支

持非結構化數據)

Spark

MaxCompute Spark

MaxCompute提供了Spark on MaxCompute

的解決方案,使 MaxCompute 提供兼容開源的

Spark 計算服務,讓它在統一的計算資源和數據

集權限體系之上,提供 Spark 計算框架,支持用

戶以熟悉的開發使用方式提交運行 Spark 作

業。

* 支持原生多版本 Spark 作業:

Spark1.x/Spark2.x作業都可運行;

* 開源系統的使用體驗:Spark-submit 提交方

式,提供原生的 Spark WebUI供用戶查看;

* 通過訪問OSS、OTS、database 等外部數據

源,實現更復雜的 ETL 處理,支持對 OSS 非結

構化進行處理;

* 使用 Spark 面向 MaxCompute 內外部數據

開展機器學習, 擴展應用場景

機器學習

PAI

MaxCompute 內建支持的上百種機器學習算

法,目前 MaxCompute 的機器學習能力由 PAI

產品進行統一提供服務,同時 PAI提供了深度學

習框架、Notebook 開發環境、GPU計算資源、

模型在線部署的彈性預測服務。MaxCompute

的數據對PAI產品無縫集成。

數據接入

目前支撐通過 DTS或者 DataWorks數據集成功能

數據集成是穩定高效、彈性伸縮的數據同步平臺,豐富的異構數據源之間高速穩定的數據移動及同步能力。支持實時任務和批任務寫入MaxCompute

整體

不是孤立的功能,完整的企業

服務

不需要多組件集成、調優、定制,開箱即用

3、RedShift到MaxCompute遷移工具介紹

從數據庫表導入到 Amazon S3

卸載數據 - Amazon Redshift

在線遷移上云服務

AWS S3 遷移教程 - 在線遷移服務 - 阿里云

將數據從OSS遷移至同區域的MaxCompute項目load命令

LOAD - MaxCompute - 阿里云

語法校驗工具二選一

MaxCompute studio

認識MaxCompute Studio - MaxCompute - 阿里云

DataWorks sql節點

創建ODPS SQL節點 - DataWorks - 阿里云

4、遷移整體方案

數據庫遷移主要包含以下內容

遷移實施計劃:

序號

項目

預估時間

1

調研評估

1~2周

2

方案設計

1~2周

3

資源規劃

1周

4

改造與測試驗證

5~7周,需要根據復雜度評估

5

生成割接

1~2周

5、遷移詳細方案

5.1. 現狀分析及需求分析

5.2. 遷移方案設計

用戶根據自身現有 RedShift數據量、QPS、TPS 等性能指標、高可用需求和未來業務增長需求,制定合理化的遷移方案。

5.3. 資源規劃

用戶需要準備好 MaxCompute 的相關環境,同時獲取到對應需要使用的遷移工具。遷移工具的相關內容請參考《 RedShift到MaxCompute遷移工具介紹 》 章節。

5.4. 改造及測試驗證

5.4.1. 改造

遷移工具可以利用MaxCompute studio(或者DataWorks新建sql節點)客戶端語法校驗,新建一個sql文件,如圖不支持的語法會報紅

MaxCompute Studio安裝文檔認識MaxCompute Studio - MaxCompute - 阿里云

5.4.1.1. 建表

在RedShift中獲取表列表和表字段定義,按照Maxcompute支持的字段值進行轉換,對于有update和delete語句的表必須建成Transactional表

類型轉化參考《數據類型對比及類型轉化》章節

建表語法

--創建新表。

create [external] table [if not exists]

[( ?[not null] [default ] [comment ], ...)]

[comment ]

[partitioned by ( ?[comment ], ...)]

--用于創建聚簇表時設置表的Shuffle和Sort屬性。

[clustered by | range clustered by ( [, , ...]) [sorted by ( [asc | desc] [, ?[asc | desc] ...])] into ?buckets]

--僅限外部表。

[stored by StorageHandler]

--僅限外部表。

[with serdeproperties (options)]

--僅限外部表。

[location ]

--指定表為Transactional表,后續可以對該表執行更新或刪除表數據操作,但是Transactional表有部分使用限制,請根據需求創建。

[tblproperties("transactional"="true")] ?

[lifecycle ];

--基于已存在的表創建新表并復制數據,但不復制分區屬性。

create table [if not exists] ?[lifecycle ] as ;

--基于已存在的表創建具備相同結構的新表但不復制數據。

create table [if not exists] ?like ?[lifecycle ];

說明:

? 表名與列名均對大小寫不敏感。

? 在創建表時,如果不指定 if not exists選項而存在同名表,則返回報錯;若指定此選項,則無論是否存在同名表,即使原表結構與要創建的目標表結構不一致, 均返回成功。已存在的同名表的元信息不會被改動。

? 表名、列名中不能有特殊字符,只能用英文的 a-z、A-Z 及數字和下劃線(_),

且以字母開頭,名稱的長度不超過 128 字節。

?tblproperties("transactional"="true"):可選(有update和delete語句必須設置)。設置表為Transactional表。后續可以對Transactional表執行update、delete操作實現行級更新或刪除數據。更多信息,請參見更新或刪除數據(UPDATE | DELETE)。

? Partitioned by 指定表的分區字段,目前僅支持 string類型。分區值不可以有雙字節字符(如中文),必須是以英文字母 a-z、A-Z開始后可跟字母數字,名稱的長度不超過 128 字節。允許的字符包括:空格、冒號(:)、下劃線(_)、美元符$)、井號(#)、點(.)、感嘆號(!)和@,出現其他字符行為未定義, 例如:“\t”、“\n”、“/”等。當利用分區字段對表進行分區時,新增分區、更新分區內數據和讀取分區數據均不需要做全表掃描,可以提高處理效率。

? 注釋內容是長度不超過 1024 字節的有效字符串。

? lifecycle 指明此表的生命周期,單位:天。create table like 語句不會復制源表

的生命周期屬性。

? 理論上源表分區最多只能 6 級,但考慮極限存儲的分區膨脹方式,請盡可能少用

分區。

? 一個表允許的分區個數支持按照具體的 project 配置,默認 60000 個。

? 在create table ... as select ...語句中,如果在 select 子句中使用常量作為列的

值,建議指定列的名字。

? 如果希望源表和目標表具有相同的表結構,可以嘗試使用 create table ... like 操

作。

5.4.1.1.1建表具體案例

  • 列名雙引號要去掉
  • 形如BIGINT primary key identity(1,1)主鍵?增列要去掉,只保留默認值default 1
  • numeric數據類型要轉為decimal
  • 形如::character varying,'1900/01/01'::text這種,兩個冒號及后?內容要刪除,MC不?持
  • 形如"n_car_no" numeric DEFAULT -1::numeric,MC不?持默認值為-1,需要去掉
  • 形如"ts_req_time" timestamp without time zone DEFAULT to_timestamp('1900/00/00 00:00:00'::text, 'YYYY-MM-DD HH24:MI:SS.MS'::text),需要去掉timezone,并改為timestamp DEFAULT timestamp "1900-01-01 00:00:00"
  • 形如INTERLEAVED SORTKEY(vc_trans_id),MC不?持交錯排序列功能,可以考慮替換為 zorder。
  • MC不?持時區time zone,有關time zone的需要刪除。
  • 物化視圖修改去掉 AUTO REFRESH YES,同時MaxCompute物化視圖不支持窗口函數
  • 5.4.1.2. SQL 遷移

    SQL 遷移實際上就是根據 Oracle 和MaxCompute 兩者間 SQL 的差異進行轉化,將RedShift中的 SQL 轉化成 MaxCompute 中的 SQL,從而使 SQL 可用。具體的 SQL間差異請參考《遷移前RedShift于MaxCompute的各項對比差異》 章節中的相關內容

    5.4.1.2.1 SQL 遷移 具體案例

    DML語句

    1.執行updae或者delet的語句需要創建事務表("transactional"="true")

    2. 形如COMMENT ON column atzc_dev_dw.t_com_fact_auto_pay_gw_trans_pay_gw."n_trans_amt" is 'dml';給列添加 注釋,需要改為MC?持的語法alter table ?change column ?comment '';

    DQL語句

    問題現象

    遷移指導

    cte(with)語句

    with語句寫在insert into下面語法解析報錯

    with語句移動到insert into上面


    with a as ( with b as () ) 嵌套使用

    MC不支持嵌套的with 需要將with拿出來

    with a as () , b as ()

    類型轉化

    redshift都使用的是 ::

    如:a::date


    ?

    使用cast(a as date)

    正常匹配

    redshift使用的是?~

    使用rlike替換

    group by

    redshift group by中的整型常量會被當做select的列序號處理

    如:group by 1,2.

    SQL語句設置了屬性,即set odps.sql.groupby.position.alias=true;一起提交

    類型轉化 ::

    redshift ::代表類型轉化

    使用cast函數轉化

    數據類型

    varchar

    需要指定位數varchar(100)或者直接指定string

    decimal 類型常量1

    改成1bd

    smallint 常量

    1s

    join

    join的不等值

    mc不支持普通join不等值表達式,可以使用mapjoin

    內建函數

    RedShift

    MaxCompute

    RS舉例

    MC舉例

    多行注釋/* xxxxx */

    框選所需注釋內容,ctrl+/,進行注釋

    DATEADD( datepart, interval, {date|time|timetz|timestamp} )

    datetime dateadd(date|datetime|timestamp <date>, bigint <delta>, string <datepart>)

    dateadd(day,1,f.dt_date)

    dateadd(f.dt_date,1,'dd')

    DATEDIFF ( datepart, {date|time|timetz|timestamp}, {date|time|time|timestamp} )

    bigint datediff(date|datetime|timestamp <date1>, date|datetime|timestamp <date2>, string <datepart>)

    datediff(min,a,b)

    datediff(b,a,'mi')

    current_date-n/current_date+n

    dateadd(GETDATE(),n)

    dateadd可以加減時間,getdate可以獲取當前時間

    current_date-1

    dateadd(GETDATE(),1,'dd')

    類型轉化 ::

    cast轉

    a::date

    cast(a as date)

    正則 ~

    rlike

    日期加減current_date+30

    date_add(current_date(),30)

    CEILING 或 CEIL 函數用于將數字向上舍入到下一個整數。

    ceil

    select ceiling(commission)

    select ceil(1.1);

    TO_TIMETAMP 將時間戳字符串轉換為時間標記

    bigint unix_timestamp(datetime <date>)

    to_timestamp('1900/00/00 00:00:00'as string, 'YYYY-MM-DD HH24:MI:SS.MS'as string)

    unix_timestamp(cast ("1900-00-00 00:00:00" as datetime))

    dateadd按指定的時間間隔遞增日期、時間、時間或時間戳值

    datetime dateadd(date|datetime|timestamp <date>, bigint <delta>, string <datepart>)

    dateadd(month,-6,a.dt_end_date)

    dateadd(a.dt_end_date,-6,"mm")

    LISTAGG 聚合函數根據 ORDER BY 表達式對該組的行進行排序,然后將值串聯成一個字符串

    wm_concat(string <separator>, string <colname>)

    listagg(remark)

    wm_Concat(",",remark)

    CURRENT_DATE獲取當前日期

    CURRENT_DATE()

    MaxCompute需要添加括號

    EXTRACT(week from $1)提取函數從 TIMESTAMP 值或表達式

    weekofyear()

    EXTRACT(weekday from $1) 和 extract(DOW from $1)

    weekday($1)

    DATEPART(WEEKDAY,T3.dt_report)

    WEEKDAY(cast(T3.dt_report as DATETIME))

    LEN 函數返回一個整數,表示輸入字符串中的字符的數量

    bigint length(string <str>)

    len

    length

    LOWER 函數返回與輸入字符串具有相同數據類型的字符串

    tolower(string <source>)

    lower

    CONVERT ( TIMESTAMP, id_card_back_overdue)

    函數將值從一種數據類型轉換為另一種數據類型

    轉為cast()

    CONVERT ( TIMESTAMP, id_card_back_overdue)

    cast(id_card_back_overdue as TIMESTAMP)

    sysdate返回當前會話時區(默認為 UTC)中的當前日期和時間

    getdate()

    返回DATETIME ‘2017-11-11 00:00:00’

    charindex()

    返回指定子字符串在字符串中的位置

    INSTR()

    charindex('fish', 'dogfish')

    instr('dogfish','fish')

    left()這些函數返回指定數量的位于字符串最左側

    substr()

    right()這些函數返回指定數量的位于字符串最右側

    reverse(substr(reverse()))

    DATE_TRUNC 函數根據您指定的日期部分(如小時、周或月)截斷時間戳表達式或文字

    date_trunc('month')

    datetrunc(,'month')

    json_extract_path_text

    函數返回鍵:Value對引用 JSON 字符串中的一系列路徑元素

    改為get_json_object寫法get_json_object(content,'$.DeviceID')

    根據key路徑獲取json字符串的value

    json_extract_path_text('{"f2":{"f3":1},"f4":{"f5":99,"f6":"star"}}','f4', 'f6')
    返回 ‘star’

    json_extract_array_element_text

    使用atzc_dev_dw.json_extract_array_element_text

    根據索引返回數組元素

    json_extract_array_element_text('[111,112,113]', 2)
    返回 ‘113’

    POSITION返回指定子字符串在字符串中的位置

    改成:instr

    BTRIM?函數通過刪除前導空格和尾隨空格或刪除

    TRIM

    maxCompute只能刪除左右空格不能刪除指定位置空格,刪除指定位置需要自己寫udf實現

    date_part()從表達式中提取日期部分值

    datepart()

    mod()

    函數返回一個數字結果

    $1%$2

    ~~

    like

    date_part(w,time)

    weekofyear()

    4.4.1.2存儲過程遷移

    建議改成臨時表或者pyodps的方式

    5.4.2數據遷移

    序號

    描述

    將Amazon Redshift數據導出至Amazon S3數據湖(簡稱S3)。

    通過對象存儲服務OSS的在線遷移上云服務,將數據從S3遷移至OSS。

    將數據從OSS遷移至同區域的MaxCompute項目中,并校驗數據完整性和正確性。

    數據遷移參考文檔:

    Amazon Redshift數據遷移至MaxCompute - MaxCompute - 阿里云

    5.4.3. 測試驗證

    目前RedShift到MaxCompute 遷移的數據測試驗證工作,還沒有工具可以支持,需要

    自行編寫腳本工具完成,常用校驗方案有如下幾種:

    ? 表結構校驗,從 RedShift和MaxCompute 分別導出數據表列及類型定義后計算

    md5 進行校驗

    ? 數據表行數比對,執行 SQL 語句分別在 RedShift和MaxCompute 統計相同表的

    數據行數進行逐行比對

    ? 數據全量校驗,一般用于核心表且數據量較小的校驗場景,導出全量數據計算

    md5 進行校驗,或全量數據分段計算 md5 進行校驗

    ? 數據抽樣校驗,一般用于核心大表的數據校驗場景,按一定抽樣規則從源和目標

    抽取數據進行校驗。

    原文鏈接

    本文為阿里云原創內容,未經允許不得轉載。

    ?

    總結

    以上是生活随笔為你收集整理的RedShift到MaxCompute迁移实践指导的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。