我正在尝试使用Glue使用sparksql(spark cluster 3.0)将来自s3/csv文件的字符串转换为aurora mysql
csv 中的现有字符串值:20231021134021+0100 预期时间戳:2023-10-21 14:40:21(添加了偏移时间)
from awsglue.dynamicframe import DynamicFrame
# Use Spark SQL to parse the date-time string and add the time zone offset
spark_sql = glueContext.sql("""
SELECT
DATE_ADD(
to_timestamp(SUBSTRING(your_datetime_column, 1, 14), 'yyyyMMddHHmmss'),
INTERVAL CAST(SUBSTRING(your_datetime_column, 15, 2) AS INT) HOURS
+ CAST(SUBSTRING(your_datetime_column, 17, 2) AS INT) MINUTES
) AS
FROM my_data
""")
result_df = spark.sql(spark_sql)
result_dyf = DynamicFrame.fromDF(result_df, glueContext, "result_dyf")
我收到解析错误,INTERVAL 不支持强制转换吗? 如果我只是使用直到时间戳如下
select to_timestamp(SUBSTRING(your_datetime_column, 1, 14), 'yyyyMMddHHmmss') from my_data
或 从 my_data 选择 to_timestamp(SUBSTRING(your_datetime_column, 1, 14), 'yyyyMMddHHmmss') + INTERVAL 1 分钟 两者都工作得很好,但当我使用提取偏移量时则不行
有更好的方法来处理如何在时间戳内包含偏移值吗?
有一个专用的
x
pattern 用于区域偏移,因此解析字符串值非常简单:
spark.sql("""select to_timestamp('20231021134021+0100', 'yyyyMMddHHmmssx') as ts""").show
+-------------------+
| ts|
+-------------------+
|2023-10-21 14:40:21|
+-------------------+