阿里云服务器迁移(RedShift)

1.概要本文档详细介绍了Redshift和MaxCompute之间SQL语法的异同。这篇文档有助于加快sql任务迁移到MaxCompute。由于Redshift和MaxCompute之间语法存在很多差异,因此我们需要修改Redshift上编写的脚本,然后才能在MaxCompute中使用,因为服务之间的SQL方言不同。2.迁移前RedShift于MaxCompute的各项对比差异2.1.1数据类型对比及类型转化类别MaxCompute建议转化成MaxCompute类型Redshift数值类型smallintYYYintegerNintYbigintYintYdecimalYYYnumericNdecimalYrealNfloatYdoubleYYYfloatYfloatYTINYINTYsmallintN字符类型varchar(n)YYYchar(n)YYYSTRINGYtextNstringY日期TIMESTAMPYYYTIMESTAMPTZNYDATEYYYTIMENYDateTimeYNboolean 数据类型booleanYYY复杂数据类型ARRAYYYNMAPYYNSTRUCTYYNHLLSketchNYMaxCompoute数据类型参考https://help.aliyun.com/document_detail/159541.html2.1.2语法对比MaxCompute没有schenma、group、库、存储过程的概念。只有project、表、分区,MaxCompute建表时没有自增序列 外键等,不支持指定编码默认utf-8,内部表不支持指定存储格式默认Aliorc主要区别表结构不能修改分区列列名,只能修改分区列对应的值。支持增加列,但是不支持删除列以及修改列的数据类型。SQL 常见问题INSERT 语法上最直观的区别是:Insert into/overwrite 后面有个关键字 Table。数据插入表的字段映射不是根据 Select 的别名做的,而是根据 Select 的字段的顺序和表里的字段的顺序UPDATE/DELETE只有事务表支持UPDATE/DELETEjoinJoin 必须要用 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 tableMaxCompute修改select money/100 as a ,round(a,3) from table2.1.3复合表达式MaxComputeREDAHIFT+、-YY^、|/、||/YY*、/、%YY@NY&、|、YY||YY#、~、<<、>>使用shift函数替换Y2.1.4条件比较MaxComputeREDAHIFT<> 或 !=YYlikeYYBETWEEN expression ANDYYIS [ NOT ] NULLYYEXISTSYYPOSIX 运算符NYSIMILAR TONYINYY正则 ~RlikeY~~likeY2.1.5DDL语法主要差异:1.MaxCompute不支持主键自增和PRIMARY KEY2.指定默认值default]不支持使用函数3.decimal指定默认值不支持-1语法MaxComputeREDSHIFTCREATE TABLE—PRIMARY KEYNYCREATE TABLE—NOT NULLYYCREATE TABLE—CLUSTER BYYNCREATE TABLE—EXTERNAL TABLEY(OSS, OTS, TDDL)NCREATE TABLE—TEMPORARY TABLENYtable_attributesN(Mc内部表不需要添加属性)YCREATE TABLE—ASYYcreate materialized viewYY2.1.6DML语法差异语法MaxComputeREDSHIFTCTEYYSELECT—intoNYSELECT—recursive CTENYSELECT—GROUP BY ROLL UPYNSELECT—GROUPING SETYYSELECT—IMPLICT JOINYYSEMI JOINYNSELEC TRANSFROMYNSELECT—corelated subqueryYYLATERAL VIEWYYSET OPERATOR—UNION (disintct)YYSET OPERATOR—INTERSECTYYSET OPERATOR—MINUS/EXCEPTYYINSERT INTO … VALUESYYINSERT INTO (ColumnList)YYUPDATE … WHEREY(事务表支持)YDELETE … WHEREY(事务表支持)YANALYTIC—reusable WINDOWING CLUSUEYYANALYTIC—CURRENT ROWYYANALYTIC—UNBOUNDEDYYANALYTIC—RANGE …YYWHILE DONYVIEW WITH PARAMETERSYNselect * intoNY2.1.7内建函数对比其他未列出的redshift函数不支持。函数类型MaxComputePOSTGRESQL在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无TIMEZONEDATEDIFFDATEDIFFMaxCompute模式下:支持。Hive模式下:不支持。DATE_ADDDATEADDMaxCompute模式下:不支持(建议使用DATEADD)。Hive模式下:支持。DATEPARTdate_partMaxCompute模式下:支持。Hive模式下:不支持。DATETRUNCdate_truncMaxCompute模式下:支持。Hive模式下:不支持。FROM_UNIXTIME无MaxCompute模式下:支持。Hive模式下:支持。GETDATECURRENT_DATEMaxCompute模式下:支持。Hive模式下:不支持。ISDATE无MaxCompute模式下:支持。Hive模式下:不支持。LASTDAY无MaxCompute模式下:支持。Hive模式下:不支持。TO_DATETO_DATEMaxCompute模式下:支持。Hive模式下:不支持。TO_CHARto_charMaxCompute模式下:支持。Hive模式下:支持。UNIX_TIMESTAMPextractMaxCompute模式下:支持。Hive模式下:支持。WEEKDAY无MaxCompute模式下:支持。Hive模式下:不支持。WEEKOFYEAR无MaxCompute模式下:支持。Hive模式下:不支持。YEARextractMaxCompute模式下:不支持。Hive模式下:不支持。QUARTEREXTRACTMaxCompute模式下:不支持。Hive模式下:不支持。MONTHEXTRACTMaxCompute模式下:不支持。Hive模式下:不支持。DAYEXTRACTMaxCompute模式下:不支持。Hive模式下:不支持。DAYOFMONTH无MaxCompute模式下:不支持。Hive模式下:支持。HOUREXTRACTMaxCompute模式下:不支持。Hive模式下:不支持。MINUTEEXTRACTMaxCompute模式下:不支持。Hive模式下:不支持。CURRENT_TIMESTAMPCURRENT_TIMESTAMPMaxCompute模式下:不支持。Hive模式下:不支持。ADD_MONTHS运算符+MaxCompute模式下:不支持。Hive模式下:不支持。LAST_DAYLAST_DAYMaxCompute模式下:不支持。Hive模式下:不支持。NEXT_DAYNEXT_DAYMaxCompute模式下:不支持。Hive模式下:不支持。MONTHS_BETWEENMONTHS_BETWEENMaxCompute模式下:不支持。Hive模式下:不支持。数学函数无exp无ATAN2无DEXP无DLOG1无DLOG10ABSABSMaxCompute模式下:支持。Hive模式下:支持。ACOSACOSMaxCompute模式下:支持。Hive模式下:支持。ASINASINMaxCompute模式下:支持。Hive模式下:支持。ATANATANMaxCompute模式下:支持。Hive模式下:支持。CEILCEILMaxCompute模式下:支持。Hive模式下:支持。CONVconvertMaxCompute模式下:支持。Hive模式下:支持。COSCOSMaxCompute模式下:支持。Hive模式下:支持。COSHACOSMaxCompute模式下:支持。Hive模式下:支持。COTCOTMaxCompute模式下:支持。Hive模式下:支持。EXPEXPMaxCompute模式下:支持。Hive模式下:支持。FLOORFLOORMaxCompute模式下:支持。Hive模式下:支持。LNLNMaxCompute模式下:支持。Hive模式下:支持。LOGLOGMaxCompute模式下:支持。Hive模式下:支持。POWpowerMaxCompute模式下:支持。Hive模式下:支持。RANDrandomMaxCompute模式下:支持。Hive模式下:支持。ROUNDROUNDMaxCompute模式下:支持。Hive模式下:支持。SINSINMaxCompute模式下:支持。Hive模式下:支持。SINHasinMaxCompute模式下:支持。Hive模式下:支持。SQRTSQRTMaxCompute模式下:支持。Hive模式下:支持。TANTANMaxCompute模式下:支持。Hive模式下:支持。TANHatanMaxCompute模式下:支持。Hive模式下:支持。TRUNCTRUNCMaxCompute模式下:支持。Hive模式下:支持。LOG2LOGMaxCompute模式下:支持。Hive模式下:支持。LOG10LOGMaxCompute模式下:支持。Hive模式下:支持。BIN无MaxCompute模式下:支持。Hive模式下:支持。HEX无MaxCompute模式下:支持。Hive模式下:支持。UNHEX无MaxCompute模式下:支持。Hive模式下:支持。RADIANSRADIANSMaxCompute模式下:支持。Hive模式下:支持。DEGREESDEGREESMaxCompute模式下:支持。Hive模式下:支持。SIGNSIGNMaxCompute模式下:支持。Hive模式下:支持。E无MaxCompute模式下:支持。Hive模式下:不支持。PIPIMaxCompute模式下:支持。Hive模式下:不支持。FACTORIAL无MaxCompute模式下:支持。Hive模式下:支持。CBRTCBRTMaxCompute模式下:支持。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_RANKDENSE_RANKDENSE_RANKMaxCompute模式下:支持。Hive模式下:支持。RANKRANKMaxCompute模式下:支持。Hive模式下:支持。LAGLAGMaxCompute模式下:支持。Hive模式下:支持。LEADLEADMaxCompute模式下:支持。Hive模式下:支持。PERCENT_RANKPERCENT_RANKMaxCompute模式下:支持。Hive模式下:支持。ROW_NUMBERROW_NUMBERMaxCompute模式下:支持。Hive模式下:支持。CLUSTER_SAMPLE无MaxCompute模式下:支持。Hive模式下:支持。NTILENTILEMaxCompute模式下:支持。Hive模式下:支持。聚合函数PERCENTILE_APPROXAPPROXIMATE PERCENTILE_DISC无LISTAGG无PERCENTILE_CONTANY_VALUEANY_VALUECOUNTCOUNTMaxCompute模式下:支持。Hive模式下:支持。AVGAVGMaxCompute模式下:支持。Hive模式下:支持。MAXMAXMaxCompute模式下:支持。Hive模式下:支持。MINMINMaxCompute模式下:支持。Hive模式下:支持。MEDIANPERCENTILE_discMaxCompute模式下:支持。Hive模式下:支持。STDDEVSTDDEVMaxCompute模式下:支持。Hive模式下:支持。STDDEV_SAMPSTDDEV_SAMPMaxCompute模式下:支持。Hive模式下:支持。SUMSUMMaxCompute模式下:支持。Hive模式下:支持。WM_CONCATstring_aggMaxCompute模式下:支持。Hive模式下:支持。COLLECT_LIST无MaxCompute模式下:支持。Hive模式下:支持。COLLECT_SET无MaxCompute模式下:支持。Hive模式下:支持。VARIANCE/VAR_POPVARIANCE/VAR_POPMaxCompute模式下:支持。Hive模式下:支持。VAR_SAMPVAR_SAMPMaxCompute模式下:支持。Hive模式下:支持。COVAR_POPCOVAR_POPMaxCompute模式下:支持。Hive模式下:支持。COVAR_SAMPCOVAR_SAMPMaxCompute模式下:支持。Hive模式下:支持。PERCENTILEPERCENTILE_discMaxCompute模式下:支持。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无STRTOLCHAR_MATCHCOUNT无MaxCompute模式下:支持。Hive模式下:支持。CHRCHRMaxCompute模式下:支持。Hive模式下:支持。CONCATCONCAT|array_concatMaxCompute模式下:支持。Hive模式下:支持。GET_JSON_OBJECT无MaxCompute模式下:支持。Hive模式下:不支持。INSTR无MaxCompute模式下:支持。Hive模式下:支持。IS_ENCODING无MaxCompute模式下:支持。Hive模式下:不支持。KEYVALUE无MaxCompute模式下:支持。Hive模式下:支持。LENGTHLENGTHMaxCompute模式下:支持。Hive模式下:支持。LENGTHBLENMaxCompute模式下:支持。Hive模式下:支持。MD5无MaxCompute模式下:支持。Hive模式下:支持。REGEXP_EXTRACT无MaxCompute模式下:支持。Hive模式下:支持。REGEXP_INSTRREGEXP_INSTRMaxCompute模式下:支持。Hive模式下:不支持。REGEXP_REPLACEREGEXP_REPLACEMaxCompute模式下:支持。Hive模式下:支持。REGEXP_SUBSTRREGEXP_SUBSTRMaxCompute模式下:支持。Hive模式下:不支持。REGEXP_COUNTREGEXP_COUNTMaxCompute模式下:支持。Hive模式下:不支持。SPLIT_PARTSPLIT_PARTMaxCompute模式下:支持。Hive模式下:支持。SUBSTRSUBSTRMaxCompute模式下:支持。Hive模式下:支持。SUBSTRINGSUBSTRINGMaxCompute模式下:支持。Hive模式下:支持。TOLOWERLOWERMaxCompute模式下:支持。Hive模式下:支持。TOUPPERUPPERMaxCompute模式下:支持。Hive模式下:支持。TRIMTRIMMaxCompute模式下:支持。Hive模式下:支持。LTRIMLTRIMMaxCompute模式下:支持。Hive模式下:支持。RTRIMRTRIMMaxCompute模式下:支持。Hive模式下:支持。REVERSEREVERSEMaxCompute模式下:支持。Hive模式下:支持。REPEATREPEATMaxCompute模式下:支持。Hive模式下:支持。ASCIIASCIIMaxCompute模式下:支持。Hive模式下:支持。CONCAT_WSCONCAT_WSMaxCompute模式下:支持。Hive模式下:支持。LPADLPADMaxCompute模式下:支持。Hive模式下:支持。RPADRPADMaxCompute模式下:支持。Hive模式下:支持。REPLACEREPLACEMaxCompute模式下:支持。Hive模式下:支持。SOUNDEXSOUNDEXMaxCompute模式下:支持。Hive模式下:不支持。SUBSTRING_INDEXSUBSTRING_INDEXMaxCompute模式下:不支持。Hive模式下:不支持。TRANSLATETRANSLATEMaxCompute模式下:不支持。Hive模式下:不支持。URL_DECODE无MaxCompute模式下:支持。Hive模式下:不支持。URL_ENCODE无MaxCompute模式下:支持。Hive模式下:不支持。CRC32无MaxCompute模式下:支持。Hive模式下:支持。其他函数CASTCASTMaxCompute模式下:支持。Hive模式下:支持。COALESCECOALESCEMaxCompute模式下:支持。Hive模式下:支持。DECODEDECODEMaxCompute模式下:支持。Hive模式下:不支持。GET_IDCARD_AGE无MaxCompute模式下:支持。Hive模式下:支持。GET_IDCARD_BIRTHDAY无MaxCompute模式下:支持。Hive模式下:不支持。GET_IDCARD_SEX无MaxCompute模式下:支持。Hive模式下:支持。GREATESTGREATESTMaxCompute模式下:支持。Hive模式下:支持。ORDINAL无MaxCompute模式下:支持。Hive模式下:支持。LEASTLEASTMaxCompute模式下:支持。Hive模式下:支持。MAX_PT无MaxCompute模式下:支持。Hive模式下:支持。UUIDuuid_generate_v1MaxCompute模式下:支持。Hive模式下:支持。SAMPLE无MaxCompute模式下:支持。Hive模式下:不支持。IFIFMaxCompute模式下:支持。Hive模式下:支持。CASE WHENCASE WHENMaxCompute模式下:支持。Hive模式下:支持。SPLITSPLITMaxCompute模式下:支持。Hive模式下:不支持。STR_TO_MAP无MaxCompute模式下:支持。Hive模式下:不支持。EXPLODEsplit_to_arrayMaxCompute模式下:支持。Hive模式下:支持。MAP无MaxCompute模式下:支持。Hive模式下:支持。MAP_KEYS无MaxCompute模式下:支持。Hive模式下:支持。MAP_VALUES无MaxCompute模式下:支持。Hive模式下:支持。NVLNVLMaxCompute模式下:支持。Hive模式下:支持。ARRAYARRAYMaxCompute模式下:支持。Hive模式下:支持。SIZEget_array_lengthMaxCompute模式下:支持。Hive模式下:支持。ARRAY_CONTAINS@>MaxCompute模式下:支持。Hive模式下:支持。POSEXPLODE无MaxCompute模式下:支持。Hive模式下:支持。TRANS_ARRAY无MaxCompute模式下:支持。Hive模式下:支持。INLINE无MaxCompute模式下:支持。Hive模式下:支持。NAMED_STRUCT无MaxCompute模式下:支持。Hive模式下:支持。无SUBARRAY2.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数据上传下载TunnelStreaming Tunnel不暴露文件系统,通过 Tunnel 进行批量数据上传下载开发&诊断Dataworks/Studio/Logview配套的数据同步、作业开发、工作流编排调度、作业运维及诊断工具。开源社区常见的Sqoop、Kettle、Ozzie 等实现数据同步和调度用户接口CLT/SDK统一的命令行工具和 JAVA/PYTHON SDKSQLMaxCompute SQLTPC-DS 100%支持,同时语法高度兼容 Hive,有Hive 背景,开发者直接上手,特别在大数据规模下性能强大。* 完全自主开发的 compiler,语言功能开发更灵活,迭代快,语法语义检查更加灵活高效* 基于代价的优化器,更智能,更强大,更适合复杂的查询* 基于LLVM 的代码生成,让执行过程更高效* 支持复杂数据类型(array,map,struct)* 支持Java、Python语言的UDF/UDAF/UDTF* 语法:Values、CTE、SEMIJOIN、FROM倒装、Subquery Operations 、 SetOperations(UNION /INTERSECT /MINUS)、SELECT TRANSFORM 、User Defined Type、GROUPING SET(CUBE/rollup/GROUPINGSET)、脚本运行模式、参数化视图* 支持外表(外部数据源+StorageHandler,支持非结构化数据)SparkMaxCompute SparkMaxCompute提供了Spark on MaxCompute的解决方案,使 MaxCompute 提供兼容开源的Spark 计算服务,让它在统一的计算资源和数据集权限体系之上,提供 Spark 计算框架,支持用户以熟悉的开发使用方式提交运行 Spark 作业。* 支持原生多版本 Spark 作业:Spark1.x/Spark2.x作业都可运行;* 开源系统的使用体验:Spark-submit 提交方式,提供原生的 Spark WebUI供用户查看;* 通过访问OSS、OTS、database 等外部数据源,实现更复杂的 ETL 处理,支持对 OSS 非结构化进行处理;* 使用 Spark 面向 MaxCompute 内外部数据开展机器学习, 扩展应用场景机器学习PAIMaxCompute 内建支持的上百种机器学习算法,目前 MaxCompute 的机器学习能力由 PAI产品进行统一提供服务,同时 PAI提供了深度学习框架、Notebook 开发环境、GPU计算资源、模型在线部署的弹性预测服务。MaxCompute的数据对PAI产品无缝集成。数据接入目前支撑通过 DTS或者 DataWorks数据集成功能数据集成是稳定高效、弹性伸缩的数据同步平台,丰富的异构数据源之间高速稳定的数据移动及同步能力。支持实时任务和批任务写入MaxCompute整体不是孤立的功能,完整的企业服务不需要多组件集成、调优、定制,开箱即用3、RedShift到MaxCompute迁移工具介绍从数据库表导入到 Amazon S3https://docs.aws.amazon.com/zh_cn/redshift/latest/dg/c_unloading_data.html?spm=a2c4g.11186623.0.0.50d3358eWX84rm在线迁移上云服务https://help.aliyun.com/document_detail/94352.html将数据从OSS迁移至同区域的MaxCompute项目load命令https://help.aliyun.com/document_detail/157418.htm?spm=a2c4g.11186623.0.0.50d3358eWX84rm#concept-2419019语法校验工具二选一MaxCompute studiohttps://help.aliyun.com/document_detail/50889.htmlDataWorks sql节点https://help.aliyun.com/document_detail/137510.html4、迁移整体方案数据库迁移主要包含以下内容迁移实施计划:序号项目预估时间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安装文档https://help.aliyun.com/document_detail/50889.html5.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 byredshift group by中的整型常量会被当做select的列序号处理如:group by 1,2.SQL语句设置了属性,即set odps.sql.groupby.position.alias=true;一起提交类型转化 ::redshift ::代表类型转化使用cast函数转化数据类型varchar需要指定位数varchar(100)或者直接指定stringdecimal 类型常量1改成1bdsmallint 常量1sjoinjoin的不等值mc不支持普通join不等值表达式,可以使用mapjoin内建函数RedShiftMaxComputeRS举例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+ndateadd(GETDATE(),n)dateadd可以加减时间,getdate可以获取当前时间current_date-1dateadd(GETDATE(),1,'dd')类型转化 ::cast转a::datecast(a as date)正则 ~rlike日期加减current_date+30date_add(current_date(),30)CEILING 或 CEIL 函数用于将数字向上舍入到下一个整数。ceilselect 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>)lenlengthLOWER 函数返回与输入字符串具有相同数据类型的字符串tolower(string <source>)lowerCONVERT ( 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字符串的valuejson_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返回指定子字符串在字符串中的位置改成:instrBTRIM 函数通过删除前导空格和尾随空格或删除TRIMmaxCompute只能删除左右空格不能删除指定位置空格,删除指定位置需要自己写udf实现date_part()从表达式中提取日期部分值datepart()mod()函数返回一个数字结果$1%$2~~likedate_part(w,time)weekofyear()5.4.1.2存储过程迁移建议改成临时表或者pyodps的方式5.4.2数据迁移序号描述①将Amazon Redshift数据导出至Amazon S3数据湖(简称S3)。②通过对象存储服务OSS的在线迁移上云服务,将数据从S3迁移至OSS。③将数据从OSS迁移至同区域的MaxCompute项目中,并校验数据完整性和正确性。数据迁移参考文档:https://help.aliyun.com/document_detail/181920.html5.4.3. 测试验证目前RedShift到MaxCompute 迁移的数据测试验证工作,还没有工具可以支持,需要自行编写脚本工具完成,常用校验方案有如下几种:表结构校验,从 RedShift和MaxCompute 分别导出数据表列及类型定义后计算md5 进行校验数据表行数比对,执行 SQL 语句分别在 RedShift和MaxCompute 统计相同表的数据行数进行逐行比对数据全量校验,一般用于核心表且数据量较小的校验场景,导出全量数据计算md5 进行校验,或全量数据分段计算 md5 进行校验数据抽样校验,一般用于核心大表的数据校验场景,按一定抽样规则从源和目标抽取数据进行校验。原文链接:http://click.aliyun.com/m/1000305755/本文为阿里云原创内容,未经允许不得转载。


本文出自快速备案,转载时请注明出处及相应链接。

本文永久链接: https://www.xiaosb.com/beian/36898/