将 csv 从 GCS 上传到 BigQuery 时,有没有办法提供架构或 auto-detect 架构?

Is there a way to provide schema or auto-detect schema when uploading csv from GCS to BigQuery?

我正在尝试将 csv 文件从 Google 云存储 (GCS) 上传到 BigQuery (BQ) 和 auto-detect 架构。

我尝试做的是启用 auto-detect 架构并在“Header 待跳过行”选项中输入要跳过的行数。我有 6 行,其中包含有关我需要跳过的数据的描述性信息。第 7 行是我实际的 header 行。

根据 Google 中的文档:https://cloud.google.com/bigquery/docs/schema-detect#auto-detect:

“字段类型基于具有最多字段的行。因此,auto-detection 应该按预期工作,只要至少有一行数据具有值在每个 column/field."

我的 CSV 的问题是在我的行中有空值的意义上不满足上述条件。

此外,我的 CSV 包含许多不包含任何数值的行,我认为这会为 Google 的模式自动检测增加额外的复杂性。

自动检测未检测到正确的列名或字段类型。所有字段类型都被检测为字符串和列名,如:string_field_0、string_field_1、string_field_3 等。它还将我的 CSV 的列名作为一行数据传递。

我想知道如何通过跳过不需要的前导行并使用正确的架构(字段名称和字段类型)将此 CSV 文件正确上传到 BQ。

您可以尝试使用 bigquery-schema-generator 等工具从您的 csv 文件生成架构,然后在 bq load 作业中使用它。

在阅读了一些文档之后,特别是 CVS header section 我认为您所观察到的是预期的行为。

另一种方法是手动指定数据的架构。

通过在要跳过的行数中包含我在 csv 中的实际 header 行来解决此问题。

我实际上需要跳过 6 行。第 7 行是我的 header(列名)。我在要跳过的 Header 行中输入 6。

当我输入 7 而不是 6 时,模式被自动正确检测到。

此外,我意识到 Google 文档中的这句话:“字段类型基于具有最多字段的行。因此,auto-detection 应该按预期工作,只要因为在每个 column/field 中至少有一行数据 具有值 。 .

希望这对面临同样问题的人有所帮助!