BigQuery 无法从 CSV 文件中解析 M/D/YYYY 格式的日期

Rya*_*uck 3 google-bigquery

问题

我正在尝试从 Google Cloud Storage 中的 CSV 文件创建 BigQuery 表。

我明确定义了加载作业的架构(如下)并将标题行设置为“skip = 1”。

数据

$ cat date_formatting_test.csv
id,shipped,name
0,1/10/2019,ryan
1,2/1/2019,blah
2,10/1/2013,asdf
Run Code Online (Sandbox Code Playgroud)

模式

id:INTEGER,
shipped:DATE,
name:STRING
Run Code Online (Sandbox Code Playgroud)

错误

BigQuery 产生以下错误:

读取数据时出错,错误消息:无法将“1/10/2019”解析为从位置 17 开始的现场发货(位置 1)的日期

问题

据我了解,该日期不是 ISO 格式 (2019-01-10),我认为该格式可以使用。

不过,我正在尝试定义一个更灵活的输入配置,使 BigQuery 能够正确加载普通美国人认为有效的任何日期。

  1. 有没有办法指定预期的日期格式?
  2. 是否有单独的配置/设置允许我使用按原样定义的架构成功加载提供的 CSV?

vin*_*oaj 10

根据列出的限制

When you load CSV or JSON data, values in DATE columns must use 
the dash (-) separator and the date must be in the following 
format: YYYY-MM-DD (year-month-day).
Run Code Online (Sandbox Code Playgroud)

所以这给我们留下了两个选择:

选项 1:ETL

  • 将新的 CSV 文件放入 Google Cloud Storage
  • 这反过来会触发Google Cloud FunctionGoogle Cloud Composer作业来:
    • 编辑所有 CSV 文件中的日期列
    • 将编辑后的文件保存回 Google Cloud Storage
    • 将修改后的 CSV 文件加载到 Google BigQuery 中

选项 2:ELT

  • 将 CSV 文件按原样加载到 BigQuery(即您的架构应修改为shipped:STRING
  • 创建一个 BigQuery 视图,将shipped字段从字符串转换为可识别的日期格式。使用SELECT id, PARSE_DATE('%m/%d/%Y', shipped) AS shipped, name
  • 使用该视图进行分析

根据您的描述,我不确定这是一次性工作还是重复性工作。如果是一次性的,我会选择选项 2,因为它需要最少的努力。选项 1 需要付出更多的努力,并且只有对于重复性工作才值得。