问题
我正在尝试从 Google Cloud Storage 中的 CSV 文件创建 BigQuery 表。
我明确定义了加载作业的架构(如下所示)并设置了要跳过的标题行 = 1。
数据
$ cat date_formatting_test.csv
id,shipped,name
0,1/10/2019,ryan
1,2/1/2019,blah
2,10/1/2013,asdf
架构
id:INTEGER,
shipped:DATE,
name:STRING
错误
BigQuery 产生以下错误:
Error while reading data, error message: Could not parse '1/10/2019' as date for field shipped (position 1) starting at location 17
问题
我知道这个日期不是 ISO 格式 (2019-01-10),我假设它会起作用。
但是,我正在尝试定义一个更灵活的输入配置,BigQuery 将借此正确加载普通美国人认为有效的任何日期。
- 有没有办法指定预期的日期格式?
- 是否有单独的配置/设置允许我使用按原样定义的模式成功加载提供的 CSV?
最佳答案
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).
所以这给我们留下了 2 个选择:
选项 1:ETL
- 将新的 CSV 文件放入 Google Cloud Storage
- 这反过来会触发 Google Cloud Function或 Google Cloud Composer工作:
- 编辑所有 CSV 文件中的日期列
- 将编辑后的文件保存回 Google Cloud Storage
- 将修改后的 CSV 文件加载到 Google BigQuery 中
选项 2:ELT
- 按原样将 CSV 文件加载到 BigQuery(即您的架构应修改为
shipped:STRING
) - 创建一个 BigQuery View ,将
shipped
字段从字符串转换为可识别的日期格式。使用SELECT id, PARSE_DATE('%m/%d/%Y', shipped) AS shipped, name
- 使用该 View 进行分析
根据您的描述,我不确定这是一次性工作还是经常性工作。如果它是一次性的,我会选择选项 2,因为它需要最少的努力。选项 1 需要更多的努力,并且只对重复性工作才值得。
关于google-bigquery - BigQuery 无法从 CSV 文件中解析 M/D/YYYY 格式的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59548775/