在云数据融合中转换为日期

Convert to date in cloud datafusion

我们如何在云数据融合中将字符串转换为日期?

我有一列的值为 20191120(yyyyMMdd 的格式),我想将其作为日期加载到 bigquery 中的 table 中。 table 列数据类型也是日期。

到目前为止我尝试的是使用 "parse-as-simple-date" 将字符串转换为时间戳,并尝试使用 format-date to "yyyy-MM-dd" 将其转换为格式,但是这一步将其转换为字符串,最终加载失败。我什至试图在 o/p 模式中明确提及该列作为日期作为日期。但是它在运行时失败了。

我尝试将其作为时间戳保留在管道中并尝试将日期加载到 Bigquery 日期类型中。

我注意到出现的错误是 op 字段 dt_1 与 avro 整数不兼容。 datafusion 在加载之前是否在内部将提取物转换为 avro。 AVRO 没有导致问题的日期数据类型?

您可以尝试使用 Wrangler.

通过数据融合解析您的输入数据

为了测试它,我复制了一个工作流,其中数据融合管道被提供来自 BigQuery 的数据。然后将此数据解析为正确的类型,然后再次导出回 BigQuery。请注意,public 数据集是“austin_311”,我使用了“311_request”table,因为它们的一些列是 TIMESTAMP 类型。

我做的步骤如下:

  1. 我查询了包含 TIMESTAMP 数据的 public 数据集:

    select * from `bigquery-public-data.austin_311.311_request`
    limit 1000;
    
  2. 我已经上传到Google云存储。

  3. 我在 this 之后创建了一个新的数据融合批处理管道。

  4. 我已经使用 Wrangler 解析 CSV 数据来自定义 'Simple Data' yyyy-MM-dd HH:mm:ss

  5. 我已将管道结果导出到 BigQuery。

This qwiklab 帮助我完成了这些步骤。

结果:

按照上述步骤,我已经能够将 Data Fusion 数据导出到 BigQuery,并且 DATE 字段按预期导出为 TIMESTAMP。


为后代添加答案:

你可以尝试做这些,

  1. 转到 wrangler 中的 LocalDateTime 列
  2. 打开下拉菜单并单击 "Custom Transform"
  3. 键入 timestamp.toLocalDate()(时间戳是列名)

在最后一步之后,它应该将其转换为您可以写入 bigquery 的 LocalDate 类型。希望这有帮助

对于这种特定的日期格式,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-simple-date.md

https://github.com/data-integrations/wrangler/blob/develop/wrangler-docs/directives/parse-as-date.md