首页 > 解决方案 > GCP将数据作为字符串从GCS中的CSV文件加载到BigQuery表中

问题描述

Google Cloud Storage 中的 CSV 文件具有“dd/mm/yyyy”格式的日期值,当加载到 Bigquery 表中时,它的格式为“mm/dd/yyyy”。

为了解决这个问题,我创建了一个表,其中所述字段为“字符串”,并在尝试从文件中加载数据时显示:

Provided Schema does not match Table <table name>. Field TRADE_DATE has changed type from STRING to DATE

如何将日期作为字符串从 CSV 文件加载到 BigQuery 表中?

标签: google-cloud-platformgoogle-bigquerygoogle-cloud-storage

解决方案


由于您的表已经有一个将日期列定义为字符串数据类型的架构,因此当您尝试从启用自动检测的 GCS 加载数据时,会出现架构不匹配的情况。自动检测架构将日期列读取为日期数据类型而不是字符串。如果您取消选中自动检测架构选项,则需要在加载数据时手动提供架构。

考虑使用以下步骤:-

  • 从 GCS 存储桶中的 CSV 文件创建一个表,并通过保持自动检测架构选项未选中来手动提供架构。
  • 为日期列提供数据类型作为字符串。使用高级选项下拉菜单跳过标题行(如果有)。
  • 将日期列“TDate”解析为在表上运行以下查询的正确格式:-
SELECT Tid, parse_date("%d/%m/%Y", TDate) as TDate FROM `projectName.DatasetName.tableName`
  • 我在格式字符串中使用了“/”作为分隔符,以匹配您提供的日期格式。您可以参考此文档了解更多支持的格式元素。
  • 通过单击控制台上的“保存结果”按钮,将上述查询的结果保存在不同的表中。您可以看到“TDate”列的数据类型是新表中的日期。如果您在将查询输出保存到表时需要帮助,可以参考此文档。
  • 您可以通过运行以下查询来验证 BigQuery 是否以您已解析的格式识别日期:-
SELECT EXTRACT(Day FROM TDate ) as Day, EXTRACT(MONTH FROM TDate ) as Month FROM `projectName.DatasetName.tableName`
  • 您可以参阅此文档,详细了解 BigQuery 中的日期函数。

如果您可以选择更改 CSV 文件,则可以参考此BigQuery 文档。它提到,当您将数据从 CSV 文件加载到 BigQuery 时,“日期”列中的值必须使用“-”分隔符,并且日期必须采用以下格式:YYYY-MM-DD。


推荐阅读