2

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

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

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

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

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

4

3 回答 3

4

为后代添加答案:

你可以试试做这些

  1. 转到牧马人中的 LocalDateTime 列
  2. 打开下拉菜单并单击“自定义转换”
  3. 输入 timestamp.toLocalDate() (timestamp 是列名)

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

于 2019-12-16T05:07:27.380 回答
2

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

于 2021-01-21T00:23:44.953 回答
0

您可以尝试使用Wrangler使用 Data Fusion 解析您的输入数据。

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

我所做的步骤如下:

  1. 我使用以下方法查询了一个包含 TIMESTAMP 数据的公共数据集:

    select * from `bigquery-public-data.austin_311.311_request`
    limit 1000;
    
  2. 我已将其上传到 Google Cloud Storage。

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

  4. 我已使用 Wrangler 将 CSV 数据解析为自定义“简单数据”yyyy-MM-dd HH:mm:ss

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

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

结果:

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


于 2019-12-09T14:09:01.023 回答