【发布时间】:2021-10-25 03:13:32
【问题描述】:
目前我有几个文件,我想将它们上传到数据库,创建带有一些元数据的新列。我拥有的文件示例如下:
MYBRAND-GOOD_20210202.tab
MYBRAND-BAD_20210202.tab
MYBRAND_20210202.tab
每个文件都有 x、y、z 列,另外我想根据文件的某些属性创建 3 个带有元数据的新列。我想要的结果如下:
Table MYBRAND-GOOD
x | y | z | brand | FILE_DATE | SOURCE_DETAILS | Name
a. b c GOOD 20210202 tab MYBRAND-GOOD_20210202
Table MYBRAND-BAD
x | y | z | brand | FILE_DATE | SOURCE_DETAILS | Name
a. b c BAD 20210202 tab MYBRAND-BAD_20210202
Table MYBRAND
x | y | z | brand | FILE_DATE | SOURCE_DETAILS | Name
a. b c MYBRAND 20210202 tab MYBRAND_20210202
我目前正在做的事情如下:
SELECT x,y,z,
split(INPUT_FILE_NAME(),'- | _')[1] AS brand,
regexp_extract(INPUT_FILE_NAME(), '.*/modified_dttm=(.*)/.+', 1) AS FILE_DATE,
regexp_extract(regexp_replace(INPUT_FILE_NAME()\\,'%20'\\,'')\\, '.*/.*-([0-9]{4}-[0-9]{2}-[0-9]{2}).tab'\\, 1)) AS SOURCE_DETAILS
regexp_extract(INPUT_FILE_NAME(), '^([^\.]+)\.?', 0) AS NAME
但是我面临几个问题(因为我对正则表达式不是很精通):
- 如果没有“-”分隔符,则品牌失败(如“MYBRAND”中的)
- 我不确定 'FILE_DATE' 是否符合预期
- SOURCE_DETAILS 给我的结果是空的
- NAME 没问题,但我想排除 '.'
如果有人可以指导我使用这个我没有完全遵循的正则表达式规则,我将不胜感激。
【问题讨论】:
标签: sql regex apache-spark pyspark