将 PL/SQL 个程序转换为 Pyspark
Converting PL/SQL procedures to Pyspark
BEGIN
open v_refcur for
SELECT A.LGCY_LNDR_NO
, A.LGCY_LNDR_BR_NO
, A.LNDR_NM
, B.ADDR_LINE1_TXT
, B.ADDR_LINE2_TXT
, B.CITY_NM
, B.ST_CD
, B.POSTAL_CD
, C.FAX_NO
FROM LNDR_CUST_XREF A
LEFT OUTER JOIN LNDR_CUST_ADDR B
ON A.LNDR_ID = B.LNDR_ID
AND B.ADDR_TYP_CD = 'MAIL'
LEFT OUTER JOIN LNDR_CUST_ADDR C
ON A.LNDR_ID = C.LNDR_ID
AND C.ADDR_TYP_CD = 'SITE'
WHERE A.LGCY_LNDR_NO = LNDR_NO
AND A.LGCY_LNDR_BR_NO = BRN_NO
AND A.TA_CUST_FLG = 'Y';
SQL_CD := SWV_SQLCODE;
END;
以上代码逐行转换会是什么?我手头没有数据库,那么 Pyspark 中 PL/SQL 代码最合适的要点是什么?
这个语句可以是re-written类似下面的东西-
df = (df_LNDR_CUST_XREF.alias('A')
.df_LNDR_CUST_ADDR.alias('B'), ((A.LNDR_ID == B.LNDR_ID) & (B.ADDR_TYP_CD == 'MAIL'), "left")
.df_LNDR_CUST_ADDR.alias('C'), ((A.LNDR_ID == C.LNDR_ID) & (C.ADDR_TYP_CD == 'SITE'), "left")
.where ((A.LGCY_LNDR_NO == LNDR_NO) & (A.LGCY_LNDR_BR_NO == BRN_NO) & (A.TA_CUST_FLG == 'Y'))
.select (F.col("A.LGCY_LNDR_NO")
, F.col("A.LGCY_LNDR_BR_NO")
, F.col("A.LNDR_NM")
, F.col("B.ADDR_LINE1_TXT")
, F.col("B.ADDR_LINE2_TXT")
, F.col("B.CITY_NM")
, F.col("B.ST_CD")
, F.col("B.POSTAL_CD")
, F.col("C.FAX_NO"))
)
不过我还没有测试过。
BEGIN
open v_refcur for
SELECT A.LGCY_LNDR_NO
, A.LGCY_LNDR_BR_NO
, A.LNDR_NM
, B.ADDR_LINE1_TXT
, B.ADDR_LINE2_TXT
, B.CITY_NM
, B.ST_CD
, B.POSTAL_CD
, C.FAX_NO
FROM LNDR_CUST_XREF A
LEFT OUTER JOIN LNDR_CUST_ADDR B
ON A.LNDR_ID = B.LNDR_ID
AND B.ADDR_TYP_CD = 'MAIL'
LEFT OUTER JOIN LNDR_CUST_ADDR C
ON A.LNDR_ID = C.LNDR_ID
AND C.ADDR_TYP_CD = 'SITE'
WHERE A.LGCY_LNDR_NO = LNDR_NO
AND A.LGCY_LNDR_BR_NO = BRN_NO
AND A.TA_CUST_FLG = 'Y';
SQL_CD := SWV_SQLCODE;
END;
以上代码逐行转换会是什么?我手头没有数据库,那么 Pyspark 中 PL/SQL 代码最合适的要点是什么?
这个语句可以是re-written类似下面的东西-
df = (df_LNDR_CUST_XREF.alias('A')
.df_LNDR_CUST_ADDR.alias('B'), ((A.LNDR_ID == B.LNDR_ID) & (B.ADDR_TYP_CD == 'MAIL'), "left")
.df_LNDR_CUST_ADDR.alias('C'), ((A.LNDR_ID == C.LNDR_ID) & (C.ADDR_TYP_CD == 'SITE'), "left")
.where ((A.LGCY_LNDR_NO == LNDR_NO) & (A.LGCY_LNDR_BR_NO == BRN_NO) & (A.TA_CUST_FLG == 'Y'))
.select (F.col("A.LGCY_LNDR_NO")
, F.col("A.LGCY_LNDR_BR_NO")
, F.col("A.LNDR_NM")
, F.col("B.ADDR_LINE1_TXT")
, F.col("B.ADDR_LINE2_TXT")
, F.col("B.CITY_NM")
, F.col("B.ST_CD")
, F.col("B.POSTAL_CD")
, F.col("C.FAX_NO"))
)
不过我还没有测试过。