我正在尝试将函数从 MySQL 数据库迁移/创建到 Amazon Redshift。我尝试使用一些工具将 MySQL 转换为 Redshift 但这条线不起作用:
声明 saldoAtual、saldoInicial、idPerfil INT 默认 0;
我不断收到错误消息,提示“INT”有问题。
有人可以帮助我吗?
您将需要弹出一个级别并评估您的 My SQL 代码正在做什么。 在本例中,您会看到 MySQL 上的 DECLARE 正在声明一个变量并设置其类型和默认值。 Redshift 上的 DECLARE 语句用于定义用于操作查询输出的游标。 这是两个完全不同的动作,只是碰巧使用了同一个术语。 这些没有映射。
此外,Redshift 没有您在 SQL 级别定义和使用的变量。 Redshift 没有像许多事务数据库那样的操作环境。 它专注于执行查询,而不是围绕这些查询执行过程脚本。 它与MySQL有不同的分工。 您会看到 Redshift 是更大的计算环境 AWS 的一部分,这些过程操作预计将使用 Lambda、Glue 或 Data Pipeline 等工具在数据库外部运行。
Redshift 确实有存储过程,根据您的用例,您也许能够将代码映射到存储过程中。 这些确实不能互换,但你也许可以摆脱它。 否则,您将需要评估您的 MySQL 代码正在做什么,并将其映射到 AWS 的正确工具级别。
您可以将以下 DB2 查询转换为 Redshift 吗?
SELECT * FROM (SELECT x.EMP_NUM, x.FROM_DT, x.TO_DT, SUM(x.WG_1001_AMNT) 作为 WG_1001_AMNT,LISTAGG(x.WG_1001_CRNCY, '') 在组内(按 x.WG_1001_AMNT 排序)作为 WG_1001_CRNCY, SUM(x.WG_1001_NUM) 作为 WG_1001_NUM,LISTAGG(x.WG_1001_NUM_UNIT, '') 在组内(按 x.WG_1001_NUM 排序)作为 WG_1001_NUM_UNIT, SUM(x.WG_1002_AMNT) 作为 WG_1002_AMNT,LISTAGG(x.WG_1002_CRNCY, '') 在组内(按 x.WG_1002_AMNT 排序)作为 WG_1002_CRNCY, SUM(x.WG_1003_AMNT) 作为 WG_1003_AMNT,LISTAGG(x.WG_1003_CRNCY, '') 在组内(按 x.WG_1003_AMNT 排序)作为 WG_1003_CRNCY, (从 ods.HCM_SRC_REC_PYMNTS_DEDUCTIONS p 选择不同的 p.AMNT 其中 p.EMP_NUM = x.EMP_NUM 且 p.WAGE_TYP_CD = '2350' AND p.FROM_DT <= x.TO_DT AND p.TO_DT >= x.FROM_DT AND p.TO_DT = (从 ods.HCM_SRC_REC_PYMNTS_DEDUCTIONS pp 中选择最大值(pp.TO_DT) 其中 pp.emp_num = p.emp_num AND pp.WAGE_TYP_CD = p.WAGE_TYP_CD AND pp.FROM_DT <= x.TO_DT)) as WG_2350_AMNT, (SELECT DISTINCT p.CRNCY_CD FROM ods.HCM_SRC_REC_PYMNTS_DEDUCTIONS p WHERE p.EMP_NUM = x.EMP_NUM AND p.WAGE_TYP_CD = '2350' AND p.FROM_DT <= x.TO_DT AND p.TO_DT >= x.FROM_DT AND p.TO_DT = (从 ods.HCM_SRC_REC_PYMNTS_DEDUCTIONS pp 中选择最大值(pp.TO_DT) 其中 pp.emp_num = p.emp_num AND pp.WAGE_TYP_CD = p.WAGE_TYP_CD AND pp.FROM_DT <= x.TO_DT)) as WG_2350_CRNCY, (SELECT DISTINCT p.NUM FROM ods.HCM_SRC_REC_PYMNTS_DEDUCTIONS p WHERE p.EMP_NUM = x.EMP_NUM AND p.WAGE_TYP_CD = '2351' AND p.FROM_DT <= x.TO_DT AND p.TO_DT >= x.FROM_DT AND p.TO_DT = (从 ods.HCM_SRC_REC_PYMNTS_DEDUCTIONS pp 中选择最大值(pp.TO_DT) 其中 pp.emp_num = p.emp_num AND pp.WAGE_TYP_CD = p.WAGE_TYP_CD AND pp.FROM_DT <= x.TO_DT)) as WG_2351_NUM, (SELECT DISTINCT p.UNIT FROM ods.HCM_SRC_REC_PYMNTS_DEDUCTIONS p WHERE p.EMP_NUM = x.EMP_NUM AND p.WAGE_TYP_CD = '2351' AND p.FROM_DT <= x.TO_DT AND p.TO_DT >= x.FROM_DT AND p.TO_DT = (从 ods.HCM_SRC_REC_PYMNTS_DEDUCTIONS pp 中选择最大值(pp.TO_DT) 其中 pp.emp_num = p.emp_num AND pp.WAGE_TYP_CD = p.WAGE_TYP_CD AND pp.FROM_DT <= x.TO_DT)) as WG_2351_UNIT, (SELECT DISTINCT p.AMNT FROM ods.HCM_SRC_ADDITIONAL_PAYMENTS p WHERE p.EMP_NUM = x.EMP_NUM AND p.WAGE_TYP_CD = '2352' AND p.FROM_DT <= x.TO_DT AND p.TO_DT >= x.FROM_DT AND p.TO_DT = (SELECT MAX(pp.TO_DT) FROM ods.HCM_SRC_ADDITIONAL_PAYMENTS pp 其中 pp.emp_num = p.emp_num AND pp.WAGE_TYP_CD = p.WAGE_TYP_CD AND pp.FROM_DT <= x.TO_DT)) as WG_2352_AMNT, (SELECT p.CRNCY_CD FROM ods.HCM_SRC_ADDITIONAL_PAYMENTS p WHERE p.EMP_NUM = x.EMP_NUM AND p.WAGE_TYP_CD = '2352' AND p.FROM_DT <= x.TO_DT AND p.TO_DT >= x.FROM_DT AND p.TO_DT = (SELECT MAX(pp.TO_DT) FROM ods.HCM_SRC_ADDITIONAL_PAYMENTS pp 其中 pp.emp_num = p.emp_num AND pp.WAGE_TYP_CD = p.WAGE_TYP_CD AND pp.FROM_DT <= x.TO_DT)) as WG_2352_CRNCY, (SELECT p.AMNT FROM ods.HCM_SRC_ADDITIONAL_PAYMENTS p WHERE p.EMP_NUM = x.EMP_NUM AND p.WAGE_TYP_CD = '2353' AND p.FROM_DT <= x.TO_DT AND p.TO_DT >= x.FROM_DT AND p.TO_DT = (SELECT MAX(pp.TO_DT) FROM ods.HCM_SRC_ADDITIONAL_PAYMENTS pp 其中 pp.emp_num = p.emp_num AND pp.WAGE_TYP_CD = p.WAGE_TYP_CD AND pp.FROM_DT <= x.TO_DT)) as WG_2353_AMNT, (SELECT p.CRNCY_CD FROM ods.HCM_SRC_ADDITIONAL_PAYMENTS p WHERE p.EMP_NUM = x.EMP_NUM AND p.WAGE_TYP_CD = '2353' AND p.FROM_DT <= x.TO_DT AND p.TO_DT >= x.FROM_DT AND p.TO_DT = (SELECT MAX(pp.TO_DT) FROM ods.HCM_SRC_ADDITIONAL_PAYMENTS pp 其中 pp.emp_num = p.emp_num AND pp.WAGE_TYP_CD = p.WAGE_TYP_CD AND 第 FROM_DT <= x.TO_DT)) as WG_2353_CRNCY, x.SAL_ANNL, x.SAL_CRNCY_CD, x.SAL_PCTL, 'SAP' as DATA_SRC, SYSDATE as LST_UPD_DT, MAX(x.PAY_SCALE_LVL_CD) AS PAY_SCALE_LVL_CD, x.PAY_SCALE_GRP_CD FROM ( SELECT p1.EMP_NUM,p1.WAGE_TYP_CD, p1.FROM_DT, p1.TO_DT, p1.SAL_ANNL, p1.SAL_CRNCY_CD, p1.SAL_PCTL, p1.PAY_SCALE_LVL_CD, p1.PAY_SCALE_GRP_CD, -- new column add CHG0052095 CASE WHEN p1.WAGE_TYP_CD = '1001' THEN p1.AMNT ELSE 0 END as WG_1001_AMNT, CASE WHEN p1.WAGE_TYP_CD = '1001' THEN p1.AMNT_CRNCY ELSE NULL END as WG_1001_CRNCY, CASE WHEN p1.WAGE_TYP_CD = '1001' THEN p1.NUM ELSE NULL END as WG_1001_NUM, CASE WHEN p1.WAGE_TYP_CD = '1001' THEN p1.NUM_UNIT ELSE NULL END as WG_1001_NUM_UNIT, CASE WHEN p1.WAGE_TYP_CD = '1002' THEN p1.AMNT ELSE 0 END as WG_1002_AMNT, CASE WHEN p1.WAGE_TYP_CD = '1002' THEN p1.AMNT_CRNCY ELSE NULL END as WG_1002_CRNCY, CASE WHEN p1.WAGE_TYP_CD = '1003' THEN p1.AMNT ELSE 0 END as WG_1003_AMNT, CASE WHEN p1.WAGE_TYP_CD = '1003' THEN p1.AMNT_CRNCY ELSE NULL END as WG_1003_CRNCY FROM ods.HCM_SRC_BASIC_PAY p1 ) x GROUP BY x.EMP_NUM, x.FROM_DT, x.TO_DT,x.SAL_ANNL,x.SAL_CRNCY_CD,x.SAL_PCTL, x.PAY_SCALE_GRP_CD) --WHERE emp_num=750