我们如何在云数据融合中将字符串转换为日期?
我有一列值说是20191120(yyyyMMdd的格式),我想将此列加载到bigquery中的表中作为日期。表列数据类型也是日期。
到目前为止,我一直在尝试使用“ parse-as-simple-date”将字符串转换为时间戳,然后尝试使用format-date将其转换为“ yyyy-MM-dd”格式,但这步骤将其转换为字符串,最终加载失败。我什至试图在o / p模式中将日期列明确提到为日期。但是它在运行时失败。
我尝试将其作为时间戳保留在管道中,并尝试将日期加载到Bigquery日期类型中。
我注意到错误来自op字段dt_1与avro整数不兼容。数据融合是在加载之前在内部将提取物转换为Avro吗? AVRO没有引起问题的日期数据类型?
答案 0 :(得分:1)
为后代添加答案:
您可以尝试执行这些操作
在最后一步之后,应将其转换为LocalDate类型,您可以将其写入bigquery。希望这会有所帮助
答案 1 :(得分:1)
对于这种特定的日期格式,Wrangler Transform 指令将是:
parse-as-simple-date date_field_dt yyyyMMdd
set-column date_field_dt date_field_dt.toLocalDate()
如果目的地是日期类型,则需要第二行。
跳过空值:
set-column date_field_dt empty(date_field_dt) ? date_field_dt : date_field_dt.toLocalDate()
参考文献:
https://github.com/data-integrations/wrangler/blob/develop/wrangler-docs/directives/parse-as-date.md
答案 2 :(得分:0)
您可以尝试使用Wrangler通过Data Fusion解析输入数据。
为了对其进行测试,我复制了一个工作流程,在该工作流程中,数据融合管道中输入了来自BigQuery的数据。然后,将这些数据解析为正确的类型,然后将其再次导出回BigQuery。请注意,公共数据集为“ austin_311”,我使用了“ 311_request”表,因为其中某些列是TIMESTAMP类型。
我完成的步骤如下:
我使用以下命令查询了包含TIMESTAMP数据的公共数据集:
select * from `bigquery-public-data.austin_311.311_request`
limit 1000;
我已将其上传到Google Cloud Storage。
我在this之后创建了一个新的Data Fusion批处理管道。
我已经使用Wrangler将CSV数据解析为自定义“简单数据” yyyy-MM-dd HH:mm:ss
我已将管道结果导出到BigQuery。
This qwiklab已帮助我完成了这些步骤。
结果:
按照上述步骤,我已经能够将Data Fusion数据导出到BigQuery,并且DATE字段按预期导出为TIMESTAMP。