如何在 Bigquery 中将 csv 的所有列导入为字符串

How to import all columns of a csv as Strings in Bigquery

我正在使用气流将 CSV 文件(例如 FILE__YYYYMMDD.csv)从 GCS 存储桶解档到 BigQuery.由于文件在几个月内不断演变,其架构发生了变化(添加了更多列)。所以我使用选项 autodetect 在 BQ 中设置 table 模式。不幸的是,某些关键列被自动检测为错误(出于某种原因将十六进制哈希检测为浮点数),因此我想将每一列作为字符串导入,然后将其转换到应该分析 table 的查询中。 ..

  1. 您推荐这种方法吗?
  2. 如何告诉 Bigquery“自动检测列(名称),但将它们的类型设置为字符串

如果模式可以随时更改,最安全的方法是创建工作流:

  • 在临时文件中导入新文件table
  • 创建合并查询以将临时 table 中的数据合并到最终查询中。在该合并查询中,您可以将字段转换为您希望在最终 table.
  • 中合并数据的格式

(临时table会自动删除)


编辑 1

在评论讨论之后,您的用例无法在 BigQuery 上开箱即用。集成之前你必须做更多的事情。

我的想法是:

  • 当有文件进来时,获取 header 行
  • 获取目标的架构table
    • 如果 header 的字段多于目标 table,请使用 STRING 类型的新列更新架构。
  • 使用您从 header 读数中推断出的架构在 BigQuery 中加载文件,并使用 allow_jagged_rows 参数以允许与最终架构更少的列集成。从云存储中加载文件,而不是从您的代码中加载文件。