google-cloud-platform - 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 表中?
解决方案
由于您的表已经有一个将日期列定义为字符串数据类型的架构,因此当您尝试从启用自动检测的 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。
推荐阅读
- spring-cloud-gateway - spring cloud 网关ip转发
- javascript - 为什么我得到 store is undefined 错误?
- php - 如何阻止 Facebook 应用接收未经授权的 API 调用
- django - 从 Django 设置中获取 broker_api
- javascript - 如果在字符串中找到,javascript保存单词
- openssl - 使用 Openssl 验证签名文档
- python - 无法在 python 和 selenium 自动化中传递价值
- javascript - 错误:ENOENT:没有这样的文件或目录,访问
- telethon - 如何修复 InvalidPeer 错误(Teleton ReportRequest)?
- sql - 当 SAL col 更新为新的加薪时触发火灾。此外,触发器将更新 EMPL 表中 X 列中 20% 的加薪金额