如何在 Bigquery 中将 csv 的所有列导入为字符串
How to import all columns of a csv as Strings in Bigquery
我正在使用气流将 CSV
文件(例如 FILE__YYYYMMDD.csv)从 GCS 存储桶解档到 BigQuery.由于文件在几个月内不断演变,其架构发生了变化(添加了更多列)。所以我使用选项 autodetect
在 BQ 中设置 table 模式。不幸的是,某些关键列被自动检测为错误(出于某种原因将十六进制哈希检测为浮点数),因此我想将每一列作为字符串导入,然后将其转换到应该分析 table 的查询中。 ..
- 您推荐这种方法吗?
- 如何告诉 Bigquery“自动检测列(名称),但将它们的类型设置为字符串”
如果模式可以随时更改,最安全的方法是创建工作流:
- 在临时文件中导入新文件table
- 创建合并查询以将临时 table 中的数据合并到最终查询中。在该合并查询中,您可以将字段转换为您希望在最终 table.
中合并数据的格式
(临时table会自动删除)
编辑 1
在评论讨论之后,您的用例无法在 BigQuery 上开箱即用。集成之前你必须做更多的事情。
我的想法是:
- 当有文件进来时,获取 header 行
- 获取目标的架构table
- 如果 header 的字段多于目标 table,请使用 STRING 类型的新列更新架构。
- 使用您从 header 读数中推断出的架构在 BigQuery 中加载文件,并使用
allow_jagged_rows
参数以允许与最终架构更少的列集成。从云存储中加载文件,而不是从您的代码中加载文件。
我正在使用气流将 CSV
文件(例如 FILE__YYYYMMDD.csv)从 GCS 存储桶解档到 BigQuery.由于文件在几个月内不断演变,其架构发生了变化(添加了更多列)。所以我使用选项 autodetect
在 BQ 中设置 table 模式。不幸的是,某些关键列被自动检测为错误(出于某种原因将十六进制哈希检测为浮点数),因此我想将每一列作为字符串导入,然后将其转换到应该分析 table 的查询中。 ..
- 您推荐这种方法吗?
- 如何告诉 Bigquery“自动检测列(名称),但将它们的类型设置为字符串”
如果模式可以随时更改,最安全的方法是创建工作流:
- 在临时文件中导入新文件table
- 创建合并查询以将临时 table 中的数据合并到最终查询中。在该合并查询中,您可以将字段转换为您希望在最终 table. 中合并数据的格式
(临时table会自动删除)
编辑 1
在评论讨论之后,您的用例无法在 BigQuery 上开箱即用。集成之前你必须做更多的事情。
我的想法是:
- 当有文件进来时,获取 header 行
- 获取目标的架构table
- 如果 header 的字段多于目标 table,请使用 STRING 类型的新列更新架构。
- 使用您从 header 读数中推断出的架构在 BigQuery 中加载文件,并使用
allow_jagged_rows
参数以允许与最终架构更少的列集成。从云存储中加载文件,而不是从您的代码中加载文件。