如何使用 sql 从一个字符串列中提取多列

How to extract multiple columns from one string column using sql

我有两列,在费用列中我有不同的费用,例如 postnegtransferdrawer 费用

ref_no charges
001 POSTEX USD 100 B^NEGO USD 200 B^TRAN USD 150
002 POSTEX USD 400 B^TRAN USD 350
003 NEGO USD 700 B^TRAN USD 350
004 DRAW USD 700

现在我想要的是这样的:

ref_no POSTEX NEGO TRAN DRAW
001 POSTEX USD 100 NEGO USD 200 TRAN USD 150
002 POSTEX USD 400 TRAN USD 350
003 NEGO USD 700 TRAN USD 350
004 DRAW USD 700

我试过使用 lateral view + split 但它不起作用,有没有其他方法可以使用 SparkSQL 或 MySql?

在 Spark SQL 中使用 regexp_extract 函数的一种方法:

spark.sql(r"""
    SELECT  ref_no,
            regexp_extract(charges, '(POSTEX USD \d+)', 1)  AS POSTEX,
            regexp_extract(charges, '(NEGO USD \d+)', 1)    AS NEGO,
            regexp_extract(charges, '(TRAN USD \d+)', 1)    AS TRAN,
            regexp_extract(charges, '(DRAW USD \d+)', 1)    AS DRAW
    FROM    my_table
""").show()

#+------+--------------+------------+------------+------------+
#|ref_no|        POSTEX|        NEGO|        TRAN|        DRAW|
#+------+--------------+------------+------------+------------+
#|   001|POSTEX USD 100|NEGO USD 200|TRAN USD 150|            |
#|   002|POSTEX USD 400|            |TRAN USD 350|            |
#|   003|              |NEGO USD 700|TRAN USD 350|            |
#|   004|              |            |            |DRAW USD 700|
#+------+--------------+------------+------------+------------+